From b6a97f44c13f661506c36bec162f7dbdcf4c553f Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 25 Jun 2026 14:55:40 -0500 Subject: [PATCH 01/11] Migrating cuda-python samples from cuda-samples --- .github/workflows/test-wheel-linux.yml | 7 + .spdx-ignore | 4 + ci/tools/run-tests | 18 +- conftest.py | 4 + cuda_core/pixi.lock | 4872 ++++++++++++++++- cuda_core/pixi.toml | 32 +- pixi.toml | 7 + pytest.ini | 3 + ruff.toml | 13 +- samples/Utilities/README.md | 134 + samples/Utilities/__init__.py | 47 + samples/Utilities/cuda_samples_utils.py | 140 + samples/binarySearch/README.md | 129 + samples/binarySearch/binarySearch.py | 144 + samples/binarySearch/requirements.txt | 4 + samples/blockwiseSum/README.md | 102 + samples/blockwiseSum/blockwiseSum.py | 256 + samples/blockwiseSum/requirements.txt | 6 + samples/blurImageUnifiedMemory/README.md | 177 + .../blurImageUnifiedMemory.py | 278 + .../blurImageUnifiedMemory/blurred_image.png | Bin 0 -> 1407 bytes .../blurImageUnifiedMemory/original_image.png | Bin 0 -> 848 bytes .../blurImageUnifiedMemory/requirements.txt | 6 + samples/copyImageArraytoGPU/README.md | 119 + .../copyImageArraytoGPU.py | 242 + samples/copyImageArraytoGPU/requirements.txt | 6 + samples/cudaComputeLambdas/README.md | 130 + .../cudaComputeLambdas/cudaComputeLambdas.py | 179 + samples/cudaComputeLambdas/requirements.txt | 4 + samples/cudaGraphs/README.md | 140 + samples/cudaGraphs/cudaGraphs.py | 254 + samples/cudaGraphs/requirements.txt | 5 + samples/customPyTorchKernel/README.md | 62 + .../customPyTorchKernel.py | 389 ++ samples/customPyTorchKernel/requirements.txt | 10 + samples/customTensorFlowKernel/README.md | 81 + .../customTensorFlowKernel.py | 429 ++ .../customTensorFlowKernel/requirements.txt | 14 + samples/deviceQuery/README.md | 189 + samples/deviceQuery/deviceQuery.py | 360 ++ samples/deviceQuery/requirements.txt | 4 + samples/fftSignalAnalysis/README.md | 136 + .../fftSignalAnalysis/fftSignalAnalysis.py | 319 ++ samples/fftSignalAnalysis/requirements.txt | 6 + samples/greenContext/README.md | 250 + samples/greenContext/greenContext.py | 727 +++ samples/greenContext/requirements.txt | 3 + samples/ipcMemoryPool/README.md | 140 + samples/ipcMemoryPool/ipcMemoryPool.py | 214 + samples/ipcMemoryPool/requirements.txt | 4 + samples/jitLtoLinking/README.md | 133 + samples/jitLtoLinking/jitLtoLinking.py | 222 + samples/jitLtoLinking/requirements.txt | 5 + samples/kernelNsysProfile/README.md | 72 + .../kernelNsysProfile/kernelNsysProfile.py | 323 ++ samples/kernelNsysProfile/requirements.txt | 7 + samples/launchConfigTuning/README.md | 193 + .../launchConfigTuning/launchConfigTuning.py | 387 ++ samples/launchConfigTuning/requirements.txt | 6 + samples/matrixMulSharedMem/README.md | 183 + .../matrixMulSharedMem/matrixMulSharedMem.py | 253 + samples/matrixMulSharedMem/requirements.txt | 20 + samples/memoryResources/README.md | 151 + samples/memoryResources/memoryResources.py | 257 + samples/memoryResources/requirements.txt | 5 + samples/multiGPUGradientAverage/README.md | 128 + .../multiGPUGradientAverage.py | 402 ++ .../multiGPUGradientAverage/requirements.txt | 21 + samples/numpyVsCupy/README.md | 73 + samples/numpyVsCupy/numpyVsCupy.py | 141 + samples/numpyVsCupy/requirements.txt | 7 + samples/pageRank/README.md | 184 + samples/pageRank/pageRank.py | 364 ++ samples/pageRank/requirements.txt | 11 + samples/parallelHistogram/README.md | 117 + .../parallelHistogram/parallelHistogram.py | 240 + samples/parallelHistogram/requirements.txt | 7 + samples/parallelReduction/README.md | 119 + .../parallelReduction/parallelReduction.py | 375 ++ samples/parallelReduction/requirements.txt | 7 + samples/prefixSum/README.md | 83 + samples/prefixSum/prefixSum.py | 202 + samples/prefixSum/requirements.txt | 8 + samples/processCheckpoint/README.md | 206 + .../processCheckpoint/processCheckpoint.py | 263 + samples/processCheckpoint/requirements.txt | 4 + samples/reduction/README.md | 137 + samples/reduction/reduction.py | 480 ++ samples/reduction/requirements.txt | 8 + samples/reductionMultiBlockCG/README.md | 140 + .../reductionMultiBlockCG.py | 465 ++ .../reductionMultiBlockCG/requirements.txt | 10 + samples/simpleP2P/README.md | 190 + samples/simpleP2P/requirements.txt | 6 + samples/simpleP2P/simpleP2P.py | 358 ++ samples/simplePrint/README.md | 263 + samples/simplePrint/requirements.txt | 7 + samples/simplePrint/simplePrint.py | 289 + samples/simpleZeroCopy/README.md | 141 + samples/simpleZeroCopy/requirements.txt | 6 + samples/simpleZeroCopy/simpleZeroCopy.py | 275 + samples/streamingCopyComputeOverlap/README.md | 98 + .../requirements.txt | 6 + .../streamingCopyComputeOverlap.py | 308 ++ samples/systemInfo/README.md | 152 + samples/systemInfo/requirements.txt | 4 + samples/systemInfo/systemInfo.py | 199 + samples/tmaTensorMap/README.md | 138 + samples/tmaTensorMap/requirements.txt | 4 + samples/tmaTensorMap/tmaTensorMap.py | 278 + samples/vectorAdd/README.md | 130 + samples/vectorAdd/requirements.txt | 5 + samples/vectorAdd/vectorAdd.py | 192 + scripts/run_tests.sh | 11 + tests/samples/__init__.py | 2 + tests/samples/run_samples.py | 442 ++ tests/samples/test_args.json | 17 + tests/samples/test_samples.py | 64 + toolshed/check_spdx.py | 2 + 119 files changed, 20770 insertions(+), 35 deletions(-) create mode 100644 samples/Utilities/README.md create mode 100644 samples/Utilities/__init__.py create mode 100644 samples/Utilities/cuda_samples_utils.py create mode 100644 samples/binarySearch/README.md create mode 100644 samples/binarySearch/binarySearch.py create mode 100644 samples/binarySearch/requirements.txt create mode 100644 samples/blockwiseSum/README.md create mode 100644 samples/blockwiseSum/blockwiseSum.py create mode 100644 samples/blockwiseSum/requirements.txt create mode 100644 samples/blurImageUnifiedMemory/README.md create mode 100644 samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py create mode 100644 samples/blurImageUnifiedMemory/blurred_image.png create mode 100644 samples/blurImageUnifiedMemory/original_image.png create mode 100644 samples/blurImageUnifiedMemory/requirements.txt create mode 100644 samples/copyImageArraytoGPU/README.md create mode 100644 samples/copyImageArraytoGPU/copyImageArraytoGPU.py create mode 100644 samples/copyImageArraytoGPU/requirements.txt create mode 100644 samples/cudaComputeLambdas/README.md create mode 100644 samples/cudaComputeLambdas/cudaComputeLambdas.py create mode 100644 samples/cudaComputeLambdas/requirements.txt create mode 100644 samples/cudaGraphs/README.md create mode 100644 samples/cudaGraphs/cudaGraphs.py create mode 100644 samples/cudaGraphs/requirements.txt create mode 100644 samples/customPyTorchKernel/README.md create mode 100644 samples/customPyTorchKernel/customPyTorchKernel.py create mode 100644 samples/customPyTorchKernel/requirements.txt create mode 100644 samples/customTensorFlowKernel/README.md create mode 100644 samples/customTensorFlowKernel/customTensorFlowKernel.py create mode 100644 samples/customTensorFlowKernel/requirements.txt create mode 100644 samples/deviceQuery/README.md create mode 100755 samples/deviceQuery/deviceQuery.py create mode 100644 samples/deviceQuery/requirements.txt create mode 100644 samples/fftSignalAnalysis/README.md create mode 100644 samples/fftSignalAnalysis/fftSignalAnalysis.py create mode 100644 samples/fftSignalAnalysis/requirements.txt create mode 100644 samples/greenContext/README.md create mode 100644 samples/greenContext/greenContext.py create mode 100644 samples/greenContext/requirements.txt create mode 100644 samples/ipcMemoryPool/README.md create mode 100644 samples/ipcMemoryPool/ipcMemoryPool.py create mode 100644 samples/ipcMemoryPool/requirements.txt create mode 100644 samples/jitLtoLinking/README.md create mode 100644 samples/jitLtoLinking/jitLtoLinking.py create mode 100644 samples/jitLtoLinking/requirements.txt create mode 100644 samples/kernelNsysProfile/README.md create mode 100644 samples/kernelNsysProfile/kernelNsysProfile.py create mode 100644 samples/kernelNsysProfile/requirements.txt create mode 100644 samples/launchConfigTuning/README.md create mode 100644 samples/launchConfigTuning/launchConfigTuning.py create mode 100644 samples/launchConfigTuning/requirements.txt create mode 100644 samples/matrixMulSharedMem/README.md create mode 100644 samples/matrixMulSharedMem/matrixMulSharedMem.py create mode 100644 samples/matrixMulSharedMem/requirements.txt create mode 100644 samples/memoryResources/README.md create mode 100644 samples/memoryResources/memoryResources.py create mode 100644 samples/memoryResources/requirements.txt create mode 100644 samples/multiGPUGradientAverage/README.md create mode 100644 samples/multiGPUGradientAverage/multiGPUGradientAverage.py create mode 100644 samples/multiGPUGradientAverage/requirements.txt create mode 100644 samples/numpyVsCupy/README.md create mode 100644 samples/numpyVsCupy/numpyVsCupy.py create mode 100644 samples/numpyVsCupy/requirements.txt create mode 100644 samples/pageRank/README.md create mode 100644 samples/pageRank/pageRank.py create mode 100644 samples/pageRank/requirements.txt create mode 100644 samples/parallelHistogram/README.md create mode 100644 samples/parallelHistogram/parallelHistogram.py create mode 100644 samples/parallelHistogram/requirements.txt create mode 100644 samples/parallelReduction/README.md create mode 100644 samples/parallelReduction/parallelReduction.py create mode 100644 samples/parallelReduction/requirements.txt create mode 100644 samples/prefixSum/README.md create mode 100644 samples/prefixSum/prefixSum.py create mode 100644 samples/prefixSum/requirements.txt create mode 100644 samples/processCheckpoint/README.md create mode 100644 samples/processCheckpoint/processCheckpoint.py create mode 100644 samples/processCheckpoint/requirements.txt create mode 100644 samples/reduction/README.md create mode 100644 samples/reduction/reduction.py create mode 100644 samples/reduction/requirements.txt create mode 100644 samples/reductionMultiBlockCG/README.md create mode 100644 samples/reductionMultiBlockCG/reductionMultiBlockCG.py create mode 100644 samples/reductionMultiBlockCG/requirements.txt create mode 100644 samples/simpleP2P/README.md create mode 100644 samples/simpleP2P/requirements.txt create mode 100644 samples/simpleP2P/simpleP2P.py create mode 100644 samples/simplePrint/README.md create mode 100644 samples/simplePrint/requirements.txt create mode 100644 samples/simplePrint/simplePrint.py create mode 100644 samples/simpleZeroCopy/README.md create mode 100644 samples/simpleZeroCopy/requirements.txt create mode 100644 samples/simpleZeroCopy/simpleZeroCopy.py create mode 100644 samples/streamingCopyComputeOverlap/README.md create mode 100644 samples/streamingCopyComputeOverlap/requirements.txt create mode 100644 samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py create mode 100644 samples/systemInfo/README.md create mode 100644 samples/systemInfo/requirements.txt create mode 100644 samples/systemInfo/systemInfo.py create mode 100644 samples/tmaTensorMap/README.md create mode 100644 samples/tmaTensorMap/requirements.txt create mode 100644 samples/tmaTensorMap/tmaTensorMap.py create mode 100644 samples/vectorAdd/README.md create mode 100644 samples/vectorAdd/requirements.txt create mode 100755 samples/vectorAdd/vectorAdd.py create mode 100644 tests/samples/__init__.py create mode 100644 tests/samples/run_samples.py create mode 100644 tests/samples/test_args.json create mode 100644 tests/samples/test_samples.py diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index cb5dbc4c866..8846a70465d 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -381,6 +381,13 @@ jobs: CUDA_PATHFINDER_TEST_FIND_NVIDIA_BITCODE_LIB_STRICTNESS: all_must_work run: run-tests pathfinder + - name: Run samples tests + if: ${{ inputs.test-mode == 'standard' }} + env: + CUDA_VER: ${{ matrix.CUDA_VER }} + LOCAL_CTK: ${{ matrix.LOCAL_CTK }} + run: run-tests samples + # ── Nightly: install wheels + optional dep together ── - name: Install cuda-python wheels + PyTorch if: ${{ inputs.test-mode == 'nightly-pytorch' }} diff --git a/.spdx-ignore b/.spdx-ignore index 3e2cca9446d..084e3f5bd02 100644 --- a/.spdx-ignore +++ b/.spdx-ignore @@ -8,6 +8,10 @@ LICENSE requirements*.txt cuda_bindings/examples/* +# Samples are synced to NVIDIA/cuda-samples on release and carry the upstream +# verbose BSD-style copyright header instead of the SPDX identifiers. +samples/**/*.py + # Vendored cuda_core/cuda/core/_include/dlpack.h cuda_core/cuda/core/_include/aoti_shim.h diff --git a/ci/tools/run-tests b/ci/tools/run-tests index 1ca54ba8207..9271a19341a 100755 --- a/ci/tools/run-tests +++ b/ci/tools/run-tests @@ -13,8 +13,8 @@ if [[ ${#} -ne 1 ]]; then echo "Error: This script requires exactly 1 argument. You provided ${#}" exit 1 fi -if [[ "${1}" != "bindings" && "${1}" != "core" && "${1}" != "pathfinder" && "${1}" != nightly-* ]]; then - echo "Error: Invalid test module '${1}'. Must be 'bindings', 'core', 'pathfinder', or 'nightly-*'" +if [[ "${1}" != "bindings" && "${1}" != "core" && "${1}" != "pathfinder" && "${1}" != "samples" && "${1}" != nightly-* ]]; then + echo "Error: Invalid test module '${1}'. Must be 'bindings', 'core', 'pathfinder', 'samples', or 'nightly-*'" exit 1 fi @@ -56,6 +56,20 @@ elif [[ "${test_module}" == "bindings" ]]; then ${SANITIZER_CMD} pytest -rxXs -v --durations=0 --randomly-dont-reorganize tests/cython fi popd +elif [[ "${test_module}" == "samples" ]]; then + # Samples re-use whatever cuda-bindings + cuda-core packages are already + # installed by an earlier ``core`` invocation. Install the cupy backend (the + # only test-only dep most samples need) and run the pytest harness. + TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< "${CUDA_VER}")" + echo "Installing optional sample deps (cupy-cuda${TEST_CUDA_MAJOR}x, nvtx, pillow)" + pip install --upgrade pip + pip install \ + "cupy-cuda${TEST_CUDA_MAJOR}x" \ + nvtx \ + pillow \ + || echo "Warning: optional sample deps install failed; affected samples will be waived" + echo "Running sample tests" + pytest -rxXs -v --durations=0 tests/samples/ elif [[ "${test_module}" == "core" || "${test_module}" == nightly-* ]]; then # Shared setup for core and nightly modes. TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${CUDA_VER})" diff --git a/conftest.py b/conftest.py index 7a0c59065d5..2ce0aef9de5 100644 --- a/conftest.py +++ b/conftest.py @@ -41,6 +41,10 @@ def pytest_collection_modifyitems(config, items): # noqa: ARG001 if nodeid.startswith("tests/integration/") or "/tests/integration/" in nodeid: item.add_marker(pytest.mark.smoke) + # Sample tests (orchestrator under tests/samples/, sample sources under samples/) + if nodeid.startswith("tests/samples/") or "/tests/samples/" in nodeid: + item.add_marker(pytest.mark.samples) + # Cython tests (any tests/cython subtree) if ( "/tests/cython/" in nodeid diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index b53c44c0ef9..ce2a9541ce5 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -2804,6 +2804,612 @@ environments: - conda: ../cuda_bindings build: py314hd7f1909_0 - conda: ../cuda_pathfinder + samples: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-13.3.29-hffce074_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-13.3.35-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.33-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-13.3.29-hffce074_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.3.33-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.33-h69a702a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h1bf8424_901.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py314h28848ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h5875eb1_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.10.0-hd93470c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h3a69515_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.1-cuda130_mkl_h5535f43_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2026.0.0-hecca717_915.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.30.7.1-h1aa9b5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onednn-3.12-omp_h83de36e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/onemkl-license-2026.0.0-ha770c72_915.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.1-py314h9891dd4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.1-cuda130_mkl_py314_h5d99997_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.1-cuda129_mkl_h0d04637_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.10-hdeec2a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.1-cuda130py314h1cdc6f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: . + build: py314hd3a1e81_0 + - conda: ../cuda_bindings + build: py314hd3a1e81_0 + - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/f7/e1/e02fafc01c18f1868a2d2c030953f49e38d65f2d95884789a6c46ff308f1/nvtx-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.3.1-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-crt-tools-13.3.33-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cuobjdump-13.3.29-h2079400_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cupti-13.3.35-he38c790_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc-tools-13.3.33-h614329b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvdisasm-13.3.29-h40ab4d6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.3.33-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvtx-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.33-he9431aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.33-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.33-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.33-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h0327ddc_901.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fmt-12.1.0-h20c602a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.6-h90308e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmpy2-2.3.0-py314h887ad84_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h1134a53_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcublas-13.5.1.27-he38c790_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.3.2-hf71c8f5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.1-h96a7f82_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-hbae46ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.10.0-he3ecef4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-openmp_h1a8b088_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h38371b1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.2-h10b116e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.12.1-cuda130_generic_h4328193_200.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.52.1-h80f16a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.8-he40846f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.4.0-he6dc3fb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.2-h3faef18_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.30.7.1-h2b99535_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.0-py314he1698a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/onednn-3.12-omp_h605b386_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.1-py314hd7d8586_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.12.1-cuda130_generic_py314_h1da07bd_200.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.12.1-cuda129_generic_hda344be_200.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.10-had2c13b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sleef-3.9.0-h5bb93e2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.0.1-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.7.1-cuda130py314ha788bc0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: . + build: py314h3ff45e1_0 + - conda: ../cuda_bindings + build: py314h3ff45e1_0 + - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/e0/5b/ca0ba6fa769d08174b7a5b4775c279e2e26611cdd5e7833aa699187871c7/nvtx-0.2.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_h6d5d71d_901.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.6-h1f5b9c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-h932607e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.10-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - conda: . + build: py314hd7f1909_0 + - conda: ../cuda_bindings + build: py314hd7f1909_0 + - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/20/77/a2b64335bab7c75fe1c054cc4ebe2d3b3234cbdb04d2e1d6ca73551c54f5/nvtx-0.2.15-cp314-cp314-win_amd64.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -2827,6 +3433,7 @@ packages: - llvm-openmp >=9.0.1 license: BSD-3-Clause license_family: BSD + purls: [] size: 8244 timestamp: 1764092331208 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda @@ -2850,6 +3457,7 @@ packages: - llvm-openmp >=9.0.1 license: BSD-3-Clause license_family: BSD + purls: [] size: 8293 timestamp: 1764092286102 - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda @@ -2910,6 +3518,17 @@ packages: license_family: GPL size: 584660 timestamp: 1768327524772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + sha256: cf93ca0f1f107e95a35969a4622684e08fcb8cf37f8cf4a1e9e424828386c921 + md5: 8904e09bda369377b3dd07e2ac828c5d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 592377 + timestamp: 1781521980743 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda sha256: ea2233e2db9908c2e5f29d3ca420a546b4583253f4f70abb5494cdd676866d42 md5: 4a98cbc4ade694520227402ff8880630 @@ -2919,6 +3538,28 @@ packages: license_family: GPL size: 615729 timestamp: 1768327548407 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + sha256: 105e4c19cfa770affcb9a64b9d2451f406914cd09a67664009910869fa01a639 + md5: 5427b5dcb268bddf1a69c16d1cb77a47 + depends: + - libgcc >=14 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 621865 + timestamp: 1781522013595 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + sha256: b1d972a9b949a88babee681437535550b3ca5dbca6a23a40dffeb7900fec19fd + md5: 5a78a69eb3b50f24b379e9d2a93163ae + depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 3103347 + timestamp: 1780752473089 - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 md5: 346722a0be40f6edc53f12640d301338 @@ -2929,6 +3570,17 @@ packages: license_family: BSD size: 2706396 timestamp: 1718551242397 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda + sha256: a228f46f68fa3e2e50a09b5a4cefd1ee2c1ce868bfa2a288867b3d44b6e77427 + md5: a3c86229b531656c2bce99e8a6c6de4a + depends: + - libstdcxx >=14 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 4091040 + timestamp: 1780752489693 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda sha256: ac438ce5d3d3673a9188b535fc7cda413b479f0d52536aeeac1bd82faa656ea0 md5: cc744ac4efe5bcaa8cca51ff5b850df0 @@ -2939,6 +3591,18 @@ packages: license_family: BSD size: 3250813 timestamp: 1718551360260 +- conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + sha256: 3033fa8953f7f0c1bb5b89b5af77253badc14a89ba94d743dde3c9159e10fd5e + md5: 7a8ace8100a48355a34d87386012c57b + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2214571 + timestamp: 1780752497150 - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda sha256: 0524d0c0b61dacd0c22ac7a8067f977b1d52380210933b04141f5099c5b6fec7 md5: 3d7c14285d3eb3239a76ff79063f27a5 @@ -3103,6 +3767,18 @@ packages: license_family: GPL size: 3744895 timestamp: 1770267152681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + sha256: 0a7d405064f53b9d91d92515f1460f7906ee5e8523f3cd8973430e81219f4917 + md5: 8165352fdce2d2025bf884dc0ee85700 + depends: + - ld_impl_linux-64 2.45.1 default_hbd61a6d_102 + - sysroot_linux-64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 3661455 + timestamp: 1774197460085 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda sha256: e90ab42a5225dc1eaa6e4e7201cd7b8ed52dad6ec46814be7e5a4039433ae85c md5: df6e1dc38cbe5642350fa09d4a1d546b @@ -3114,6 +3790,18 @@ packages: license_family: GPL size: 4741684 timestamp: 1770267224406 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda + sha256: 7fd4ddde2f0150d015dfa9f2db5f428bd1570078f270e4bd4f116487a52de169 + md5: 56a04d796d7e3cdc9f8d2e1278e91bff + depends: + - ld_impl_linux-aarch64 2.45.1 default_h1979696_102 + - sysroot_linux-aarch64 + - zstd >=1.5.7,<1.6.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 4683754 + timestamp: 1774197535605 - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45.1-default_ha84baeb_101.conda sha256: 31211bd89e77203f731f31871ff13b5828fbd99f02ae2fc56ae15fcd568c4466 md5: 84d2e3fd656b05705b7cfe7a92a8c840 @@ -3227,6 +3915,24 @@ packages: purls: [] size: 147413 timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + sha256: 7f458e4a82514d7bebbfef23d92817794a16aaf1c748a15f04870d4fb49aeab2 + md5: b9696b2cf00dfeec138c70cee38ed192 + depends: + - __win + license: ISC + purls: [] + size: 129352 + timestamp: 1781709016515 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf + md5: a9965dd99f683c5f444428f896635716 + depends: + - __unix + license: ISC + purls: [] + size: 128866 + timestamp: 1781708962055 - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda sha256: ec791bb6f1ef504411f87b28946a7ae63ed1f3681cefc462cf1dfdaf0790b6a9 md5: 241ef6e3db47a143ac34c21bfba510f1 @@ -3264,6 +3970,7 @@ packages: - xorg-libxext >=1.3.6,<2.0a0 - xorg-libxrender >=0.9.12,<0.10.0a0 license: LGPL-2.1-only or MPL-1.1 + purls: [] size: 989514 timestamp: 1766415934926 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda @@ -3289,6 +3996,7 @@ packages: - xorg-libxext >=1.3.6,<2.0a0 - xorg-libxrender >=0.9.12,<0.10.0a0 license: LGPL-2.1-only or MPL-1.1 + purls: [] size: 927045 timestamp: 1766416003626 - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda @@ -3309,6 +4017,7 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LGPL-2.1-only or MPL-1.1 + purls: [] size: 1537783 timestamp: 1766416059188 - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda @@ -3333,6 +4042,8 @@ packages: - python_abi 3.14.* *_cp314 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 300271 timestamp: 1761203085220 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda @@ -3346,6 +4057,8 @@ packages: - python_abi 3.14.* *_cp314 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 318357 timestamp: 1761203973223 - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda @@ -3360,6 +4073,8 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping size: 294731 timestamp: 1761203441365 - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda @@ -3442,6 +4157,16 @@ packages: license_family: GPL size: 31705 timestamp: 1771378159534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + sha256: 1a53d0bd9d8197a7dc57f9b154e24d908ade29934e0a450ee6e40294d0a237f9 + md5: 3b482cadfc77f094c8b3016166292dfb + depends: + - gcc_impl_linux-64 >=15.2.0,<15.2.1.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 31857 + timestamp: 1778269225076 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/conda-gcc-specs-14.3.0-hadff5d6_18.conda sha256: 7b018e74d2f828e887faabc9d5c5bef6d432c3356dcac3e691ee6b24bc82ef52 md5: 184c1aba41c40e6bc59fa91b37cd7c3f @@ -3462,15 +4187,26 @@ packages: timestamp: 1771382417485 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda noarch: generic - sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c - md5: 3bb89e4f795e5414addaa531d6b1500a + sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c + md5: 3bb89e4f795e5414addaa531d6b1500a + depends: + - python >=3.14,<3.15.0a0 + - python_abi * *_cp314 + license: Python-2.0 + purls: [] + size: 50078 + timestamp: 1770674447292 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda + noarch: generic + sha256: 7a548856ef5307890a8cadfc196655117658f8c24589ce175caa4c1c2ded9d13 + md5: b28fe35fd43d5f425c0dccbe5b5039fd depends: - python >=3.14,<3.15.0a0 - python_abi * *_cp314 license: Python-2.0 purls: [] - size: 50078 - timestamp: 1770674447292 + size: 49333 + timestamp: 1781254618863 - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda sha256: b9006cbd28ed63a6461717cb9234e1d1f39441d9db0493f55ee0ca72f3577833 md5: 99cf98eea444365238fb6ee8f518ef19 @@ -3643,6 +4379,7 @@ packages: depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1472271 timestamp: 1779895496841 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda @@ -3661,6 +4398,7 @@ packages: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1481900 timestamp: 1779895522474 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda @@ -3884,6 +4622,7 @@ packages: depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 30512 timestamp: 1779905082733 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-crt-tools-12.9.86-h579c4fd_2.conda @@ -3902,6 +4641,7 @@ packages: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 30727 timestamp: 1779905123621 - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-crt-tools-12.9.86-h57928b3_2.conda @@ -4064,6 +4804,7 @@ packages: - cuda-cudart_linux-64 - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 405020 timestamp: 1779898430134 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-12.9.79-h3ae8b8a_0.conda @@ -4088,6 +4829,7 @@ packages: - cuda-cudart_linux-aarch64 - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 403650 timestamp: 1779898443931 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda @@ -4186,6 +4928,7 @@ packages: depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1126340 timestamp: 1779898412056 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-12.9.79-h3ae8b8a_0.conda @@ -4204,6 +4947,7 @@ packages: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1133087 timestamp: 1779898428591 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda @@ -4284,6 +5028,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 312247 timestamp: 1779911081668 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cuobjdump-13.3.29-h2079400_0.conda @@ -4295,6 +5040,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 318659 timestamp: 1779911096155 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-13.3.35-h676940d_0.conda @@ -4306,6 +5052,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1600030 timestamp: 1779895779561 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cupti-13.3.35-he38c790_0.conda @@ -4320,6 +5067,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 1448548 timestamp: 1779895823294 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-12.9.86-he91c749_2.conda @@ -4439,6 +5187,7 @@ packages: constrains: - gcc_impl_linux-64 >=6,<16.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 34635831 timestamp: 1779905180976 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc-tools-12.9.86-h614329b_2.conda @@ -4469,6 +5218,7 @@ packages: constrains: - gcc_impl_linux-aarch64 >=6,<16.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 30810865 timestamp: 1779905234807 - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvcc-tools-12.9.86-he0c23c2_2.conda @@ -4493,6 +5243,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 4704236 timestamp: 1779896392544 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvdisasm-13.3.29-h40ab4d6_0.conda @@ -4506,6 +5257,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 4673704 timestamp: 1779896419537 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.9.86-hecca717_1.conda @@ -4668,6 +5420,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 33852 timestamp: 1779896656406 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvtx-13.3.29-h8f3c8d4_0.conda @@ -4681,6 +5434,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 35014 timestamp: 1779896683393 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.33-h69a702a_0.conda @@ -4999,6 +5753,26 @@ packages: license_family: MIT size: 385283 timestamp: 1771604567478 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_1.conda + sha256: 645c77e7d3f3986d48fa5bb08d14a72d0f14e11ea276f28242052bb9b073d83b + md5: e8f7956463e9340710e9895f0d0418f3 + depends: + - cuda-cudart-dev_linux-64 + - cuda-nvrtc + - cuda-version >=13,<14.0a0 + - cupy-core 14.0.1 py314hed3c566_1 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: [] + size: 384966 + timestamp: 1779504073573 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_0.conda sha256: 10608ecb57bf7c2295a8ce5ed538305553290ec53fa960a91794559e42a204ba md5: f4200ad5b954b43fac5ae43415e82317 @@ -5018,6 +5792,26 @@ packages: license_family: MIT size: 385353 timestamp: 1771605185463 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_1.conda + sha256: e10e1284b4f7ba61bac287e0621ffe142914d78008ed96a480cdb727c11326e2 + md5: 6b68146846d55143a9304ad3ca0333ea + depends: + - cuda-cudart-dev_linux-aarch64 + - cuda-nvrtc + - cuda-version >=13,<14.0a0 + - cupy-core 14.0.1 py314h1d6db3a_1 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: [] + size: 384462 + timestamp: 1779504126757 - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_0.conda sha256: f048dbdee55577fad61221b87b0be44fc64de532138cf80b0e65fe0955d13b27 md5: 494ca91005c44e23bd74d6fd086228d2 @@ -5048,6 +5842,38 @@ packages: license_family: MIT size: 33970282 timestamp: 1771604499034 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_1.conda + sha256: eb9af273306d14002d887f41a1966a741b53baf859de853e14cd6cca285d92d5 + md5: 7586c72642ed8c79b84aa66219a4cfca + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-pathfinder >=1.3.3,<2.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - numpy >=2.0 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - optuna ~=3.0 + - libcublas >=13,<14.0a0 + - nccl >=2.30.4.1,<3.0a0 + - libcusparse >=12,<13.0a0 + - cutensor >=2.6.0.4,<3.0a0 + - cupy >=14.0.1,<14.1.0a0 + - scipy >=1.10,<1.17 + - libcurand >=10,<11.0a0 + - __cuda >=13.0 + - libcufft >=12,<13.0a0 + - libcusolver >=12,<13.0a0 + - cuda-version >=13,<14.0a0 + - cuda-nvrtc >=13,<14.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy?source=hash-mapping + size: 33860499 + timestamp: 1779504045871 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_0.conda sha256: 125c488f2ac15a216575449baf03a9e16644c3e7e6773fd9e53ba68893a20396 md5: 0bd337aec5a1d18ecf0bf16a2d0d3ce8 @@ -5079,6 +5905,39 @@ packages: license_family: MIT size: 39128286 timestamp: 1771605119782 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_1.conda + sha256: 50eeca5279bd44c7977e0babf0eaf4a78de8e448e34804d26f45277e93cda354 + md5: 9d5af704cc69aeb6e92547b0b68ccda4 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-pathfinder >=1.3.3,<2.0a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy >=1.23,<3 + - numpy >=2.0 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + constrains: + - libcusolver >=12,<13.0a0 + - libcusparse >=12,<13.0a0 + - __cuda >=13.0 + - nccl >=2.30.4.1,<3.0a0 + - cupy >=14.0.1,<14.1.0a0 + - cutensor >=2.6.0.4,<3.0a0 + - scipy >=1.10,<1.17 + - cuda-nvrtc >=13,<14.0a0 + - cuda-version >=13,<14.0a0 + - optuna ~=3.0 + - libcurand >=10,<11.0a0 + - libcublas >=13,<14.0a0 + - libcufft >=12,<13.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cupy?source=hash-mapping + size: 39191318 + timestamp: 1779504103703 - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda sha256: f700d10c2a794710a1656a6fdb8908fb04f3c7812ac4f17187777646ede1a3d9 md5: 866fd3d25b767bccb4adc8476f4035cd @@ -5131,6 +5990,7 @@ packages: - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 760229 timestamp: 1685695754230 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda @@ -5140,6 +6000,7 @@ packages: - libgcc-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 347363 timestamp: 1685696690003 - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda @@ -5151,6 +6012,7 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 618643 timestamp: 1685696352968 - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda @@ -5164,6 +6026,7 @@ packages: - libglib >=2.86.2,<3.0a0 - libexpat >=2.7.3,<3.0a0 license: AFL-2.1 OR GPL-2.0-or-later + purls: [] size: 447649 timestamp: 1764536047944 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda @@ -5176,6 +6039,7 @@ packages: - libzlib >=1.3.1,<2.0a0 - libexpat >=2.7.3,<3.0a0 license: AFL-2.1 OR GPL-2.0-or-later + purls: [] size: 480416 timestamp: 1764536098891 - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py314h42812f9_0.conda @@ -5373,6 +6237,71 @@ packages: license_family: GPL size: 12485347 timestamp: 1773008832077 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h1bf8424_901.conda + sha256: 2d56b0d90a1e581e296a41aa0a0443c85f918a94780e779a23005be9128627be + md5: 0c457f1b2384bb0aa984831a79021a66 + depends: + - __glibc >=2.17,<3.0.a0 + - alsa-lib >=1.2.16.1,<1.3.0a0 + - aom >=3.14.1,<3.15.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - harfbuzz >=14.2.1 + - lame >=3.100,<3.101.0a0 + - libass >=0.17.4,<0.17.5.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-batch-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-hetero-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-cpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-gpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-npu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-ir-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-onnx-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-paddle-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-pytorch-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.2.1,<2026.2.2.0a0 + - libopus >=1.6.1,<2.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.3,<3.0a0 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpl >=2.16.0,<2.17.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.7,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 13078770 + timestamp: 1782260267617 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h62efc85_914.conda sha256: a2816bcef9d7b072597192fcb15b851eaee1ef358c0a3890ab255070d41b64cb md5: e9f109db13b0fad0c1f2f92d9770c8c3 @@ -5431,6 +6360,66 @@ packages: license_family: GPL size: 12035194 timestamp: 1773008913159 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h0327ddc_901.conda + sha256: 12f1d33ba6975ae1f2f799111665bd3e527d5aefd29adec27bf731f4e59a9eeb + md5: 00e3601ba812380631f089f650625c61 + depends: + - alsa-lib >=1.2.16.1,<1.3.0a0 + - aom >=3.14.1,<3.15.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + - gmp >=6.3.0,<7.0a0 + - harfbuzz >=14.2.1 + - lame >=3.100,<3.101.0a0 + - libass >=0.17.4,<0.17.5.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.2.1,<2026.2.2.0a0 + - libopenvino-arm-cpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-batch-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-hetero-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-ir-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-onnx-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-paddle-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-pytorch-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.2.1,<2026.2.2.0a0 + - libopus >=1.6.1,<2.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.3,<3.0a0 + - libstdcxx >=14 + - libvorbis >=1.3.7,<1.4.0a0 + - libvpx >=1.15.2,<1.16.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.7,<4.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 12711897 + timestamp: 1782260316539 - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_hb2d76f6_914.conda sha256: fbe7916ed95bdc9650c9906865ab21cc04fb337548fdffec94f64a547ba3644d md5: 7cffff39ee349bddb81e1de24c780f34 @@ -5472,6 +6461,48 @@ packages: license_family: GPL size: 10417843 timestamp: 1773010275486 +- conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_h6d5d71d_901.conda + sha256: 0ceea53997c09df6cda1911b53661af9e3b051989bc3780d1657a76028132057 + md5: 407eb5885e6399f8495f6796ebd71134 + depends: + - aom >=3.14.1,<3.15.0a0 + - bzip2 >=1.0.8,<2.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + - harfbuzz >=14.2.1 + - lame >=3.100,<3.101.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libiconv >=1.18,<2.0a0 + - libjxl >=0.11,<1.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopus >=1.6.1,<2.0a0 + - librsvg >=2.62.3,<3.0a0 + - libvorbis >=1.3.7,<1.4.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - openh264 >=2.6.0,<2.6.1.0a0 + - openssl >=3.5.7,<4.0a0 + - sdl2 >=2.32.56,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.0.1,<4.0.2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - x264 >=1!164.3095,<1!165 + - x265 >=3.5,<3.6.0a0 + constrains: + - __cuda >=12.8 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 11020618 + timestamp: 1782262495007 - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f md5: f58064cec97b12a7136ebb8a6f8a129b @@ -5482,6 +6513,16 @@ packages: - pkg:pypi/filelock?source=compressed-mapping size: 25845 timestamp: 1773314012590 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda + sha256: feb5c13cc8f256212a979783a7645abd7e27925c51ee5431babbc0efc661cdfd + md5: 66f138d7a6dffb5c959cc4bf6dc2b797 + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock?source=compressed-mapping + size: 36989 + timestamp: 1781381078337 - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda sha256: d4e92ba7a7b4965341dc0fca57ec72d01d111b53c12d11396473115585a9ead6 md5: f7d7a4104082b39e3b3473fbd4a38229 @@ -5491,6 +6532,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 198107 timestamp: 1767681153946 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fmt-12.1.0-h20c602a_0.conda @@ -5501,6 +6543,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 197671 timestamp: 1767681179883 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 @@ -5508,6 +6551,7 @@ packages: md5: 0c96522c6bdaed4b1566d11387caaf45 license: BSD-3-Clause license_family: BSD + purls: [] size: 397370 timestamp: 1566932522327 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 @@ -5515,6 +6559,7 @@ packages: md5: 34893075a5c9e55cdafac56607368fc6 license: OFL-1.1 license_family: Other + purls: [] size: 96530 timestamp: 1620479909603 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 @@ -5522,6 +6567,7 @@ packages: md5: 4d59c254e01d9cde7957100457e2d5fb license: OFL-1.1 license_family: Other + purls: [] size: 700814 timestamp: 1620479612257 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda @@ -5529,6 +6575,7 @@ packages: md5: 49023d73832ef61042f6a237cb2687e7 license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 license_family: Other + purls: [] size: 1620504 timestamp: 1727511233259 - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda @@ -5546,6 +6593,22 @@ packages: license_family: MIT size: 270705 timestamp: 1771382710863 +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + sha256: 2e50bdcebdf70a865b81f2456bbc586386451ec601c60f2b6cd22b8c40a2d384 + md5: e0e050cfa9fa85fe39632ab11cb7f3e0 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 281880 + timestamp: 1780450077431 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c md5: 0fed1ff55f4938a65907f3ecf62609db @@ -5560,6 +6623,21 @@ packages: license_family: MIT size: 279044 timestamp: 1771382728182 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda + sha256: 2ccfd118269d363a5506161c4a0d96da46d2f01beecc74e0540a54b4737d0e45 + md5: f4d29a0cd77104a683607319a542ac7e + depends: + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 290522 + timestamp: 1780450108132 - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda sha256: ff2db9d305711854de430f946dc59bd40167940a1de38db29c5a78659f219d9c md5: a0b1b87e871011ca3b783bbf410bc39f @@ -5576,6 +6654,24 @@ packages: license_family: MIT size: 195332 timestamp: 1771382820659 +- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + sha256: 9217184c4a8e82101b0e512b059ae3ff67e3913133b9031edad89ab5341284e4 + md5: abd79bad98c99c1a116154d6de74ea89 + depends: + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 202630 + timestamp: 1780450217840 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 md5: fee5683a3f04bd15cbd8318b096a27ab @@ -5583,6 +6679,7 @@ packages: - fonts-conda-forge license: BSD-3-Clause license_family: BSD + purls: [] size: 3667 timestamp: 1566974674465 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda @@ -5595,6 +6692,7 @@ packages: - font-ttf-source-code-pro license: BSD-3-Clause license_family: BSD + purls: [] size: 4059 timestamp: 1762351264405 - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda @@ -5606,6 +6704,16 @@ packages: license: GPL-2.0-only OR FTL size: 174292 timestamp: 1772757205296 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 + depends: + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 + license: GPL-2.0-only OR FTL + purls: [] + size: 173839 + timestamp: 1774298173462 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda sha256: ecbe6e811574fba5194b29ac3a2badea5eaa060bd9fe7f5bd48a70d16ef38e5a md5: 9cb47d7bbb36646c44d7cf1cb8047887 @@ -5615,6 +6723,16 @@ packages: license: GPL-2.0-only OR FTL size: 173437 timestamp: 1772756019067 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda + sha256: 1112c56bc19cbce233b30d9d31ce8eb6fcc100c9baa5145315aaa1e3a25b5178 + md5: 5e8e88bfb3fbb0df0f9f8bb890721e07 + depends: + - libfreetype 2.14.3 h8af1aa0_1 + - libfreetype6 2.14.3 hdae7a39_1 + license: GPL-2.0-only OR FTL + purls: [] + size: 174060 + timestamp: 1780933507786 - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda sha256: 6dd4bb3862ea3d07015331059504cf3b6af1a11a6909e7a9b6e04a20e253da28 md5: c360b467564b875a9f5dc481b8726cee @@ -5624,6 +6742,17 @@ packages: license: GPL-2.0-only OR FTL size: 185633 timestamp: 1772756186241 +- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + sha256: a0e419e96146159f12344c870dca608d11bca36841f228092b986ffc2e1e0f02 + md5: e77293b32225b136a8be300f93d0e89f + depends: + - libfreetype 2.14.3 h57928b3_1 + - libfreetype6 2.14.3 hdbac1cb_1 + - zlib + license: GPL-2.0-only OR FTL + purls: [] + size: 185584 + timestamp: 1780934817461 - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d md5: f9f81ea472684d75b9dd8d0b328cf655 @@ -5631,6 +6760,7 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: LGPL-2.1-or-later + purls: [] size: 61244 timestamp: 1757438574066 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda @@ -5639,6 +6769,7 @@ packages: depends: - libgcc >=14 license: LGPL-2.1-or-later + purls: [] size: 62909 timestamp: 1757438620177 - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda @@ -5649,6 +6780,7 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LGPL-2.1-or-later + purls: [] size: 64394 timestamp: 1757438741305 - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.2.0-pyhd8ed1ab_0.conda @@ -5660,6 +6792,17 @@ packages: license_family: BSD size: 148757 timestamp: 1770387898414 +- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda + sha256: fe0156e6d658be3531aad2a99e42e8ad1ee23c69837d469c44c1b6010373913d + md5: 7d7e6c826ba0743fc491ebee0e7b899c + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fsspec?source=compressed-mapping + size: 149709 + timestamp: 1781615868173 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.3.0-h0dff253_18.conda sha256: 9b34b57b06b485e33a40d430f71ac88c8f381673592507cf7161c50ff0832772 md5: 52d6457abc42e320787ada5f9033fa99 @@ -5670,6 +6813,17 @@ packages: license_family: BSD size: 29506 timestamp: 1771378321585 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + sha256: 54a0d9ee655ba83b78b7a796f12224b26c24943d8970559ecc47ccd6c2b0fa72 + md5: 18ec2ee87e4f532afa459ce8ea9a6b02 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 15.2.0 he0086c7_19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29561 + timestamp: 1778269371353 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h6f77f03_18.conda sha256: d120a7616f8b2717fc2a9d0246b53f69ce3fb33e565d22dba44e3d6827ee4f12 md5: 094638a454410aa77586ffcc9a403aef @@ -5702,6 +6856,18 @@ packages: license_family: BSD size: 29408 timestamp: 1771378529822 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + sha256: 3d75b775f6ab3977b2b72b9940806603158d10d60ff3e66930a59b74c4305219 + md5: 6b596ff6f13f6e46365d2182c6ea1e53 + depends: + - gcc_impl_linux-aarch64 15.2.0 h3530432_19 + track_features: + - gcc_no_conda_specs + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29538 + timestamp: 1778269115054 - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_18.conda sha256: 349dd70890b3bb51d8f7a7976f53711f4606c076a659ee7fdc7c32e2ffa019a1 md5: 0f295318682c2fbefbe293399fae135f @@ -5728,6 +6894,23 @@ packages: license_family: GPL size: 76302378 timestamp: 1771378056505 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + sha256: a48400ec4b73369c1c59babe4ad35821b63a88bba0ec40a80cea5f8c53a26b83 + md5: e3be72048d3c4a78b8e27ec48ba06252 + depends: + - binutils_impl_linux-64 >=2.45 + - libgcc >=15.2.0 + - libgcc-devel_linux-64 15.2.0 hcc6f6b0_119 + - libgomp >=15.2.0 + - libsanitizer 15.2.0 h90f66d4_19 + - libstdcxx >=15.2.0 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 81180457 + timestamp: 1778269124617 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda sha256: a088cfd3ae6fa83815faa8703bc9d21cc915f17bd1b51aac9c16ddf678da21e4 md5: cf56b6d74f580b91fd527e10d9a2e324 @@ -5760,6 +6943,23 @@ packages: license_family: GPL size: 69149627 timestamp: 1771377858762 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + sha256: cd23829b5fb7f3ff5f44eab2da1a993e06bdf759b681a0a7a73bb5783755b6b3 + md5: 66dfb62e7a47e2b511f9c5ee0ff1abf3 + depends: + - binutils_impl_linux-aarch64 >=2.45 + - libgcc >=15.2.0 + - libgcc-devel_linux-aarch64 15.2.0 h55c397f_119 + - libgomp >=15.2.0 + - libsanitizer 15.2.0 he19c465_19 + - libstdcxx >=15.2.0 + - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_119 + - sysroot_linux-aarch64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 73237372 + timestamp: 1778268860495 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda sha256: 12919d985a6c6787872699c7a3c295dad07f4084f2d850e9c7fe592ee0a6806b md5: 761a75d8c098913bc1186b26588051e0 @@ -5806,6 +7006,22 @@ packages: license_family: LGPL size: 575109 timestamp: 1771530561157 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.6-h2b0a6b4_0.conda + sha256: c5594497f0646e9079705b3199dbb2d5b13c48173cf110000fa1c8818e2b3e0c + md5: 7892f39a39ed39591a89a28eba03e987 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 577414 + timestamp: 1774985848058 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda sha256: aa95b37da0750fb93c5eeef79073b9b0d50976fa0dc02ed0301ff7bbbfc7ff36 md5: c75ae103325db056719dd51d6525e1cd @@ -5820,6 +7036,21 @@ packages: license_family: LGPL size: 584221 timestamp: 1771532437279 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.6-h90308e0_0.conda + sha256: 53ac38045a8c0b6aa9cfaf784443a3744dc86ab4737c1479b44ae85c96926fe1 + md5: bdd860e72c5e10eb4ffa3d61f9b02ee0 + depends: + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 583708 + timestamp: 1774987740322 - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.5-h1f5b9c4_1.conda sha256: 82c725a67098c7c43dfc33ba292a48e68530135b94a8703f20566d90574acdfd md5: 4059b4975e2de5894286dbe6bd6728fb @@ -5837,6 +7068,24 @@ packages: license_family: LGPL size: 574950 timestamp: 1771530717329 +- conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.6-h1f5b9c4_0.conda + sha256: 3b8a4bdb183b3b9b70caa91498680add15fb70678ec2a21391e6860c5dfed3e7 + md5: e1ff1d17cb48f89d71f74b0c5eab3b47 + depends: + - libglib >=2.86.4,<3.0a0 + - libintl >=0.22.5,<1.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - liblzma >=5.8.2,<6.0a0 + - libpng >=1.6.56,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + license_family: LGPL + purls: [] + size: 576065 + timestamp: 1774986034812 - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda sha256: 88a5ad3571948bde22957d08ab01328b8a7eb04fdee66268b3125cc322dbde8b md5: ba5b655d827f263090ad2dc514810328 @@ -5849,6 +7098,19 @@ packages: license_family: BSD size: 1353008 timestamp: 1770195199411 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda + sha256: 3c9b6a90937a96ad27d160304cdbe5e9961db613aba2b84ff673429f0c61d48e + md5: d175cb2c14104728ada04883786a309d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1366082 + timestamp: 1777747028121 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda sha256: a1c0db6c226b9d80e74bdd49f604eece637489c8c71e6ae63ada8db9e2359944 md5: 3ead7f968b529f76f972621558ed2f68 @@ -5860,6 +7122,18 @@ packages: license_family: BSD size: 1348415 timestamp: 1770195275881 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda + sha256: bae4806f4076cf9f91089fbeae7c9357ce4348df3657c25b249ac4487beed230 + md5: c0045dffcc3660ecd1b9123df377796f + depends: + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1359428 + timestamp: 1777747105441 - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.2.0-h294ba9c_1.conda sha256: c46afa4a43b7709e07a69d0a2d70b10f59f22e96dbf9ec80e53a42cc6551111c md5: 4b5f576265df0a05d4e47e48c50bb4e6 @@ -5872,6 +7146,19 @@ packages: license_family: BSD size: 4929181 timestamp: 1770195251565 +- conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + sha256: d80276b89d8aeab6ff0d8d7d4b9af336b368fc0b8fa28ea8cde6f6f2aa07bacf + md5: 7d6fed8a6ebeeebd6362790e22e56bb3 + depends: + - spirv-tools >=2026,<2027.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5074630 + timestamp: 1777747167205 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -5879,6 +7166,7 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] size: 460055 timestamp: 1718980856608 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda @@ -5888,6 +7176,7 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 license: GPL-2.0-or-later OR LGPL-3.0-or-later + purls: [] size: 417323 timestamp: 1718980707330 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py314h28848ee_1.conda @@ -5903,6 +7192,8 @@ packages: - python_abi 3.14.* *_cp314 license: LGPL-3.0-or-later license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping size: 254716 timestamp: 1773245106880 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmpy2-2.3.0-py314h887ad84_1.conda @@ -5918,6 +7209,8 @@ packages: - python_abi 3.14.* *_cp314 license: LGPL-3.0-or-later license_family: LGPL + purls: + - pkg:pypi/gmpy2?source=hash-mapping size: 245553 timestamp: 1773245145237 - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda @@ -5931,6 +7224,18 @@ packages: license_family: LGPL size: 99596 timestamp: 1755102025473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + sha256: 885fa7d1d7e2ad9ed0a700ee0d81ceb49de278253082d517959b22d6336eecce + md5: cf09e9fc938518e91d0706572cadf17a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 100054 + timestamp: 1780454302233 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda sha256: c9b1781fe329e0b77c5addd741e58600f50bef39321cae75eba72f2f381374b7 md5: 4aa540e9541cc9d6581ab23ff2043f13 @@ -5941,6 +7246,17 @@ packages: license_family: LGPL size: 102400 timestamp: 1755102000043 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + sha256: 3e529c517a76a1f4497c51eeedeeb927d33f732dcdb48055a020a83eb3e4e95c + md5: 4db044857ab1d09b2e8f0013c65387c1 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 103119 + timestamp: 1780455096710 - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda sha256: 5f1714b07252f885a62521b625898326ade6ca25fbc20727cfe9a88f68a54bfd md5: b785694dd3ec77a011ccf0c24725382b @@ -5952,6 +7268,18 @@ packages: license_family: LGPL size: 96336 timestamp: 1755102441729 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + sha256: 88b6601f8edae59834b59b521e293ff3b58361dc1603240f5a8328c24e6936ad + md5: ff9a9bfe791f56b0227597a7651a6af0 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.0-or-later + license_family: LGPL + purls: [] + size: 97308 + timestamp: 1780454389458 - conda: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.3.2-py314h42812f9_0.conda sha256: fdeec5dbb5f964b1709f3d6f697137f0e68650e09ffa80b9b1bee2afb2373da4 md5: 511748f9debe034ff88eef99bc215fd3 @@ -6017,6 +7345,17 @@ packages: license_family: BSD size: 28723 timestamp: 1771378698305 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + sha256: b00817919d7b2d68e3299031c5332855576ae086ac80032aa0a78b7f6f12dae4 + md5: 327876a856b3a45001cfb9a855efa65f + depends: + - gcc 15.2.0 h0dff253_19 + - gxx_impl_linux-64 15.2.0 hda75c37_19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28945 + timestamp: 1778269389494 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-14.3.0-ha384071_18.conda sha256: 09fb56bcb1594d667e39b1ff4fced377f1b3f6c83f5b651d500db0b4865df68a md5: 3d5380505980f8859a796af4c1b49452 @@ -6037,6 +7376,17 @@ packages: license_family: BSD size: 28780 timestamp: 1771378557194 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + sha256: 23e75a54b9ff48563a3be38c1d17232cf3d95fcddc938852b33090aea6d22505 + md5: e528c6fa3071fcad03ba0e530217fbe9 + depends: + - gcc 15.2.0 h24a549f_19 + - gxx_impl_linux-aarch64 15.2.0 h03e2352_19 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 29003 + timestamp: 1778269132414 - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_18.conda sha256: e85f25cee7618096463f426ec4c6ddd7c93058ed71c94d894c17dcb3269d867e md5: 882c461155d96001e0611b70ab620e9b @@ -6071,6 +7421,19 @@ packages: license_family: GPL size: 15587873 timestamp: 1771378609722 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + sha256: 3f5288346b9fe233352443b3c2e31f1fde845e39d3e96475fc05ec2e782af158 + md5: 9d41f3899b512199af0a4bb939b83e21 + depends: + - gcc_impl_linux-64 15.2.0 he0086c7_19 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 16356816 + timestamp: 1778269332159 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-14.3.0-h0d4f5d4_18.conda sha256: 859a78ff16bef8d1d1d89d0604929c3c256ac0248b9a688e8defe9bbc027c886 md5: a12277d1ec675dbb993ad72dce735530 @@ -6095,6 +7458,19 @@ packages: license_family: GPL size: 15371317 timestamp: 1771378487467 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + sha256: afb0fc36b93539a8e43a8063c8d3e1b4bace38a5a0c3c9e1978c72792d633c62 + md5: 7214ae8a8aade7b48a2bfd8bbb4d9e79 + depends: + - gcc_impl_linux-aarch64 15.2.0 h3530432_19 + - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_119 + - sysroot_linux-aarch64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 14640001 + timestamp: 1778269082840 - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_18.conda sha256: 55a524b1910bf26952d08aeb89b0496d423110378e991b5ff6ef2c662b884760 md5: 88379befc88f4efb16733dae4b96dac4 @@ -6140,6 +7516,26 @@ packages: license_family: MIT size: 2615630 timestamp: 1773217509651 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-h6083320_0.conda + sha256: da9901aa1e20cbc2369fda212039b294dd02bce95f005539bab840b7310bf7d0 + md5: 21ee4640b7c2d94e584349fa12b29b9a + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.1,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2362258 + timestamp: 1780450503234 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.0-h1134a53_0.conda sha256: 49074457bdc624c0c0f39bb4b9b7689ec6334127ed7d5312484908f48e9a8e20 md5: 811bb5384d92870a3492fab4de4ff3f6 @@ -6158,6 +7554,25 @@ packages: license_family: MIT size: 2346492 timestamp: 1773222371375 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h1134a53_0.conda + sha256: 17a671aa62e1f0a8750514353e3d6e9aab80598908d9b107fc7f3cf7972176b6 + md5: 5f3ec279ab7cc391b7dff69dc08298fa + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.1,<3.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 2786349 + timestamp: 1780454506157 - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.0-h5a1b470_0.conda sha256: 27acd845926048481a831b7321674b3f92accde49869fb95438f0a35ea89419b md5: b3a4ff5d1e21d58090cd87060eb54c2d @@ -6177,6 +7592,26 @@ packages: license_family: MIT size: 1285640 timestamp: 1773217788574 +- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda + sha256: 55d6d483e089afe68bdbb38a003d7b76002e65341665b80f38e6ce4b494beef6 + md5: 0bcbb7f911590beec914555c6b82050d + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.14,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + purls: [] + size: 1304897 + timestamp: 1780450940279 - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba md5: 0a802cb9888dd14eeefc611f05c40b6e @@ -6267,6 +7702,18 @@ packages: license_family: MIT size: 13222158 timestamp: 1767970128854 +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + sha256: 1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4 + md5: 0097b24800cb696915c3dbd1f5335d3f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 14954024 + timestamp: 1773822508646 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 md5: 53abe63df7e10a6ba605dc5f9f961d36 @@ -6349,6 +7796,18 @@ packages: - pkg:pypi/iniconfig?source=hash-mapping size: 13387 timestamp: 1760831448842 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + sha256: bc231d69eb6663db0e09738fb916c5e5507147cf1ac60f364f964004e0b29bab + md5: 10909406c1b0e4b57f9f4f0eb0999af8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 1013714 + timestamp: 1774422680665 - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda sha256: edad668db79c6c4899d46e1cd4a331f5d008f9ed8f7d2e39e1dfe1a2d81acec0 md5: 26311c5112b5c713f472bdfbb5ec5aa3 @@ -6373,6 +7832,20 @@ packages: license_family: MIT size: 8783533 timestamp: 1773230300873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + sha256: 7cbd7fda22db70c64af64c9173434a4ede58e4f220bda52a044e469aa94c65cb + md5: aaf7c3db8c7c4533deb5449d3ba1c51f + depends: + - __glibc >=2.17,<3.0.a0 + - intel-gmmlib >=22.10.0,<23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libva >=2.23.0,<3.0a0 + license: MIT + license_family: MIT + purls: [] + size: 8782375 + timestamp: 1776080148587 - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda sha256: 9cdadaeef5abadca4113f92f5589db19f8b7df5e1b81cb0225f7024a3aedefa3 md5: b3a7d5842f857414d9ae831a799444dd @@ -6615,6 +8088,7 @@ packages: - sysroot_linux-64 ==2.28 license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later license_family: GPL + purls: [] size: 1278712 timestamp: 1765578681495 - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda @@ -6624,6 +8098,7 @@ packages: - sysroot_linux-aarch64 ==2.28 license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later license_family: GPL + purls: [] size: 1248134 timestamp: 1765578613607 - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda @@ -6696,6 +8171,7 @@ packages: - libgcc-ng >=12 license: LGPL-2.0-only license_family: LGPL + purls: [] size: 508258 timestamp: 1664996250081 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 @@ -6705,6 +8181,7 @@ packages: - libgcc-ng >=12 license: LGPL-2.0-only license_family: LGPL + purls: [] size: 604863 timestamp: 1664997611416 - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 @@ -6716,8 +8193,34 @@ packages: - vs2015_runtime >=14.29.30139 license: LGPL-2.0-only license_family: LGPL + purls: [] size: 570583 timestamp: 1664996824680 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + sha256: 112b5b9462572d970f4abd2912f76a25ee7db158b1e7260163d91dd8a630db84 + md5: 8b3ce45e929cd8e8e5f4d18586b56d8b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 251971 + timestamp: 1780211695895 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + sha256: ed213207bbf11663181941e0931caa9ce748f0544688e8e0fbcf330bca279389 + md5: 9183fda4be2b4ee5760cdb8e540439c8 + depends: + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + purls: [] + size: 296564 + timestamp: 1780211834883 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 md5: 12bd9a3f089ee6c9266a37dab82afabd @@ -6786,6 +8289,7 @@ packages: - libstdcxx >=14 license: Apache-2.0 license_family: Apache + purls: [] size: 261513 timestamp: 1773113328888 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda @@ -6796,6 +8300,7 @@ packages: - libstdcxx >=14 license: Apache-2.0 license_family: Apache + purls: [] size: 240444 timestamp: 1773114901155 - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda @@ -6807,6 +8312,7 @@ packages: - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: Apache + purls: [] size: 172395 timestamp: 1773113455582 - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda @@ -6820,6 +8326,18 @@ packages: license_family: MIT size: 858387 timestamp: 1772045965844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + sha256: d87cfc5eaa08eefff97d891ecb49faa958fcfc32a425767796269c4100d4e516 + md5: f3c3bc77c96af553f761af0e78bc8d9d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 875773 + timestamp: 1780142086148 - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239 md5: 6f7b4302263347698fd24565fbf11310 @@ -6834,6 +8352,21 @@ packages: license_family: Apache size: 1384817 timestamp: 1770863194876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + sha256: 32933de2d4fa6e6ffd949052815b49cb65a0649ad70007155c533ab97ea8cefd + md5: c4393db381bffa0a83a8d9e47b238106 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - abseil-cpp =20260526.0 + - libabseil-static =20260526.0=cxx17* + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1437712 + timestamp: 1780524559298 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260107.1-cxx17_h6983b43_0.conda sha256: 37675140819e10235a8ff342cb09f688f843ac390b64856d8e230700bbd7d5aa md5: 2a19160c13e688710dd200812fc9a6d3 @@ -6847,6 +8380,20 @@ packages: license_family: Apache size: 1401836 timestamp: 1770863223557 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + sha256: 51f53ae6266889f0972a10c2773465da5554fdf55ac15b9dea3e7f77520022d9 + md5: d8637f7cc7143fe4ad2eceac8e8cf033 + depends: + - libgcc >=14 + - libstdcxx >=14 + constrains: + - abseil-cpp =20260526.0 + - libabseil-static =20260526.0=cxx17* + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1457025 + timestamp: 1780524543286 - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda sha256: 035eb8b54e03e72e42ef707420f9979c7427776ea99e0f1e3c969f92eb573f19 md5: d3be7b2870bf7aff45b12ea53165babd @@ -6862,6 +8409,7 @@ packages: - fonts-conda-ecosystem - harfbuzz >=11.0.1 license: ISC + purls: [] size: 152179 timestamp: 1749328931930 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda @@ -6878,6 +8426,7 @@ packages: - libfreetype6 >=2.13.3 - libzlib >=1.3.1,<2.0a0 license: ISC + purls: [] size: 171287 timestamp: 1749328949722 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda @@ -6933,6 +8482,25 @@ packages: purls: [] size: 18621 timestamp: 1774503034895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h5875eb1_mkl.conda + build_number: 8 + sha256: e30f7fa2a2fb6985f9ac6604575cb318b9ae44e263f6cacc282daee9dbd6127d + md5: 8ae84a87356b604a62f1aee136ef8efb + depends: + - mkl >=2026.0.0,<2027.0a0 + constrains: + - blas 2.308 mkl + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - liblapack 3.11.0 8*_mkl + track_features: + - blas_mkl + - blas_mkl_2 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 19257 + timestamp: 1779859078137 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda build_number: 5 sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 @@ -6968,6 +8536,24 @@ packages: purls: [] size: 18682 timestamp: 1774503047392 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + build_number: 8 + sha256: c897399c943168c646f659952f73a9154f9122d7e9b151649dbe075dfdcd484b + md5: 8b44dad125760faa2b3925f5a6e3112d + depends: + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 + constrains: + - libcblas 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas + - mkl <2027 + - blas 2.308 openblas + - liblapacke 3.11.0 8*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18843 + timestamp: 1779859042591 - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda build_number: 5 sha256: f0cb7b2697461a306341f7ff32d5b361bb84f3e94478464c1e27ee01fc8f276b @@ -6999,6 +8585,22 @@ packages: purls: [] size: 68082 timestamp: 1774503684284 +- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + build_number: 8 + sha256: 43a87b59e6d4c68d80b2e4de487b1b54d66fe1f9a06636909b5a5ab9eae27269 + md5: 4a0ce24b1a946ff77ae9eaa7ef015a33 + depends: + - mkl >=2026.0.0,<2027.0a0 + constrains: + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 68103 + timestamp: 1779859688049 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e md5: 72c8fd1af66bd67bf580645b426513ed @@ -7007,6 +8609,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 79965 timestamp: 1764017188531 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda @@ -7016,6 +8619,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 80030 timestamp: 1764017273715 - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda @@ -7027,6 +8631,7 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: [] size: 82042 timestamp: 1764017799966 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda @@ -7038,6 +8643,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 34632 timestamp: 1764017199083 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda @@ -7048,6 +8654,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 33166 timestamp: 1764017282936 - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda @@ -7060,6 +8667,7 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: [] size: 34449 timestamp: 1764017851337 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda @@ -7071,6 +8679,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 298378 timestamp: 1764017210931 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda @@ -7081,6 +8690,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 309304 timestamp: 1764017292044 - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda @@ -7093,6 +8703,7 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: [] size: 252903 timestamp: 1764017901735 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda @@ -7117,6 +8728,17 @@ packages: purls: [] size: 124432 timestamp: 1774333989027 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + sha256: cc8c9fc6ddf0fbd3d1275b558ae9abad6cda23bced268732e2da21a87bb358cd + md5: f9f17eab7f3df1c6fd4b1a548a2f683a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 124335 + timestamp: 1775488792584 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda sha256: 154eefd8f94010d89ba76a057949b9b1f75c7379bd0d19d4657c952bedcf5904 md5: 10fe36ec0a9f7b1caae0331c9ba50f61 @@ -7137,6 +8759,16 @@ packages: purls: [] size: 109458 timestamp: 1774335293336 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + sha256: 14b6654d942be7a68496d4e52d6aa4e217cf82005a42c20d1880eb473e34eb3a + md5: 1503ce9f8a3df149a33ccd7c300ec1d2 + depends: + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 109192 + timestamp: 1775490102029 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda build_number: 5 sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 @@ -7180,8 +8812,25 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 18622 - timestamp: 1774503050205 + size: 18622 + timestamp: 1774503050205 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_hfef963f_mkl.conda + build_number: 8 + sha256: a3ea22126a74321ddf754a0efaf998486ffb8b9ec69fc735b3f0eacb6ffc8a4e + md5: 2101410a3915785b2c1595d1ae94e32c + depends: + - libblas 3.11.0 8_h5875eb1_mkl + constrains: + - blas 2.308 mkl + - liblapacke 3.11.0 8*_mkl + - liblapack 3.11.0 8*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18902 + timestamp: 1779859085492 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda build_number: 5 sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 @@ -7211,6 +8860,21 @@ packages: purls: [] size: 18689 timestamp: 1774503058069 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + build_number: 8 + sha256: 3ba039f0705022939d90e36c1ed2fcbafd7f5bb77563e3702202ae796b32f4d2 + md5: 76242b7ad6e43809afa8671dd609b4ed + depends: + - libblas 3.11.0 8_haddc8a3_openblas + constrains: + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + - blas 2.308 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18817 + timestamp: 1779859049133 - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda build_number: 5 sha256: 49dc59d8e58360920314b8d276dd80da7866a1484a9abae4ee2760bc68f3e68d @@ -7240,6 +8904,21 @@ packages: purls: [] size: 68221 timestamp: 1774503722413 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + build_number: 8 + sha256: 2a5b6555b481df4603e44cba49a6ef727584fd2f3c5235dd4bcb3028fffbdfb5 + md5: 09f1d8e4d2675d34ad2acb115211d10c + depends: + - libblas 3.11.0 8_h8455456_mkl + constrains: + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 68443 + timestamp: 1779859701498 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda sha256: 39a1183f64d4ebff942117f7be9c0883b772ddf5796dee18bdda1d52949a9627 md5: 7bd32031313d7dca6c8250429b94bd03 @@ -7250,6 +8929,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 382200769 timestamp: 1779912294439 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcublas-13.5.1.27-he38c790_0.conda @@ -7265,6 +8945,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 491684476 timestamp: 1779912373471 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.20.0.48-ha4b6413_0.conda @@ -7283,6 +8964,23 @@ packages: license: LicenseRef-cuDNN-Software-License-Agreement size: 332092133 timestamp: 1773180273500 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda + sha256: 8fdcd511eef3167db18afca483e0c668f458fbf77c1c3a2acdb3ea787e6663bc + md5: 942361a0d125cd276b2e7b69660e4c67 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=13,<14.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 447957779 + timestamp: 1781299475496 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.20.0.48-h0bf6004_0.conda sha256: a3993991464f6ffe81c354e6d4e4edfeef4b9cb7c12cd7e13bc08d91c1826b09 md5: 9f5f39cc3a13eaa80d7727973fda0a43 @@ -7300,6 +8998,24 @@ packages: license: LicenseRef-cuDNN-Software-License-Agreement size: 407901008 timestamp: 1773180233415 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda + sha256: 3c3322771cc71928526cbae349154678f9da8043ee5bccfcb02cfa3b738aefe9 + md5: 4b232bc6c7529d335ce6c338f56af648 + depends: + - __glibc >=2.28,<3.0.a0 + - arm-variant * sbsa + - cuda-nvrtc + - cuda-version >=13,<14.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libcudnn-jit <0a + license: LicenseRef-cuDNN-Software-License-Agreement + purls: [] + size: 544123581 + timestamp: 1781299494730 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.7.1.4-h7bcfba5_1.conda sha256: 7d3afc0e0e5bff4d9adcf2f3454ac97a8812b5802ca04498e1f5d8db9d3fb24c md5: 6111650cfce61896d705230a878cc1a8 @@ -7317,6 +9033,24 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 62715991 timestamp: 1770671835770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda + sha256: 05c4f349df99636cae828489ce0f842bbbc7da0006ce4cf37b6d3d7433d06aef + md5: b993006a7f8c1f2d0e4adf1c9ac17201 + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-version >=13,<14.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudss-commlayer-nccl 0.8.0.10 h84ff803_0 + - libcudss-commlayer-mpi 0.8.0.10 h6647138_0 + - libcudss0 <0.0.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 78215168 + timestamp: 1780355336257 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda sha256: b51195f067cb90871b0673dfe8564015513c4f81509018313efcb0a14d3f2391 md5: c53276b4f3f8eeaa91813b8a0196eb91 @@ -7335,6 +9069,25 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 62631375 timestamp: 1770671821410 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda + sha256: f23ac30a306476480b94e9a5634b695e235426d78c426c1d0f69895ac3bfcee7 + md5: a595ebcdfd12786a1e9e1ad1a7d47537 + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - arm-variant * sbsa + - cuda-version >=13,<14.0a0 + - libcublas + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcudss0 <0.0.0a0 + - libcudss-commlayer-nccl 0.8.0.10 h5eac28b_0 + - libcudss-commlayer-mpi 0.8.0.10 h40415f0_0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 78088194 + timestamp: 1780355374368 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda sha256: bd69d4b63be28c36e0fa962256666672e3f2eff5dfc06bdd545acef278f83754 md5: b347b9844eb16238c7f7b62cd2bd1e68 @@ -7344,6 +9097,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 150951336 timestamp: 1779897536120 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda @@ -7357,6 +9111,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 151379070 timestamp: 1779897582547 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.14.1.1-hbc026e6_1.conda @@ -7422,6 +9177,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 43805393 timestamp: 1779897559895 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda @@ -7436,6 +9192,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 44131451 timestamp: 1779897594729 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda @@ -7450,6 +9207,7 @@ packages: - libnvjitlink >=13.3.33,<14.0a0 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 181482480 timestamp: 1779918401910 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda @@ -7467,6 +9225,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 198192690 timestamp: 1779918383247 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda @@ -7479,6 +9238,7 @@ packages: - libnvjitlink >=13.3.33,<14.0a0 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 145249472 timestamp: 1779913723266 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda @@ -7493,6 +9253,7 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] size: 161785577 timestamp: 1779913792758 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda @@ -7503,6 +9264,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 73490 timestamp: 1761979956660 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda @@ -7512,6 +9274,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 71117 timestamp: 1761979776756 - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda @@ -7523,8 +9286,34 @@ packages: - vc14_runtime >=14.44.35208 license: MIT license_family: MIT + purls: [] size: 156818 timestamp: 1761979842440 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda + sha256: d15432f07f654583978712e034d308b103a8b4650f0fdec172b5031a8af2b6c9 + md5: b26a64dfb24fef32d3330e37ce5e4f44 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: [] + size: 311420 + timestamp: 1777838991858 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.3.2-hf71c8f5_4.conda + sha256: 4e41c61b67d6f077db7364bc2911c4d81e6c8080b86605e9d0adb97a5ed654b6 + md5: 530f83c19ee601cb9cda5b305ddf02fd + depends: + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: [] + size: 316167 + timestamp: 1777838999692 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 md5: 9314bc5a1fe7d1044dc9dfd3ef400535 @@ -7536,6 +9325,18 @@ packages: license_family: MIT size: 310785 timestamp: 1757212153962 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + sha256: 7d3187c11b7ae66c5595a8afd5a7ce352a490527fdf6614cab129bc7f2c16ba3 + md5: d8d16b9b32a3c5df7e5b3350e2cbe058 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpciaccess >=0.19,<0.20.0a0 + license: MIT + license_family: MIT + purls: [] + size: 311505 + timestamp: 1778975798004 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda sha256: 4e6cdb5dd37db794b88bec714b4418a0435b04d14e9f7afc8cc32f2a3ced12f2 md5: 2079727b538f6dd16f3fa579d4c3c53f @@ -7546,6 +9347,17 @@ packages: license_family: MIT size: 344548 timestamp: 1757212128414 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + sha256: 2a941ffcd6b09380344c2cb5b198d2743ce4fc30ec9a5c8c83e53368d8015aef + md5: 987d35ad350bb552a30f3d314f6c7655 + depends: + - libgcc >=14 + - libpciaccess >=0.19,<0.20.0a0 + license: MIT + license_family: MIT + purls: [] + size: 345283 + timestamp: 1778975814771 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -7580,6 +9392,16 @@ packages: license: LicenseRef-libglvnd size: 44840 timestamp: 1731330973553 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + sha256: 9a25ea93e8272785405a21d30f84e620befb1d545f6dfaae18f06103b5df0443 + md5: 75e9f795be506c96dd43cb09c7c8d557 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 46500 + timestamp: 1779728188901 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda sha256: 8962abf38a58c235611ce356b9899f6caeb0352a8bce631b0bcc59352fda455e md5: cf105bce884e4ef8c8ccdca9fe6695e7 @@ -7588,6 +9410,15 @@ packages: license: LicenseRef-libglvnd size: 53551 timestamp: 1731330990477 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + sha256: b987d3874edfcd9c7ddca86c003cb04ae51160a72c173a24cd46ab9eeb8886ab + md5: ec017f25e5d01ef9dd81e95ff73ff051 + depends: + - libglvnd 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + purls: [] + size: 54600 + timestamp: 1779728234591 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 @@ -7613,6 +9444,19 @@ packages: purls: [] size: 76624 timestamp: 1774719175983 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 + md5: b24d3c612f71e7aa74158d92106318b2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 77856 + timestamp: 1781203599810 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 md5: 57f3b3da02a50a1be2a6fe847515417d @@ -7636,6 +9480,18 @@ packages: purls: [] size: 76523 timestamp: 1774719129371 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + sha256: 20a5726bc8705d91437c9e6ef83b30da64a1719b869656d20a1ee818333ea5ac + md5: fac3b65a605cd253037fdf3daf2de8d9 + depends: + - libgcc >=14 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 77649 + timestamp: 1781203572523 - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d md5: 1c1ced969021592407f16ada4573586d @@ -7663,6 +9519,20 @@ packages: purls: [] size: 70609 timestamp: 1774719377850 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + sha256: 1a54d874addda73b6f7164d5f3905821277a1831bcc05edd74b3085391688571 + md5: ccc490c81ffe14181861beac0e8f3169 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - expat 2.8.1.* + license: MIT + license_family: MIT + purls: [] + size: 71631 + timestamp: 1781203724164 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -7707,6 +9577,7 @@ packages: - libstdcxx >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 424563 timestamp: 1764526740626 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda @@ -7719,6 +9590,7 @@ packages: - libstdcxx >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 397272 timestamp: 1764526699497 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda @@ -7729,6 +9601,15 @@ packages: license: GPL-2.0-only OR FTL size: 8035 timestamp: 1772757210108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8049 + timestamp: 1774298163029 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda sha256: 23cdb94528bb4328b6f7550906dee5080952354445d8bd96241fa7d059c4af95 md5: 93bce8dee6a0a4906331db294ec250fe @@ -7737,6 +9618,15 @@ packages: license: GPL-2.0-only OR FTL size: 8108 timestamp: 1772756012710 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + sha256: db75d0fc080992dc67db8e24d7bb2a2f2a0b25bfce8870fa45a82a4b5f6111a2 + md5: a13e600f9d18488b1fd1257344dbfdaa + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8381 + timestamp: 1780933505754 - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda sha256: 427c3072b311e65bd3eae3fcb78f6847b15b2dbb173a8546424de56550b2abfb md5: 153d52fd0e4ba2a5bd5bb4f4afa41417 @@ -7745,6 +9635,15 @@ packages: license: GPL-2.0-only OR FTL size: 8404 timestamp: 1772756167212 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + sha256: 035d0c67bf9f7a16f4a1764f420c120f1a995d071bb265fcc66ef688ef709d7b + md5: e45b52fb9a81c9e2708465a706e05952 + depends: + - libfreetype6 >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 8711 + timestamp: 1780934891782 - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda sha256: aba65b94bdbed52de17ec3d0c6f2ebac2ef77071ad22d6900d1614d0dd702a0c md5: 8eaba3d1a4d7525c6814e861614457fd @@ -7758,6 +9657,20 @@ packages: license: GPL-2.0-only OR FTL size: 386316 timestamp: 1772757193822 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 384575 + timestamp: 1774298162622 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda sha256: a2e9efb033f7519bbc0a54558d7c9bb96252adc22c6e09df2daee7615265fbb1 md5: 69d1cdfdabb66464cbde17890e8be3b9 @@ -7770,6 +9683,19 @@ packages: license: GPL-2.0-only OR FTL size: 423372 timestamp: 1772756012086 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + sha256: 34fe8276befd6c42956c4acd969caeddbdc7ea8e6ed054b8388709b6c3e94ba4 + md5: 426cc33f8745ce11a73baf73db3954a7 + depends: + - libgcc >=14 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 424236 + timestamp: 1780933505195 - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda sha256: 1e80e01e5662bd3a0c0e094fbeaec449dbb2288949ca55ca80345e7812904e67 md5: c21a474a38982cdb56b3454cf4f78389 @@ -7784,6 +9710,21 @@ packages: license: GPL-2.0-only OR FTL size: 340155 timestamp: 1772756166648 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + sha256: 0bbd19c9f7c4d0232b31892e6a4d1f82b8d19d1b84d89725f1f491b336447758 + md5: 4e4d54f9f98383d977ba56ef39ebf46d + depends: + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - freetype >=2.14.3 + license: GPL-2.0-only OR FTL + purls: [] + size: 340411 + timestamp: 1780934813224 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 md5: 0aa00f03f9e39fb9876085dee11a85d4 @@ -7798,6 +9739,20 @@ packages: purls: [] size: 1041788 timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041084 + timestamp: 1778269013026 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 md5: 552567ea2b61e3a3035759b2fdb3f9a6 @@ -7811,6 +9766,19 @@ packages: purls: [] size: 622900 timestamp: 1771378128706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + sha256: 4592b096e553f67799ae70d4b6167eeda3ec74587d68c7aecbf4e7b1df136681 + md5: f35b3f52d0a2ec4ffe3c89ba135cdb9a + depends: + - _openmp_mutex >=4.5 + constrains: + - libgomp 15.2.0 h8acb6b2_19 + - libgcc-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 622462 + timestamp: 1778268755949 - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda sha256: da2c96563c76b8c601746f03e03ac75d2b4640fa2ee017cb23d6c9fc31f1b2c6 md5: b085746891cca3bd2704a450a7b4b5ce @@ -7843,6 +9811,16 @@ packages: license_family: GPL size: 3085932 timestamp: 1771378098166 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + sha256: 38a557eba305468ac1f90ac85e50d8defd76141cb0b8a43b2fc1aca71dd5d5f2 + md5: 683fcb168e1df9a21fa80d5aa2d9330b + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 3095909 + timestamp: 1778268932148 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-14.3.0-h25ba3ff_118.conda sha256: 058fab0156cb13897f7e4a2fc9d63c922d3de09b6429390365f91b62f1dddb0e md5: 3733752e5a7a0737c8c4f1897f2074f9 @@ -7861,6 +9839,16 @@ packages: license_family: GPL size: 2364690 timestamp: 1771378032404 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + sha256: fe600a63a39281e6994e27fe79360cd6bd8e576c3ce1af32ce8673b011f46c21 + md5: 18ad0f0b94071d91fa962a1bf3983a78 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2353893 + timestamp: 1778268665954 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_118.conda sha256: e43ffa48a88a7d77a0dc0d3ccfa3acc55702e9d964e8564e86927f5a389a6c51 md5: 1e020780767f809769807a442f5d6f6a @@ -7879,6 +9867,16 @@ packages: license_family: GPL size: 27526 timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d + depends: + - libgcc 15.2.0 he0feb66_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27694 + timestamp: 1778269016987 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f md5: 4feebd0fbf61075a1a9c2e9b3936c257 @@ -7888,6 +9886,16 @@ packages: license_family: GPL size: 27568 timestamp: 1771378136019 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + sha256: 1137f93f477f56199ded24117430045a0c02cbe8b10031beac3b9ad2138539d3 + md5: 770cf892e5530f43e63cadc673e85653 + depends: + - libgcc 15.2.0 h8acb6b2_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27738 + timestamp: 1778268759211 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee md5: 9063115da5bc35fdc3e1002e69b9ef6e @@ -7912,6 +9920,18 @@ packages: purls: [] size: 27587 timestamp: 1771378169244 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + sha256: e5ad94be72634233510b33ba792a3339921bd468f0b8bc6961ea05eded251d9b + md5: c7a5b5decf969ead5ecada83654164cf + depends: + - libgfortran5 15.2.0 h1b7bec0_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27728 + timestamp: 1778268784621 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 md5: 646855f357199a12f02a87382d429b75 @@ -7937,6 +9957,18 @@ packages: purls: [] size: 1486341 timestamp: 1771378148102 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + sha256: af8e9bdcaa77f133a8ee4c1ef57ef564d9c45aa262abf9f5ef9b50eb99d96407 + md5: 779dbb494de6d3d6477cab52eb34285a + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1487244 + timestamp: 1778268767295 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d md5: 928b8be80851f5d8ffb016f9c81dae7a @@ -7947,6 +9979,17 @@ packages: license: LicenseRef-libglvnd size: 134712 timestamp: 1731330998354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + sha256: ec353b3076ed8e357ed961d0e9ff6997491cade0e603de5bd18a2e301ac78ebd + md5: f25206d7322c0e9648e8b83694d143ab + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + - libglx 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 133469 + timestamp: 1779728207669 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda sha256: 3e954380f16255d1c8ae5da3bd3044d3576a0e1ac2e3c3ff2fe8f2f1ad2e467a md5: 0d00176464ebb25af83d40736a2cd3bb @@ -7956,6 +9999,16 @@ packages: license: LicenseRef-libglvnd size: 145442 timestamp: 1731331005019 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + sha256: 05c75a2034bdbca29bab467d02ad770ed5e524e4f0670432258f2d8487c95348 + md5: 6e893c36f31502dd195d3d58f455fdbd + depends: + - libglvnd 1.7.0 hd24410f_3 + - libglx 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + purls: [] + size: 148112 + timestamp: 1779728248678 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda sha256: e281356c0975751f478c53e14f3efea6cd1e23c3069406d10708d6c409525260 md5: 53e7cbb2beb03d69a478631e23e340e9 @@ -7966,6 +10019,17 @@ packages: license: LicenseRef-libglvnd size: 113911 timestamp: 1731331012126 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + sha256: 41d7d864ad1f199bdb06ff6cc3931455c8af62f1d2071a08c6fa08affbcb678f + md5: 63e43d278ee5084813fe3c2edf4834ce + depends: + - __glibc >=2.17,<3.0.a0 + - libgl 1.7.0 ha4b6fd6_3 + - libglx-devel 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 115664 + timestamp: 1779728218325 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_2.conda sha256: ec5c3125b38295bad8acc80f793b8ee217ccb194338d73858be278db50ea82f1 md5: 5d8323dff6a93596fb6f985cf6e8521a @@ -7975,6 +10039,16 @@ packages: license: LicenseRef-libglvnd size: 113925 timestamp: 1731331014056 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + sha256: b7483884e5e8df362f113d7d7694f0a37ecf6409f1acaaa889f312688917c067 + md5: 3a0adce33b3b8a52c76389db1edfec1b + depends: + - libgl 1.7.0 hd24410f_3 + - libglx-devel 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + purls: [] + size: 116084 + timestamp: 1779728257534 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce md5: bb26456332b07f68bf3b7622ed71c0da @@ -7990,6 +10064,22 @@ packages: license: LGPL-2.1-or-later size: 4398701 timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + sha256: 33eb5d5310a5c2c0a4707a0afa644801c2e08c8f70c45e1f62f354116dfe0970 + md5: 17d484ab9c8179c6a6e5b7dbb5065afc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libffi >=3.5.2,<3.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4754097 + timestamp: 1778508800134 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec md5: 4ac4372fc4d7f20630a91314cdac8afd @@ -8004,6 +10094,21 @@ packages: license: LGPL-2.1-or-later size: 4512186 timestamp: 1771863220969 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.1-h96a7f82_2.conda + sha256: 050285afdb7bd98b1b8fb052af9da31fafde586a49d3b56dd33d5338b2d0e411 + md5: 16d72f76bf6fead4a29efb2fede0a06b + depends: + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.5.2,<3.6.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4946648 + timestamp: 1778508920982 - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda sha256: f035fb25f8858f201e0055c719ef91022e9465cd51fe803304b781863286fb10 md5: 0329a7e92c8c8b61fcaaf7ad44642a96 @@ -8021,6 +10126,24 @@ packages: license: LGPL-2.1-or-later size: 4095369 timestamp: 1771863229701 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + sha256: f61277e224e9889c221bb2eac0f57d5aeeb82fc45d3dc326957d251c97444f7c + md5: 5fb838786a8317ebb38056bbe236d3ff + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libintl >=0.22.5,<1.0a0 + - libffi >=3.5.2,<3.6.0a0 + constrains: + - glib >2.66 + license: LGPL-2.1-or-later + purls: [] + size: 4522891 + timestamp: 1778508851933 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 md5: 434ca7e50e40f4918ab701e3facd59a0 @@ -8029,12 +10152,28 @@ packages: license: LicenseRef-libglvnd size: 132463 timestamp: 1731330968309 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + sha256: e019ebe4e3f5cdf23e2f5e58ddf7ade27988c53820115b17b98f218ebcc87748 + md5: eb83f3f8cecc3e9bff9e250817fc69b6 + depends: + - __glibc >=2.17,<3.0.a0 + license: LicenseRef-libglvnd + purls: [] + size: 133586 + timestamp: 1779728183422 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda sha256: 57ec3898a923d4bcc064669e90e8abfc4d1d945a13639470ba5f3748bd3090da md5: 9e115653741810778c9a915a2f8439e7 license: LicenseRef-libglvnd size: 152135 timestamp: 1731330986070 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + sha256: ca124e53765a2b123e0ca6ce809c7caf188bb26e5fe125b69099378276d5e66f + md5: a2ad848c0aab2e326c6af08ea20502f4 + license: LicenseRef-libglvnd + purls: [] + size: 146645 + timestamp: 1779728228274 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 md5: c8013e438185f33b13814c5c488acd5c @@ -8045,6 +10184,17 @@ packages: license: LicenseRef-libglvnd size: 75504 timestamp: 1731330988898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + sha256: 2f74713c9ca408ea84e88a30a9028153e7b553e8bb42e06139eac9a753c27da9 + md5: ec3c4350aa0261bf7f87b8ca15c8e80e + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 76586 + timestamp: 1779728199059 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda sha256: 6591af640cb05a399fab47646025f8b1e1a06a0d4bbb4d2e320d6629b47a1c61 md5: 1d4269e233636148696a67e2d30dad2a @@ -8054,6 +10204,16 @@ packages: license: LicenseRef-libglvnd size: 77736 timestamp: 1731330998960 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + sha256: 2698b415b9f7b692cd64e34db623e1a6e54ed54e78b0b4e5d4ea6762791e9118 + md5: 338faf34b78d053841098c0528699e34 + depends: + - libglvnd 1.7.0 hd24410f_3 + - xorg-libx11 >=1.8.13,<2.0a0 + license: LicenseRef-libglvnd + purls: [] + size: 76704 + timestamp: 1779728242753 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda sha256: 0a930e0148ab6e61089bbcdba25a2e17ee383e7de82e7af10cc5c12c82c580f3 md5: 27ac5ae872a21375d980bd4a6f99edf3 @@ -8065,6 +10225,18 @@ packages: license: LicenseRef-libglvnd size: 26388 timestamp: 1731331003255 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + sha256: a17ae2d4cb2de04a20882ae14ec3cc1958e868a4dec81e3d7eca30115ee50e94 + md5: 16b6330783ce0d1ae8d22782173b32c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libglx 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + purls: [] + size: 27363 + timestamp: 1779728211402 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_2.conda sha256: 4bc28ecc38f30ca1ac66a8fb6c5703f4d888381ec46d3938b7c3383210061ec5 md5: 1f9ddbb175a63401662d1c6222cef6ff @@ -8075,6 +10247,17 @@ packages: license: LicenseRef-libglvnd size: 26362 timestamp: 1731331008489 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + sha256: b30433c4f56bec0a7d9d288e0a456ed280183e32f3f4880ada2189fc12804a52 + md5: 3da9719866b95bddcad86c8aec6a8ba2 + depends: + - libglx 1.7.0 hd24410f_3 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + purls: [] + size: 27651 + timestamp: 1779728252006 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 md5: 239c5e9546c38a1e884d69effcf4c882 @@ -8085,6 +10268,16 @@ packages: purls: [] size: 603262 timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603817 + timestamp: 1778268942614 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 md5: 4faa39bf919939602e594253bd673958 @@ -8093,6 +10286,14 @@ packages: purls: [] size: 588060 timestamp: 1771378040807 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + sha256: 2370ef0ffcbae5bede3c4bf136add4abc257245eb91f724c99bb4a43116c5a83 + md5: c5e8a379c4a2ec2aea4ba22758c001d9 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 587387 + timestamp: 1778268674393 - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda sha256: 94981bc2e42374c737750895c6fdcfc43b7126c4fc788cad0ecc7281745931da md5: 939fb173e2a4d4e980ef689e99b35223 @@ -8117,6 +10318,20 @@ packages: license_family: BSD size: 2449916 timestamp: 1765103845133 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + sha256: 5041d295813dfb84652557839825880aae296222ab725972285c5abe3b6e4288 + md5: c197985b58bc813d26b42881f0021c82 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2436378 + timestamp: 1770953868164 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.2-default_ha470c98_1000.conda sha256: e87cf64d87c7706403507df7329f5b597c3b487f4c72ef53ef899e38983ea70e md5: c8b05c85ae962a993d9b7d6c9d10571e @@ -8129,6 +10344,19 @@ packages: license_family: BSD size: 2467105 timestamp: 1765103804193 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + sha256: 88888d99e81c93e7331f2eb0fec08b3c4a47a1bfa1c88b3e641f6568569b6261 + md5: 974183f6420938051e2f3208922d057f + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2453519 + timestamp: 1770953713701 - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda sha256: 8cdf11333a81085468d9aa536ebb155abd74adc293576f6013fc0c85a7a90da3 md5: 3b576f6860f838f950c570f4433b086e @@ -8144,6 +10372,21 @@ packages: purls: [] size: 2411241 timestamp: 1765104337762 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + sha256: 2ee12e37223dfcd0acd050c80a91150c482b6e2899198521e1800dce66662467 + md5: 6a01c986e30292c715038d2788aa1385 + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libxml2 + - libxml2-16 >=2.14.6 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 2396128 + timestamp: 1770954127918 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda sha256: 2bdd1cdd677b119abc5e83069bec2e28fe6bfb21ebaea3cd07acee67f38ea274 md5: c2a0c1d0120520e979685034e0b79859 @@ -8154,6 +10397,17 @@ packages: license: Apache-2.0 OR BSD-3-Clause size: 1448617 timestamp: 1758894401402 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + sha256: 8b70955d5e9a49d08945d4f8e2eab855b2efa5fce9cb9bc5e75d86764e6f2f38 + md5: 3a9428b74c403c71048104d38437b48c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 1435782 + timestamp: 1776989559668 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.3.0-h81d0cf9_1.conda sha256: a6a441692b27606f8ef64ee9e6a0c72c615c2e25b01c282ee080ee8f97861943 md5: d5b93534e24e7c15792b3f336c52af07 @@ -8163,6 +10417,16 @@ packages: license: Apache-2.0 OR BSD-3-Clause size: 1180000 timestamp: 1758894754411 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda + sha256: cff38f9a1df7bc3e5ac7856bc2e5c879151b54c07b55722ec0da1af49d869721 + md5: 61b4e7ef4624c692a3ebd07100795303 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 945401 + timestamp: 1776989517303 - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.3.0-ha71e874_1.conda sha256: c722a04f065656b988a46dee87303ff0bf037179c50e2e76704b693def7f9a96 md5: f4649d4b6bf40d616eda57d6255d2333 @@ -8173,6 +10437,17 @@ packages: license: Apache-2.0 OR BSD-3-Clause size: 536186 timestamp: 1758894243956 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda + sha256: 4b45bf59ee46d3c746272c27651da9ce709fda4eee8536c7424acea60d0e2ad0 + md5: aeca1cb6665f19e560c1fbd20b5bcf34 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 OR BSD-3-Clause + purls: [] + size: 562583 + timestamp: 1776989522919 - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f md5: 915f5995e94f60e9a4826e0b0920ee88 @@ -8180,6 +10455,7 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: LGPL-2.1-only + purls: [] size: 790176 timestamp: 1754908768807 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda @@ -8188,6 +10464,7 @@ packages: depends: - libgcc >=14 license: LGPL-2.1-only + purls: [] size: 791226 timestamp: 1754910975665 - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda @@ -8207,6 +10484,7 @@ packages: depends: - libiconv >=1.17,<2.0a0 license: LGPL-2.1-or-later + purls: [] size: 95568 timestamp: 1723629479451 - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda @@ -8220,6 +10498,18 @@ packages: license: IJG AND BSD-3-Clause AND Zlib size: 633710 timestamp: 1762094827865 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda + sha256: 10056646c28115b174de81a44e23e3a0a3b95b5347d2e6c45cc6d49d35294256 + md5: 6178c6f2fb254558238ef4e6c56fb782 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 633831 + timestamp: 1775962768273 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 md5: 5109d7f837a3dfdf5c60f60e311b041f @@ -8230,6 +10520,17 @@ packages: license: IJG AND BSD-3-Clause AND Zlib size: 691818 timestamp: 1762094728337 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda + sha256: e97ec2af5f09f8f6ea8ecd550055c95ae80fae22015fcfadaa94eafe025c9ccc + md5: a85ba48648f6868016f2741fd9170250 + depends: + - libgcc >=14 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 693143 + timestamp: 1775962625956 - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 md5: 56a686f92ac0273c0f6af58858a3f013 @@ -8242,6 +10543,34 @@ packages: license: IJG AND BSD-3-Clause AND Zlib size: 841783 timestamp: 1762094814336 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda + sha256: 698d57b5b90120270eaa401298319fcb25ea186ae95b340c2f4813ed9171083d + md5: 25a127bad5470852b30b239f030ec95b + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 842806 + timestamp: 1775962811457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda + sha256: 0c8a78c6a42a6e4c6de3a5e82d692f60400d43f4cc80591745f28b37daad9c70 + md5: 850f48943d6b4589800a303f0de6a816 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1846962 + timestamp: 1777065125966 - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda sha256: 0c2399cef02953b719afe6591223fb11d287d5a108ef8bb9a02dd509a0f738d7 md5: 1df8c1b1d6665642107883685db6cf37 @@ -8269,6 +10598,35 @@ packages: license_family: BSD size: 1489440 timestamp: 1770801995062 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-hbae46ee_1.conda + sha256: 237bbfa18c4f245a24000c12924d61a9e54f7e6f689f405c0dc8e188a40de890 + md5: 532faebf82c7d2c10539518347cff460 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libhwy >=1.4.0,<1.5.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1489188 + timestamp: 1777065125935 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-h932607e_1.conda + sha256: 4715e22c602526c85da09f73865676add67e0995a944b821fbff84547a9db533 + md5: 327bce3eb1ef1875c7145e915d25bcd3 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libhwy >=1.4.0,<1.5.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1194926 + timestamp: 1777065171989 - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-hf3f85d1_0.conda sha256: 525c5382eb32a43e7baf45b452079bf23daf8f8bf19fee7c8dafa8c731ada8bd md5: 869e71fcf2135212c51a96f7f7dbd00d @@ -8328,6 +10686,23 @@ packages: purls: [] size: 18624 timestamp: 1774503065378 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h5e43f62_mkl.conda + build_number: 8 + sha256: 0cb26d433dfa15a392eaeeb8a96ac468f4d007d7e7e37ef7bf46856aaf9a9785 + md5: 370e81464714060008e60ee53825bb3e + depends: + - libblas 3.11.0 8_h5875eb1_mkl + constrains: + - blas 2.308 mkl + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + track_features: + - blas_mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18921 + timestamp: 1779859092867 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda build_number: 5 sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 @@ -8357,6 +10732,21 @@ packages: purls: [] size: 18702 timestamp: 1774503068721 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + build_number: 8 + sha256: d269a684afa0b2fdb44d6b60167f854f30410cdb5ee49a7275c026f6b10c8d05 + md5: 3af3f2aa755abc5e91351114ae214f55 + depends: + - libblas 3.11.0 8_haddc8a3_openblas + constrains: + - libcblas 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + - blas 2.308 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18828 + timestamp: 1779859055749 - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda build_number: 5 sha256: a2d33f5cc2b8a9042f2af6981c6733ab1a661463823eaa56595a9c58c0ab77e1 @@ -8386,6 +10776,21 @@ packages: purls: [] size: 80571 timestamp: 1774503757128 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + build_number: 8 + sha256: 44999ed04bc0a56de44ee0ac8bd5b3702efd411a8b29491c0e3d3deb8619c94e + md5: d584799b920ecae9b75a2b70743a3de7 + depends: + - libblas 3.11.0 8_h8455456_mkl + constrains: + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 81027 + timestamp: 1779859714698 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -8398,6 +10803,18 @@ packages: purls: [] size: 113207 timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 113478 + timestamp: 1775825492909 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 md5: 96944e3c92386a12755b94619bae0b35 @@ -8409,6 +10826,17 @@ packages: purls: [] size: 125916 timestamp: 1768754941722 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda + sha256: d61962b9cd54c3554361550203c64d5b65b71e3058a285b66e4b04b9769f0a5c + md5: 76298a9e6d71ee6e832a8d0d7373b261 + depends: + - libgcc >=14 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 126102 + timestamp: 1775828008518 - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 @@ -8422,6 +10850,38 @@ packages: purls: [] size: 106169 timestamp: 1768752763559 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 + md5: 8f83619ab1588b98dd99c90b0bfc5c6d + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - xz 5.8.3.* + license: 0BSD + purls: [] + size: 106486 + timestamp: 1775825663227 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.10.0-hd93470c_0.conda + sha256: 07607cffe1f53a5e405e29c897bfcad800f3c71b2a57ed7502a0ef82a60edc78 + md5: d9e0e4dbf5aff16fb804e6a656fc73bc + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - cuda-cudart + - cuda-version >=13,<14.0a0 + - libblas >=3.9.0,<4.0a0 + - libcublas + - libcusparse + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 272468878 + timestamp: 1773078724253 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-hd93470c_6.conda sha256: 5ea4675cb4a900795a5eb33519307cf985fd3787eb0cf33142e52ecc8eb8a7d4 md5: 886e83a08e0ad01d7fe868972bc729f3 @@ -8440,6 +10900,26 @@ packages: license_family: BSD size: 387811432 timestamp: 1767135866822 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.10.0-he3ecef4_0.conda + sha256: 72b40c75a7bc547b856954f12ba32cd815b26ace064564dc2569e44967cf87fc + md5: 1392ce38ffe86b9612c27cdfef98404d + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - arm-variant * sbsa + - cuda-cudart + - cuda-version >=13,<14.0a0 + - libblas >=3.9.0,<4.0a0 + - libcublas + - libcusparse + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 324720276 + timestamp: 1773081195270 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda sha256: 1511c96dcab0968a344d16a5bbb6791aeefc344e2ef4740a1137cfb62f95ebc6 md5: c6eec8ae18b32f1e444353dd526fb040 @@ -8683,6 +11163,7 @@ packages: - __glibc >=2.17,<3.0.a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 218500 timestamp: 1745825989535 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda @@ -8692,6 +11173,7 @@ packages: - libgcc >=13 license: BSD-3-Clause license_family: BSD + purls: [] size: 220653 timestamp: 1745826021156 - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda @@ -8706,6 +11188,7 @@ packages: - ucrt >=10.0.20348.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 35040 timestamp: 1745826086628 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda @@ -8782,6 +11265,25 @@ packages: purls: [] size: 5122134 timestamp: 1774471612323 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-openmp_h1a8b088_0.conda + sha256: 723180af43679bcccd39ccea91a2c390834601a2ee338522c6b1d47b45d9db8d + md5: d413a7a3af9493de3be90a778e33a9f8 + depends: + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=22.1.4 + constrains: + - openblas >=0.3.33,<0.3.34.0a0 + track_features: + - openblas_threading_openmp + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5136501 + timestamp: 1776993280434 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda sha256: a396a2d1aa267f21c98717ac097138b32e41e4c40ae501729bded3801476eeb5 md5: 9f0596e995efe372c470ff45c93131cb @@ -8795,6 +11297,20 @@ packages: license_family: APACHE size: 6582302 timestamp: 1772727204779 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + sha256: 7941fb9ba8c3a5a0a2401dc4120e8fcb561b96d928c43374eb93f545019a2858 + md5: ea41753f926f73966629d81fdf20ec6f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 6823841 + timestamp: 1782219077259 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda sha256: 6f8558cc4ee4d490db88640e71d3f79fa7552701d91c09ad6f1371dadb9bd3f1 md5: c8ff442d02723939711a726d9ff71eac @@ -8807,6 +11323,19 @@ packages: license_family: APACHE size: 5742222 timestamp: 1772721263739 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + sha256: b1b0553cfa613bffa8bed04b3a880d651cc08ffe565e07362c3071597069c4d4 + md5: e18fa81e8db0a20a8d5385902c12ce7c + depends: + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 5984918 + timestamp: 1782213524008 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda sha256: 8fff4375f324bdf8a3fe20c489710b692340007b7af2da1d14f6832990c24891 md5: ef26404d824453138bf0a12a8bb033df @@ -8820,6 +11349,20 @@ packages: license_family: APACHE size: 10237615 timestamp: 1772721303162 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + sha256: 72d90363b68266a9dc704008032e1f9acb91e080212e89dc189ea8135b199781 + md5: 2641ed1135e1316f5dd6f9512bcd6845 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 10313623 + timestamp: 1782213543505 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda sha256: 286de85805dc69ce0bd25367ae2a20c8096ddef35eb2483474eb246dacd5387e md5: ee41df976413676f794af2785b291b0c @@ -8833,6 +11376,20 @@ packages: license_family: APACHE size: 114431 timestamp: 1772727230331 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + sha256: 3ac14d36fa890840ae8474b8a9f0a094b8542fd8fbc409faf3d465c68f20aff0 + md5: 5698a64698e14e8a2e9e16f8f0de0e2e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 114628 + timestamp: 1782219097820 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.0.0-h3d5001d_1.conda sha256: da7926f66318e539c9f20c2f5f3719a5ba663c6b9d5471e5223d290450219748 md5: 5e984d6405a8f8529d7429f28a7f285e @@ -8845,6 +11402,19 @@ packages: license_family: APACHE size: 111064 timestamp: 1772721336786 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + sha256: 523247ab847e3e71ae213311491d5cc0bbb26f2c39ad4c71df9179c1b469e39f + md5: 55060a39fb1c4f7b4c6f3c514879790b + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 111073 + timestamp: 1782213572597 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda sha256: 9988ed6339a5eb044ae8d079e2b22f5a310c41e49a0cf716057f30b21ef9cec2 md5: ca025fa5c42ba94453636a2ae333de6b @@ -8858,6 +11428,20 @@ packages: license_family: APACHE size: 249056 timestamp: 1772727247597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + sha256: 499a472fc7b598ad3753b8f2afe60eb5a277d48eca9362e8aca094b2862587a7 + md5: 2ce088ef09292930d4cb3262ce7e144d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 250912 + timestamp: 1782219111223 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.0.0-h3d5001d_1.conda sha256: 20f1958e160c64f3d207f1dbdb6960cc5642070a472bebffc0d587b2f6429033 md5: 573b3f5ec3963e0153501a2676660ee4 @@ -8870,19 +11454,46 @@ packages: license_family: APACHE size: 236010 timestamp: 1772721351244 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + sha256: 803cf60b354ba780fffe509d013e2603bee30e2a3496cbb772105cdde60f99b5 + md5: ea0cea8d43d94d3118533f2f89e71cd4 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 238031 + timestamp: 1782213582645 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda sha256: c7db498aeda5b0f36b347f4211b93b66ba108faaf54157a08bae8fa3c3af5f81 md5: 07a23e96db38f63d9763f666b2db66aa depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.0.0 hb56ce9e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + size: 211582 + timestamp: 1772727264950 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + sha256: bec24379598a4405de171ad151945e79743c6bd049aceabf190b753c3f7a11da + md5: 02e71250f7ca786c4b183d0a39ef63ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE - size: 211582 - timestamp: 1772727264950 + purls: [] + size: 215488 + timestamp: 1782219123433 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.0.0-he07c6df_1.conda sha256: 3778ea3887c9a9300761e3f39ce86976746a35aa1392a4b76e4e4d3ce9e095b4 md5: 74bd299545a1fe23439bf6e071ed9710 @@ -8895,6 +11506,19 @@ packages: license_family: APACHE size: 202574 timestamp: 1772721365749 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + sha256: 5d216b218170b78e5513d6cef1b76aeebb4b517579a8d98af06a2cf4b2de7050 + md5: ba98371ee8a8122294c44381b4a128d9 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 207050 + timestamp: 1782213592772 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda sha256: 01a28c0bd1f205b3800e7759e30bc8e8a75836e0d5a73a745b4da42837bbb174 md5: b43b96578573ddbcc8d084ae6e44c964 @@ -8909,6 +11533,21 @@ packages: license_family: APACHE size: 13173323 timestamp: 1772727282718 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: eecc040a7838752a2dff9b4435a4c59bbc67b83e0c880457935b968206cb20b5 + md5: 7288f979a74cfe3fd4b32d8a0dc7baa4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 13637410 + timestamp: 1782219135415 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda sha256: 720b87e1d5f1a10c577e040d4bf425072a978e925c6dfab8b1551bc848007c94 md5: 26e8e92c90d1a22af6eac8e9507d9b8f @@ -8924,6 +11563,22 @@ packages: license_family: APACHE size: 11402462 timestamp: 1772727323957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: a47442ce578b022e19a306f963536a108cc79385f4e09d57a14a849b6a864604 + md5: c0a258b12f0c18c476b8344dbd6db8d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - ocl-icd >=2.3.4,<3.0a0 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 12367381 + timestamp: 1782219178219 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda sha256: df7eb2b23a1af38f2cd2281353309f2e2a04da1374ecedc7c6745c2a67ba617c md5: 01ba8b179ac45b2b37fe2d4225dddcc7 @@ -8939,6 +11594,22 @@ packages: license_family: APACHE size: 1994640 timestamp: 1772727360780 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: 45a91feb68ccce90ad0fa86520572233ca20be56deae0c920f86133d020ad1e8 + md5: c214b149e108e92672e0ee097ebe16f7 + depends: + - __glibc >=2.17,<3.0.a0 + - level-zero >=1.29.0,<2.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2023.0.0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2630818 + timestamp: 1782219217519 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda sha256: 8e7356b0b80b3f180615e264694d6811d388b210155d419553ff64e42f78ffa0 md5: aa002c4d343b01cdcc458c95cd071d1b @@ -8952,6 +11623,20 @@ packages: license_family: APACHE size: 192778 timestamp: 1772727380069 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + sha256: ebeba9a3ac9505ee69b556865b7d1b9fbbad01ca1ebe6a4249ff62c3dc677b47 + md5: 2d946aebcf06e9ba438880987050e975 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 201061 + timestamp: 1782219232657 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.0.0-he07c6df_1.conda sha256: 5d191b9d29fb2bbaca95bcd7325fbc3329c1049eccda4b84cfd79c64d4b6dc83 md5: 0946447f9717222c95c24f958d73dba9 @@ -8964,6 +11649,19 @@ packages: license_family: APACHE size: 185648 timestamp: 1772721380070 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + sha256: 20fe9837f7ef18faca2f6fa0c722fcfd3cf363444b2d0835c7e3a1c8a6a4bbff + md5: 6141a1a2540c990df35ee4c35d6ee4d1 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 196276 + timestamp: 1782213602819 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda sha256: 35a68214201e807bd9a31f94e618cb6a5385198e89eef46dde6c122cff77da58 md5: 218084544c2e7e78e4b8877ec37b8cdb @@ -8979,6 +11677,22 @@ packages: license_family: APACHE size: 1860687 timestamp: 1772727397981 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + sha256: 7b105c0102356352d6d9518a112ff6343dab6b8f32c837809117cd26cbf006df + md5: 3bd3599825189418ea14b2c9da3a6d87 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1944558 + timestamp: 1782219246849 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.0.0-h558496d_1.conda sha256: 9496ef9b24c3dcf3dda58a11360095fdd427d828d33705a1d9b90a4f1a5783c3 md5: 55e11d3e2f930299df66be96928e432d @@ -8993,6 +11707,21 @@ packages: license_family: APACHE size: 1665115 timestamp: 1772721394860 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + sha256: f4f0ffdc53e266cd66e019525fdcabb5544bd89b043b12cf73d37e7128dd32ec + md5: 284180cfb8d20ce6218531fdff158315 + depends: + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1770837 + timestamp: 1782213614201 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda sha256: cb37b717480207a66443a93d4342cf88210a74c0820fc0edd70e4fc791a64779 md5: 74915e5e271ef76a89f711eff5959a75 @@ -9008,6 +11737,22 @@ packages: license_family: APACHE size: 684224 timestamp: 1772727417276 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + sha256: af45c03d41ebe0b48c28b68be31ee919cb801ac5077164808a66db515ad6a316 + md5: 91e198085bff9d8fa02d4d947f026ba8 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 690240 + timestamp: 1782219261154 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.0.0-h558496d_1.conda sha256: 9e04b6c6b370e46bee7306afc9bc76e725042e981102f4c7b6b697b061c7324a md5: d26f5d445e0545ce674b11f496dba1a0 @@ -9022,6 +11767,21 @@ packages: license_family: APACHE size: 631754 timestamp: 1772721411589 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + sha256: 5ab86f5cad02ff69d87776ddf9bad2c45c84f38579a8cf16464c03436d4c2362 + md5: b45b927c4d1b1128badee6e44146fd62 + depends: + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 645700 + timestamp: 1782213626352 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda sha256: 086469e5cd8bfde48975fe8641a7d6924e3da00d75dd06c99e03a78df03a0568 md5: 559ef86008749861a53025f669004f18 @@ -9034,6 +11794,19 @@ packages: license_family: APACHE size: 1185558 timestamp: 1772727435039 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + sha256: e6353874a36143ffb7db7ec2c3767fd5e3434a8eeff41a569bc46e68259f668f + md5: 152d6694f1d05b53319b8376cdd811e4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1226625 + timestamp: 1782219274006 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.0.0-hfae3067_1.conda sha256: e62d016274d9aeae8033a37cd742162637ca37cd10a5d436934c2709c58240f2 md5: 0fd361e9e722e741146d818284feca74 @@ -9045,6 +11818,18 @@ packages: license_family: APACHE size: 1091266 timestamp: 1772721428223 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + sha256: 6a45d6ec341451dacbb7fa379de9a4d13e613fba6d15f7597c5e8dd529c73382 + md5: a82793a12b99b1d04ce77ebe0fd62e51 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1129309 + timestamp: 1782213636874 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda sha256: 3a9a404bc9fd39e7395d49f4bd8facb58a01a31aeceabe8723a9d4f8eb5cc381 md5: fb20f4234bc0e29af1baa13d35e36785 @@ -9061,6 +11846,23 @@ packages: license_family: APACHE size: 1257870 timestamp: 1772727453738 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + sha256: cffe112815b8eb57528fdfdf8b39f6a0915884291147dab5bc2066d2bf123031 + md5: 89d2455ec2f065786856b0cd2ac1c0c6 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1284650 + timestamp: 1782219287644 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.0.0-h2cb6e3c_1.conda sha256: f4ecfddd9583fa475e2e637ac9226b6ae20482abda53bf4339a29407e6c05cb3 md5: f2c28f19267bfcdf9ec9ed4406a89d0b @@ -9076,6 +11878,22 @@ packages: license_family: APACHE size: 1184078 timestamp: 1772721443833 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + sha256: cef784d6f72292993c06acc368c157f2093a48acf8556cdbdb6ecedf268e5b42 + md5: 535057ced1e60c5038e9adc80a0b2103 + depends: + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 1215232 + timestamp: 1782213648342 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda sha256: e7cee37c92ed0b62c0458c13937b6ad66319f1879f236a31c3a67391a999f429 md5: 0f0281435478b981f672a44d0029018c @@ -9088,6 +11906,19 @@ packages: license_family: APACHE size: 456585 timestamp: 1772727473378 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + sha256: 142e7b24173ca8c32dbdb29c60f33a56ffb21a4ed733c9d6ab160c3a213ff52e + md5: c1a50f20847df0a8cb462138153ab46f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libopenvino 2026.2.1 h1f0fae8_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 501906 + timestamp: 1782219300706 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.0.0-hfae3067_1.conda sha256: b0f32488fd11cd8ed563ad01934360df383f720a2adecf6d36aa3ea2565baab7 md5: 0a160f00a4050e3bf4749129750d0303 @@ -9099,6 +11930,18 @@ packages: license_family: APACHE size: 428895 timestamp: 1772721459028 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + sha256: 656276bd4072859725a47516c5954a91b408dd65a0d2d3f923964634a29d0ded + md5: 04e867fd452233f43885090c1533af28 + depends: + - libgcc >=14 + - libopenvino 2026.2.1 h9a8427e_1 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 468695 + timestamp: 1782213660401 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd md5: 2446ac1fe030c2aa6141386c1f5a6aed @@ -9107,6 +11950,7 @@ packages: - libgcc >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 324993 timestamp: 1768497114401 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda @@ -9116,6 +11960,7 @@ packages: - libgcc >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 383586 timestamp: 1768497303687 - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda @@ -9127,6 +11972,7 @@ packages: - ucrt >=10.0.20348.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 307373 timestamp: 1768497136248 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda @@ -9139,6 +11985,17 @@ packages: license_family: MIT size: 28424 timestamp: 1749901812541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + sha256: f41721636a7c2e51bc2c642e1127955ab9c81145470714fdaac44d4d09e4af41 + md5: 33082e13b4769b48cfeb648e15bfe3fc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 29147 + timestamp: 1773533027610 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda sha256: 7641dfdfe9bda7069ae94379e9924892f0b6604c1a016a3f76b230433bb280f2 md5: 5044e160c5306968d956c2a0a2a440d6 @@ -9148,6 +12005,45 @@ packages: license_family: MIT size: 29512 timestamp: 1749901899881 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + sha256: 5d26d751b7cc4b66e28ed1ae75900956600aaa5c5d874d5a8cf106d3aff834d3 + md5: 462239e256bc180c9c45dd049ba797ee + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 30294 + timestamp: 1773533057559 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + sha256: 26cbbd3d7b91801826c779c3f7e87d071856d5cbe3d55b22777ca0d984fb02ed + md5: e6324dfe6c02e0736bb9235f8ef3c8a6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libdovi >=3.3.2,<4.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - lcms2 >=2.19,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 549348 + timestamp: 1777835950707 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + sha256: 3af9437023ec7fa8f9bf5e390b7f6ad3df403aa736b0305121d1734af2d0620e + md5: 1909ad87fcdfa8397e3568d01500dc8d + depends: + - libstdcxx >=14 + - libgcc >=14 + - lcms2 >=2.19,<3.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libdovi >=3.3.2,<4.0a0 + - shaderc >=2026.2,<2026.3.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 560813 + timestamp: 1777835957369 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c md5: 5f13ffc7d30ffec87864e678df9957b4 @@ -9158,6 +12054,17 @@ packages: license: zlib-acknowledgement size: 317669 timestamp: 1770691470744 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 + md5: eba48a68a1a2b9d3c0d9511548db85db + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 317729 + timestamp: 1776315175087 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 md5: be4088903b94ea297975689b3c3aeb27 @@ -9167,6 +12074,16 @@ packages: license: zlib-acknowledgement size: 340156 timestamp: 1770691477245 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + sha256: 483eaa53da40a6a3e558709d9f7b1ca388735364ae21a1ba58cf942514649c92 + md5: f51503ac45a4888bce71af9027a2ecc9 + depends: + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 341202 + timestamp: 1776315188425 - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda sha256: db23f281fa80597a0dc0445b18318346862602d7081ed76244df8cc4418d6d68 md5: 43f47a9151b9b8fc100aeefcf350d1a0 @@ -9178,6 +12095,18 @@ packages: license: zlib-acknowledgement size: 383155 timestamp: 1770691504832 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + sha256: 218913aeee391460bd0e341b834dbd9c6fa6ae0a4276c0c300266cc99a816a28 + md5: 52f1280563f3b48b5f75414cd2d15dd1 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 385227 + timestamp: 1776315248638 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 md5: 11ac478fa72cf12c214199b8a96523f4 @@ -9192,6 +12121,21 @@ packages: license_family: BSD size: 3638698 timestamp: 1769749419271 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h3a69515_1.conda + sha256: a14fc571ea573d733d2c18abb52123c09d56610dbf29d03cc85cf1470f5cc8ae + md5: c80393b49f041180405a587e5ac59b49 + depends: + - __glibc >=2.17,<3.0.a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3942143 + timestamp: 1781325648920 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.33.5-h1f88751_0.conda sha256: f68780642c215b93f4991c43d88ab0af8a08e66826e68affc65b8905cc21d86b md5: 7f4a589ae616399b7e375053e82a3b12 @@ -9205,6 +12149,20 @@ packages: license_family: BSD size: 3465308 timestamp: 1769748410724 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h38371b1_1.conda + sha256: 19951d88c4e7ddd5b77036eb1343e396ce2a4160bb05db22f506a7fc1dae0e89 + md5: 76593c5f1a65a923de490a5100a10df7 + depends: + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3711720 + timestamp: 1781325304099 - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda sha256: 38b3189cf246f7265e06917f32d046ac375117c88834d045efe73ec48ceacc59 md5: d62da3d560992bfa2feb611d7be813b8 @@ -9221,6 +12179,26 @@ packages: license: LGPL-2.1-or-later size: 4011590 timestamp: 1771399906142 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + sha256: 5571bd8239d71961d4e3ce972f865b3ea95a91ce0b53d5749fe2dd24254ddbda + md5: 492c8d9b1c564c2e948b6cb4ba0f8261 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.0,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 + - libgcc >=14 + - libglib >=2.88.1,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + purls: [] + size: 3476570 + timestamp: 1780450632624 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.2-h8171147_0.conda sha256: d02d3b23aa58d7767b820289b5b50653e73d70ae32f6ee5b88f63c5c5d96c2de md5: 1d6f1aff501c8104f7292ab787d65f15 @@ -9236,6 +12214,25 @@ packages: license: LGPL-2.1-or-later size: 4016799 timestamp: 1771406266442 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + sha256: c95ac70755863d8522c1115b54afca86148ea25366b616aa84c993c2ca54b9ce + md5: 38209cc04b3e3e5624c534bc703e6939 + depends: + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.18.0,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 + - libgcc >=14 + - libglib >=2.88.1,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + constrains: + - __glibc >=2.17 + license: LGPL-2.1-or-later + purls: [] + size: 3052373 + timestamp: 1780456154830 - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_1.conda sha256: 3d06becb70212a7ed609eea07728b6545ddcff4889844290fed14a5d2fc18cd9 md5: a105938a4fae24539c89de6e7671d279 @@ -9251,6 +12248,23 @@ packages: license: LGPL-2.1-or-later size: 2877820 timestamp: 1771301866036 +- conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + sha256: 6f678be6074b79fe754660d16857a6edba73dd197ad92086250dc38c11b179ab + md5: 3fffc63af7b943cde57aa72f5ffe6048 + depends: + - cairo >=1.18.4,<2.0a0 + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 + - libglib >=2.88.1,<3.0a0 + - libxml2-16 >=2.14.6 + - pango >=1.56.4,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LGPL-2.1-or-later + purls: [] + size: 3361405 + timestamp: 1780451179155 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.3.0-h8f1669f_18.conda sha256: e03ed186eefb46d7800224ad34bad1268c9d19ecb8f621380a50601c6221a4a7 md5: ad3a0e2dc4cce549b2860e2ef0e6d75b @@ -9273,6 +12287,18 @@ packages: license_family: GPL size: 8095113 timestamp: 1771378289674 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda + sha256: 7a58892a52739ce4c0f7109de9e91b4353104748eb04fc6441d88e8af444ba99 + md5: 67eef12ce33f7ff99900c212d7076fc2 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + - libstdcxx >=15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 7930689 + timestamp: 1778269054623 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-14.3.0-hedb4206_18.conda sha256: 48641a458e3da681038af7ebdab143f9b6861ad9d1dcc2b4997ff2b744709423 md5: 03feac8b6e64b72ae536fdb264e2618d @@ -9293,6 +12319,17 @@ packages: license_family: GPL size: 7164557 timestamp: 1771378185265 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda + sha256: 8115604f113fe2b7be95b2d22183a4dda5779c1cc6db4b826af800581498b4b3 + md5: 95210a1edbd7fc6e12afc9f8276f450a + depends: + - libgcc >=15.2.0 + - libstdcxx >=15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 7067965 + timestamp: 1778268796086 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda sha256: 57cb5f92110324c04498b96563211a1bca6a74b2918b1e8df578bfed03cc32e4 md5: 067590f061c9f6ea7e61e3b2112ed6b3 @@ -9308,6 +12345,7 @@ packages: - mpg123 >=1.32.9,<1.33.0a0 license: LGPL-2.1-or-later license_family: LGPL + purls: [] size: 355619 timestamp: 1765181778282 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda @@ -9324,6 +12362,7 @@ packages: - mpg123 >=1.32.9,<1.33.0a0 license: LGPL-2.1-or-later license_family: LGPL + purls: [] size: 406978 timestamp: 1765181892661 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda @@ -9368,6 +12407,18 @@ packages: purls: [] size: 951405 timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda + sha256: f2ad4d3abd4ed7a6a0d28c0ff153e27cb45c406814faa2570bc2581804283674 + md5: f283e98005089bf29ac5774c2e209fbf + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 964141 + timestamp: 1782406552467 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 md5: 77891484f18eca74b8ad83694da9815e @@ -9379,6 +12430,17 @@ packages: purls: [] size: 952296 timestamp: 1772818881550 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.2-h10b116e_1.conda + sha256: 74abcfaa0f4c13024e07dbed75b378dd6e9ad4e6e2773ffe00993b0bf437ab58 + md5: 6d39fe0dc458643272905ecad03aaa77 + depends: + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + purls: [] + size: 968949 + timestamp: 1782406597817 - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 md5: 8830689d537fda55f990620680934bb1 @@ -9390,6 +12452,17 @@ packages: purls: [] size: 1297302 timestamp: 1772818899033 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda + sha256: a643cbc7593b443967093afb14bb892b94094e9135e30772fd1a9dfda8bb08b6 + md5: b510cd61047daf53a68be8daeb56b426 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: blessing + purls: [] + size: 1314192 + timestamp: 1782406655419 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -9403,18 +12476,43 @@ packages: purls: [] size: 5852330 timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852044 + timestamp: 1778269036376 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 md5: f56573d05e3b735cb03efeb64a15f388 depends: - libgcc 15.2.0 h8acb6b2_18 constrains: - - libstdcxx-ng ==15.2.0=*_18 + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5541411 + timestamp: 1771378162499 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + sha256: 1dadc45e599f510dd5f97141dddcdbb9844d9f1430c1f3a38075cf1c58f87b4e + md5: 543fbc8d71f2a0baf04cf88ce96cb8bb + depends: + - libgcc 15.2.0 h8acb6b2_19 + constrains: + - libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5541411 - timestamp: 1771378162499 + size: 5546559 + timestamp: 1778268777463 - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_18.conda sha256: 7134b90a850f0e14f15bd0f0218fd728f19cd5c58420a90c2f561f58272b8519 md5: 7c09facd8f5aced6b4c146e1c4053e50 @@ -9445,6 +12543,16 @@ packages: license_family: GPL size: 20669511 timestamp: 1771378139786 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + sha256: a2385f3611d5cd25378f9cf2367183320731709c067ddd08d43330d3170f15b8 + md5: bcfe7eae40158c3e355d2f9d3ed41230 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 20765069 + timestamp: 1778268963689 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-14.3.0-h57c8d61_118.conda sha256: 609585a02b05a2b0f2cabb18849328455cbce576f2e3eb8108f3ef7f4cb165a6 md5: bcf29f2ed914259a258204b05346abb1 @@ -9463,6 +12571,16 @@ packages: license_family: GPL size: 17628403 timestamp: 1771378058765 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + sha256: 6f7ceee16070781b7d642a37a35ffdf09c66796d3df105c919526210ce220443 + md5: 61da34d67f58dd4cf16683f6cdcb06c8 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 17627362 + timestamp: 1778268687968 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_118.conda sha256: 0b27331f127c6c10017442cc98c483aa868298102e98aae70ad86b9a5ae0029e md5: b7a331c07d140e476fee0c70c9696e87 @@ -9481,6 +12599,16 @@ packages: license_family: GPL size: 27575 timestamp: 1771378314494 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 + depends: + - libstdcxx 15.2.0 h934c35e_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27776 + timestamp: 1778269074600 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 md5: 699d294376fe18d80b7ce7876c3a875d @@ -9490,6 +12618,16 @@ packages: license_family: GPL size: 27645 timestamp: 1771378204663 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + sha256: 56b5ec297a988961486694f1c598889c3a697d77a0b42b8cea3faaa12e9bd360 + md5: c82ed61c3ec470c5ec624580e6ba16e4 + depends: + - libstdcxx 15.2.0 hef695bb_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27803 + timestamp: 1778268813278 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda sha256: f0356bb344a684e7616fc84675cfca6401140320594e8686be30e8ac7547aed2 md5: 1d4c18d75c51ed9d00092a891a547a7d @@ -9500,6 +12638,17 @@ packages: license: LGPL-2.1-or-later size: 491953 timestamp: 1770738638119 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + sha256: 2293884d59cf0436c37fc0a4bad71011a8de2a6913610d1c701a7703377c1f75 + md5: ea0da9c20bbb221b530810c3c68bbe62 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 493022 + timestamp: 1780084748140 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda sha256: c5008b602cb5c819f7b52d418b3ed17e1818cbbf6705b189e7ab36bb70cce3d8 md5: 8ee3cb7f64be0e8c4787f3a4dbe024e6 @@ -9530,6 +12679,16 @@ packages: purls: [] size: 516600 timestamp: 1773797150163 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + sha256: 7938befc6a09d9f829663ea134b01bea78dabe08d928e9a7caa68e2d726e03c5 + md5: d8981d39a52ab992a033a68927da47e0 + depends: + - libcap >=2.78,<2.79.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 515284 + timestamp: 1780084773602 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 md5: cd5a90476766d53e901500df9215e927 @@ -9545,6 +12704,7 @@ packages: - libzlib >=1.3.1,<2.0a0 - zstd >=1.5.7,<1.6.0a0 license: HPND + purls: [] size: 435273 timestamp: 1762022005702 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda @@ -9561,6 +12721,7 @@ packages: - libzlib >=1.3.1,<2.0a0 - zstd >=1.5.7,<1.6.0a0 license: HPND + purls: [] size: 488407 timestamp: 1762022048105 - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -9577,6 +12738,7 @@ packages: - vc14_runtime >=14.44.35208 - zstd >=1.5.7,<1.6.0a0 license: HPND + purls: [] size: 993166 timestamp: 1762022118895 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.10.0-cuda130_mkl_hb2e6204_303.conda @@ -9623,6 +12785,52 @@ packages: license_family: BSD size: 487186668 timestamp: 1772223626192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.1-cuda130_mkl_h5535f43_300.conda + sha256: 2dd082b5b2c631b62824f41a13cfa88e0e37c6f28d187a9987cbfd116f5a3fd5 + md5: 49b40832a1320f8eb0020d3e9bd18421 + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=13.0.96,<14.0a0 + - cuda-cupti >=13.0.85,<14.0a0 + - cuda-nvrtc >=13.0.88,<14.0a0 + - cuda-nvtx >=13.0.85,<14.0a0 + - cuda-version >=13.0,<14 + - fmt >=12.1.0,<12.2.0a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libblas * *mkl + - libcblas >=3.11.0,<4.0a0 + - libcublas >=13.1.1.3,<14.0a0 + - libcudnn >=9.23.1.3,<10.0a0 + - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcufft >=12.0.0.61,<13.0a0 + - libcufile >=1.15.1.6,<2.0a0 + - libcurand >=10.4.0.35,<11.0a0 + - libcusolver >=12.0.4.66,<13.0a0 + - libcusparse >=12.6.3.3,<13.0a0 + - libgcc >=14 + - libmagma >=2.10.0,<2.10.1.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - llvm-openmp >=22.1.8 + - mkl >=2026.0.0,<2027.0a0 + - nccl >=2.30.7.1,<3.0a0 + - onednn >=3.12,<4.0a0 + - pybind11-abi 11 + - sleef >=3.9.0,<4.0a0 + constrains: + - pytorch-gpu 2.12.1 + - pytorch 2.12.1 cuda130_mkl_*_300 + - pytorch-cpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 472545686 + timestamp: 1781841819133 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.10.0-cuda130_generic_he6ac1af_203.conda sha256: 9ca0feffff3f5c7b5ce0a2ab66ba8b15dd33c8b812e149cf98933964e51a4dfd md5: f344404036b9bf7fe26e91e92f6c2b7c @@ -9670,6 +12878,55 @@ packages: license_family: BSD size: 468842829 timestamp: 1772296520985 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.12.1-cuda130_generic_h4328193_200.conda + sha256: 0742a662e62af3e15a326d9927b62b6398fde5c4971a3863aeca178c80af49ff + md5: 46a34bf52048dda3aacf071da129e979 + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - arm-variant * sbsa + - cuda-cudart >=13.0.96,<14.0a0 + - cuda-cupti >=13.0.85,<14.0a0 + - cuda-nvrtc >=13.0.88,<14.0a0 + - cuda-nvtx >=13.0.85,<14.0a0 + - cuda-version >=13.0,<14 + - fmt >=12.1.0,<12.2.0a0 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcublas >=13.1.1.3,<14.0a0 + - libcudnn >=9.23.1.3,<10.0a0 + - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcufft >=12.0.0.61,<13.0a0 + - libcufile >=1.15.1.6,<2.0a0 + - libcurand >=10.4.0.35,<11.0a0 + - libcusolver >=12.0.4.66,<13.0a0 + - libcusparse >=12.6.3.3,<13.0a0 + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - libmagma >=2.10.0,<2.10.1.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - llvm-openmp >=22.1.8 + - nccl >=2.30.7.1,<3.0a0 + - onednn >=3.12,<4.0a0 + - pybind11-abi 11 + - sleef >=3.9.0,<4.0a0 + constrains: + - pytorch 2.12.1 cuda130_generic_*_200 + - pytorch-cpu <0.0a0 + - pytorch-gpu 2.12.1 + - openblas * openmp_* + - libopenblas * openmp_* + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 457116875 + timestamp: 1781841668799 - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda sha256: ed4d2c01fbeb1330f112f7e399408634db277d3dfb2dec1d0395f56feaa24351 md5: 6c74fba677b61a0842cbf0f63eee683b @@ -9680,6 +12937,17 @@ packages: license: LGPL-2.1-or-later size: 144654 timestamp: 1770738650966 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda + sha256: 287d05680e49eea51b8145fbf34bc213c0618b04f32e450e9da5d715e5134e38 + md5: 89e5671a076d99516a6acd72a35b1640 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 145969 + timestamp: 1780084753104 - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda sha256: 1a1e367c04d66030aa93b4d33905f7f6fbb59cfc292e816fe3e9c1e8b3f4d1e2 md5: 2c2270f93d6f9073cbf72d821dfc7d72 @@ -9710,6 +12978,16 @@ packages: purls: [] size: 156357 timestamp: 1773797159424 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda + sha256: 1963dbd5a5c08390db2321dd2fa5c9df45c0fe68701fce4f9c36141155b4de13 + md5: 67728797901490baae52b3ce8d738d34 + depends: + - libcap >=2.78,<2.79.0a0 + - libgcc >=14 + license: LGPL-2.1-or-later + purls: [] + size: 156922 + timestamp: 1780084778404 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a md5: e179a69edd30d75c0144d7a380b88f28 @@ -9719,6 +12997,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 75995 timestamp: 1757032240102 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda @@ -9729,6 +13008,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 94555 timestamp: 1757032278900 - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda @@ -9740,6 +13020,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 154203 timestamp: 1770566529700 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda @@ -9750,6 +13031,7 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT + purls: [] size: 155011 timestamp: 1770567701524 - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda @@ -9760,6 +13042,7 @@ packages: - libgcc >=13 - libudev1 >=257.4 license: LGPL-2.1-or-later + purls: [] size: 89551 timestamp: 1748856210075 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda @@ -9769,6 +13052,7 @@ packages: - libgcc >=13 - libudev1 >=257.4 license: LGPL-2.1-or-later + purls: [] size: 93129 timestamp: 1748856228398 - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda @@ -9782,6 +13066,7 @@ packages: - vc14_runtime >=14.29.30139 - ucrt >=10.0.20348.0 license: LGPL-2.1-or-later + purls: [] size: 118204 timestamp: 1748856290542 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda @@ -9805,6 +13090,17 @@ packages: purls: [] size: 40297 timestamp: 1775052476770 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f + md5: 01bb81d12c957de066ea7362007df642 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40017 + timestamp: 1781625522462 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 md5: cf2861212053d05f27ec49c3784ff8bb @@ -9824,6 +13120,16 @@ packages: purls: [] size: 43567 timestamp: 1775052485727 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda + sha256: 7663489f97c104ae3814db10f384932c74b439f3c1fd4247e4fe3599830c090a + md5: 58fa42bc4bc71fc329889497ec15effb + depends: + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 43248 + timestamp: 1781625528371 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b md5: 0f03292cc56bf91a077a134ea8747118 @@ -9834,6 +13140,17 @@ packages: license_family: MIT size: 895108 timestamp: 1753948278280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_0.conda + sha256: e28e4519223f78b3163599ca89c3f2d80bfb53e907e7fc74e806e60d1efa578b + md5: 4e33d49bf4fc853855a3b00643aa5484 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 419935 + timestamp: 1779396012261 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda sha256: 7a0fb5638582efc887a18b7d270b0c4a6f6e681bf401cab25ebafa2482569e90 md5: 8e62bf5af966325ee416f19c6f14ffa3 @@ -9843,6 +13160,16 @@ packages: license_family: MIT size: 629238 timestamp: 1753948296190 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.52.1-h80f16a2_0.conda + sha256: 3e2ead35f47d01364031f323f1be984018c8f19a3a264f952ddcd043685a1c86 + md5: ac7bcbd2c77691cd6d1ede8c029e8c8a + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 456627 + timestamp: 1779396031450 - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda sha256: 255c7d00b54e26f19fad9340db080716bced1d8539606e2b8396c57abd40007c md5: 25813fe38b3e541fc40007592f12bae5 @@ -9861,6 +13188,7 @@ packages: - xorg-libxfixes >=6.0.2,<7.0a0 license: MIT license_family: MIT + purls: [] size: 221308 timestamp: 1765652453244 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda @@ -9875,6 +13203,7 @@ packages: - libogg >=1.3.5,<1.4.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 285894 timestamp: 1753879378005 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda @@ -9887,6 +13216,7 @@ packages: - libogg >=1.3.5,<1.4.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 289391 timestamp: 1753879417231 - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda @@ -9903,6 +13233,7 @@ packages: - libogg >=1.3.5,<1.4.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 243401 timestamp: 1753879416570 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda @@ -9916,6 +13247,7 @@ packages: - libva >=2.23.0,<3.0a0 license: MIT license_family: MIT + purls: [] size: 287992 timestamp: 1772980546550 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda @@ -9927,6 +13259,7 @@ packages: - libstdcxx >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 1070048 timestamp: 1762010217363 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda @@ -9937,6 +13270,7 @@ packages: - libstdcxx >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 1296382 timestamp: 1762012332100 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda @@ -9952,6 +13286,7 @@ packages: - libvulkan-headers 1.4.341.0.* license: Apache-2.0 license_family: APACHE + purls: [] size: 199795 timestamp: 1770077125520 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda @@ -9966,6 +13301,7 @@ packages: - libvulkan-headers 1.4.341.0.* license: Apache-2.0 license_family: APACHE + purls: [] size: 217655 timestamp: 1770077141862 - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda @@ -9979,6 +13315,7 @@ packages: - libvulkan-headers 1.4.341.0.* license: Apache-2.0 license_family: APACHE + purls: [] size: 282251 timestamp: 1770077165680 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda @@ -9991,6 +13328,7 @@ packages: - libwebp 1.6.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 429011 timestamp: 1752159441324 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda @@ -10002,6 +13340,7 @@ packages: - libwebp 1.6.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 359496 timestamp: 1752160685488 - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda @@ -10015,6 +13354,7 @@ packages: - libwebp 1.6.0 license: BSD-3-Clause license_family: BSD + purls: [] size: 279176 timestamp: 1752159543911 - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda @@ -10040,6 +13380,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 395888 timestamp: 1727278577118 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda @@ -10052,6 +13393,7 @@ packages: - xorg-libxdmcp license: MIT license_family: MIT + purls: [] size: 397493 timestamp: 1727280745441 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda @@ -10070,6 +13412,23 @@ packages: license_family: MIT size: 837922 timestamp: 1764794163823 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + sha256: 046f2ff4acebd8729fac03e99c8c307dfb48b6a32894ba8c11576e78f6e76e43 + md5: dc8b067e22b414172bedd8e3f03f3c95 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 851166 + timestamp: 1780213397575 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda sha256: 37e4aa45b71c35095a01835bd42fa37c08218fec44eb2c6bf4b9e2826b0351d4 md5: 22c1ce28d481e490f3635c1b6a2bb23f @@ -10085,6 +13444,22 @@ packages: license_family: MIT size: 863646 timestamp: 1764794352540 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + sha256: 8f44670a714a12589bc82ea179e46ba4a19c4458d5cee765ddd4d5224eccd912 + md5: d6fc9ac66ea61eb662747959d0a68c57 + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative + license_family: MIT + purls: [] + size: 875994 + timestamp: 1780213408784 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 md5: e49238a1609f9a4a844b09d9926f2c3d @@ -10100,6 +13475,22 @@ packages: license_family: MIT size: 45968 timestamp: 1772704614539 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba + md5: 995d8c8bad2a3cc8db14675a153dec2b + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 hca6bf5a_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 46810 + timestamp: 1776376751152 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda sha256: 3e51e1952cb60c8107094b6b78473d91ff49d428ad4bef6806124b383e8fe29c md5: 19de96909ee1198e2853acd8aba89f6c @@ -10114,6 +13505,21 @@ packages: license_family: MIT size: 47837 timestamp: 1772704681112 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + sha256: e3af6af9df73bd3c7a8e4e6c8cc38df3699e7f588b0705c257a8601e40acfbdf + md5: 2cffef27cb2eb9ed1e315a1e269d4335 + depends: + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h79dcc73_0 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 48101 + timestamp: 1776376766341 - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda sha256: f905eb7046987c336122121759e7f09144729f6898f48cd06df2a945b86998d8 md5: 1007e1bfe181a2aee214779ee7f13d30 @@ -10148,6 +13554,23 @@ packages: license_family: MIT size: 43866 timestamp: 1772704745691 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + sha256: a4599c6bbbbdd7db570896e520c557eec8e66d94e839a59d17dc1f24a3d5f82b + md5: 95591ca5671d2213f5b2d5aa7818420d + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h3cfd58e_0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 43684 + timestamp: 1776376992865 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c md5: f3bc152cb4f86babe30f3a4bf0dbef69 @@ -10164,6 +13587,23 @@ packages: license_family: MIT size: 557492 timestamp: 1772704601644 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a + md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 559775 + timestamp: 1776376739004 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda sha256: da6b2ebbcecc158200d90be39514e4e902971628029b35b7f6ad57270659c5d9 md5: e3ec9079759d35b875097d6a9a69e744 @@ -10179,6 +13619,22 @@ packages: license_family: MIT size: 598438 timestamp: 1772704671710 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + sha256: ad048a9ca1bf2cdfedb2b0c231050da416c44ee1436a3d1a83b51d2e2deaa842 + md5: 68866231cfe8789e780347f2482df96d + depends: + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 601948 + timestamp: 1776376758674 - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda sha256: d6d792f8f1d6786b9144adfa62c33a04aeec3d76682351b353ca1224fc1a74f3 md5: f6dd496a1f2b66951110a3a0817f699b @@ -10214,6 +13670,24 @@ packages: purls: [] size: 520078 timestamp: 1772704728534 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + sha256: 3b61ee3caba702d2ff432fa3920835db963026e5c99c4e6fdca0c6114f59e7ce + md5: 9e8dd0d90ed830107b2c36801035b7db + depends: + - icu >=78.3,<79.0a0 + - libiconv >=1.18,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - libxml2 2.15.3 + license: MIT + license_family: MIT + purls: [] + size: 519871 + timestamp: 1776376969852 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -10298,6 +13772,19 @@ packages: license_family: APACHE size: 6136884 timestamp: 1772024545 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda + sha256: a37aba21b85800af1e7c5b04ba76abab96b6e591eedf99dc6e4df83b0fefd7a5 + md5: 7bbfdc5a6eca997d3b0873a575c3e155 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - intel-openmp <0.0a0 + - openmp 22.1.8|22.1.8.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 6123597 + timestamp: 1781736521736 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.0-he40846f_0.conda sha256: 08e50e981736118b6cc379096395bd725eeac1cb3852bcdfa1d2980acba39c29 md5: 757e953866f430da9de3fcebf44d1474 @@ -10308,6 +13795,17 @@ packages: license_family: APACHE size: 5902242 timestamp: 1772024546951 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.8-he40846f_0.conda + sha256: 30bbb0ce4ae7cebbeb9801af5bbd2a29f8627237a38d08fc5d8d800e79c817aa + md5: 2107bb80c5587c116702ce215daddd73 + constrains: + - openmp 22.1.8|22.1.8.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 5888931 + timestamp: 1781736538044 - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda sha256: bb55a3736380759d338f87aac68df4fd7d845ae090b94400525f5d21a55eea31 md5: e5505e0b7d6ef5c19d5c0c1884a2f494 @@ -10337,6 +13835,21 @@ packages: purls: [] size: 348400 timestamp: 1774733045609 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + sha256: 50c02902bb516eeb56680358f052be38b5bf74b40e78ea4b2a675e84957e7307 + md5: de3551bf6508d45ca46b714639e52823 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - openmp 22.1.8|22.1.8.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 348002 + timestamp: 1781737042070 - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda build_number: 0 sha256: 51e9214548f177db9c3fe70424e3774c95bf19cd69e0e56e83abe2e393228ba1 @@ -10533,6 +14046,23 @@ packages: license_family: Proprietary size: 125728406 timestamp: 1767634121080 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2026.0.0-hecca717_915.conda + sha256: 740a02cf7b3c0d6dd47dbb4d2e222ed23d326971fe608d737614db1033bd107d + md5: 09feb8740f611ceb96f8b598bf08cdba + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + - llvm-openmp >=22.1.7 + - onemkl-license 2026.0.0 ha770c72_915 + - tbb >=2023.0.0 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 143201396 + timestamp: 1781016571972 - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda sha256: b2b4c84b95210760e4d12319416c60ab66e03674ccdcbd14aeb59f82ebb1318d md5: fd05d1e894497b012d05a804232254ed @@ -10560,6 +14090,21 @@ packages: purls: [] size: 99997309 timestamp: 1774449747739 +- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda + sha256: f997bfc9bc4d4e14261cdcd1ad195d64a72ee44dca3145d24c1349f8d1311aa5 + md5: 36ea6e1292e9d5e89374201da79646ef + depends: + - llvm-openmp >=22.1.5 + - onemkl-license 2026.0.0 h57928b3_908 + - tbb >=2023.0.0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 114354729 + timestamp: 1779293121860 - conda: https://conda.anaconda.org/conda-forge/linux-64/ml_dtypes-0.5.4-np2py314h6477eea_1.conda sha256: bf58f5b2d89958e8880cfde4e5e3d86f230485c5f5f1043fc47a56656f9655c6 md5: af93de29d470abbe21a6adc2ec58516e @@ -10623,6 +14168,19 @@ packages: license_family: LGPL size: 116777 timestamp: 1725629179524 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda + sha256: c1fdeebc9f8e4f51df265efca4ea20c7a13911193cc255db73cccb6e422ae486 + md5: 770d00bf57b5599c4544d61b61d8c6c6 + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpfr >=4.2.2,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 100245 + timestamp: 1774472435333 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.3.1-h783934e_1.conda sha256: b5b674f496ed28c0b2d08533c6f11eaf1840bf7d9c830655f51514f2f9d9a9c8 md5: d3758cd24507dc1bda3483ce051d48ac @@ -10634,6 +14192,18 @@ packages: license_family: LGPL size: 132799 timestamp: 1725629168783 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.4.0-he6dc3fb_0.conda + sha256: 69f25e0c9ce2827097549a74a83f2c31c9c40fa4a668a4db96462e5a7eeb9634 + md5: b3aa59caa59a7b0288a21b097f8b6bc4 + depends: + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + - mpfr >=4.2.2,<5.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 121080 + timestamp: 1774472380541 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0 md5: 2eeb50cab6652538eee8fc0bc3340c81 @@ -10645,6 +14215,18 @@ packages: license_family: LGPL size: 634751 timestamp: 1725746740014 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda + sha256: 8690f550a780f75d9c47f7ffc15f5ff1c149d36ac17208e50eda101ca16611b9 + md5: 85ce2ffa51ab21da5efa4a9edc5946aa + depends: + - __glibc >=2.17,<3.0.a0 + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 730422 + timestamp: 1773413915171 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.1-h2305555_3.conda sha256: abb35c37de2ec6c9ee89995142b1cfea9e6547202ba5578e5307834eca6d436f md5: 65b21e8d5f0ec6a2f7e87630caed3318 @@ -10655,6 +14237,17 @@ packages: license_family: LGPL size: 1841314 timestamp: 1725746723157 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.2-h3faef18_0.conda + sha256: ca2c993ad80a54f3f13b6c7857f17301acaf30b48bb1c455d890f596892417f7 + md5: 0fa4a1bcdb9e3224ab97b966d27e4949 + depends: + - gmp >=6.3.0,<7.0a0 + - libgcc >=14 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 1933306 + timestamp: 1773413839223 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 md5: c7f302fd11eeb0987a6a5e1f3aed6a21 @@ -10664,6 +14257,7 @@ packages: - libstdcxx >=13 license: LGPL-2.1-only license_family: LGPL + purls: [] size: 491140 timestamp: 1730581373280 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda @@ -10674,6 +14268,7 @@ packages: - libstdcxx >=13 license: LGPL-2.1-only license_family: LGPL + purls: [] size: 558708 timestamp: 1730581372400 - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda @@ -10685,6 +14280,17 @@ packages: license_family: BSD size: 439705 timestamp: 1733302781386 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + sha256: 5bbf2f8179ec43d34d67ca8e4989d216c1bdb4b749fe6cb40e86ebf88c1b5300 + md5: 2e81b32b805f406d23ba61938a184081 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpmath?source=hash-mapping + size: 464918 + timestamp: 1773662068273 - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py314h9891dd4_1.conda sha256: d41c2734d314303e329680aeef282766fe399a0ce63297a68a2f8f9b43b1b68a md5: c6752022dcdbf4b9ef94163de1ab7f03 @@ -10834,6 +14440,19 @@ packages: license_family: BSD size: 221809897 timestamp: 1770778626119 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.30.7.1-h1aa9b5a_0.conda + sha256: f92f617b266c24ce25766750ee45e326cbf572a97af41ca6ccb2d140f6c3859c + md5: d09e75d1fb0481ad255c74a23506696c + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13,<14.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 239421791 + timestamp: 1781141768144 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.29.3.1-h7d52dd6_0.conda sha256: 46facf5f8442e407d4953ad993a5e16c4929d3a8f1d25eb5b433f3777761b2cf md5: 2c5a62a7e72792a3af760f7016c3871c @@ -10847,6 +14466,20 @@ packages: license_family: BSD size: 271172034 timestamp: 1770779652233 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.30.7.1-h2b99535_0.conda + sha256: 9a3b9fc08e42350eb1228bd17db136d063f9fedd388316eabd2af3e99ab732b7 + md5: f963884eca3abe4251b3d9dd40c78109 + depends: + - __glibc >=2.28,<3.0.a0 + - arm-variant * sbsa + - cuda-version >=13,<14.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 291132360 + timestamp: 1781142421045 - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -10857,6 +14490,16 @@ packages: purls: [] size: 891641 timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + size: 918956 + timestamp: 1777422145199 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 md5: 182afabe009dc78d8b73100255ee6868 @@ -10866,6 +14509,15 @@ packages: purls: [] size: 926034 timestamp: 1738196018799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + sha256: 369db85c5cd8d99dde364ce70725d76511d9c8199e5b820c740414091bf5bcca + md5: b2a43456aa56fe80c2477a5094899eff + depends: + - libgcc >=14 + license: X11 AND BSD-3-Clause + purls: [] + size: 960036 + timestamp: 1777422174534 - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 md5: 598fd7d4d0de2455fb74f56063969a97 @@ -10890,6 +14542,8 @@ packages: - pandas >=2.0 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/networkx?source=hash-mapping size: 1587439 timestamp: 1765215107045 - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 @@ -10899,6 +14553,7 @@ packages: - mkl <0.a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 3843 timestamp: 1582593857545 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda @@ -10939,6 +14594,26 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 8927860 timestamp: 1773839233468 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + sha256: bbc665584886c90daf3f33cfbf665f279cf91d4bd5323f0432c16d2bf4d525e7 + md5: bdb21d2b990f9d3aee10fd43aca851fe + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - liblapack >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 9075918 + timestamp: 1782112541752 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py314haac167e_1.conda sha256: 1e1366e700156cbddc4daae0fec34a72b74105ba45f9c144f777120552924747 md5: 98ef547c85356475adb2197965c716b6 @@ -10977,6 +14652,25 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 8008045 timestamp: 1773839355275 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.0-py314he1698a1_0.conda + sha256: 8677e6bd3a1a95f8ecf2b0f1ca39f30f55b1aa0865b217bb3cb55b29d3e092fa + md5: 10165160938f6498096bda3e0ff051ac + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - liblapack >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8158865 + timestamp: 1782112546539 - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda sha256: 34fc25b81cfa987e1825586ddb1a4ac76a246fdef343c9171109017674ad6503 md5: 2fccd2c4e9feb4e4c2a90043015525d6 @@ -11015,6 +14709,26 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7311362 timestamp: 1773839141373 +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + sha256: 86c3e926fa1d6f27ebe6b9db11ff12e9a3b6e4b0343bf4a9b489dafd9614da3f + md5: f92585b1624ecdd117b6d13fd4d691ed + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 7436159 + timestamp: 1782112573833 - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda sha256: 482d94fce136c4352b18c6397b9faf0a3149bfb12499ab1ffebad8db0cb6678f md5: 3aa4b625f20f55cf68e92df5e5bf3c39 @@ -11037,6 +14751,33 @@ packages: - sphinx>=7.1 - pydata-sphinx-theme>=0.15 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/20/77/a2b64335bab7c75fe1c054cc4ebe2d3b3234cbdb04d2e1d6ca73551c54f5/nvtx-0.2.15-cp314-cp314-win_amd64.whl + name: nvtx + version: 0.2.15 + sha256: 9934fad0b441cfa6e896a848b092498ba23e2ff205c2b9a7b60520ff8367ffef + requires_dist: + - pytest ; extra == 'test' + - setuptools ; extra == 'test' + - sphinx ; extra == 'docs' + - nvidia-sphinx-theme ; extra == 'docs' +- pypi: https://files.pythonhosted.org/packages/e0/5b/ca0ba6fa769d08174b7a5b4775c279e2e26611cdd5e7833aa699187871c7/nvtx-0.2.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl + name: nvtx + version: 0.2.15 + sha256: b5171b8283dd3ea9ae688a86d16901b4c2c142c4eb0a4bdbf6c222f5f67f9524 + requires_dist: + - pytest ; extra == 'test' + - setuptools ; extra == 'test' + - sphinx ; extra == 'docs' + - nvidia-sphinx-theme ; extra == 'docs' +- pypi: https://files.pythonhosted.org/packages/f7/e1/e02fafc01c18f1868a2d2c030953f49e38d65f2d95884789a6c46ff308f1/nvtx-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: nvtx + version: 0.2.15 + sha256: 3c6d0f27d4f8a2f479eb64a6b842c13aee32120348a1715d995b9bb9f75b35cf + requires_dist: + - pytest ; extra == 'test' + - setuptools ; extra == 'test' + - sphinx ; extra == 'docs' + - nvidia-sphinx-theme ; extra == 'docs' - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda sha256: 2254dae821b286fb57c61895f2b40e3571a070910fdab79a948ff703e1ea807b md5: 56f8947aa9d5cf37b0b3d43b83f34192 @@ -11048,6 +14789,57 @@ packages: license_family: BSD size: 106742 timestamp: 1743700382939 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + sha256: 75f3bf733523a338f73d6c276c4a26634877cd970edb558f2769d9fa52b100a9 + md5: c2871ba95727fd1382c05db66048b64c + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - opencl-headers >=2025.6.13 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 109598 + timestamp: 1780362789611 +- conda: https://conda.anaconda.org/conda-forge/linux-64/onednn-3.12-omp_h83de36e_0.conda + sha256: 0555c7f54e7192b30412cdb462adcf2151153c03fc9f20c0d6846a9381efea56 + md5: 1edfb47e2c1cce4978bbebc467999977 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 13069211 + timestamp: 1779565995400 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/onednn-3.12-omp_h605b386_0.conda + sha256: ff6c1d53eaa1221a46bb77ac871dc8eea8ef070fb975ce9810329a28d65b523e + md5: 365b9ebd06388b4c7647b4b477cde089 + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 7480320 + timestamp: 1779566014380 +- conda: https://conda.anaconda.org/conda-forge/linux-64/onemkl-license-2026.0.0-ha770c72_915.conda + sha256: 80008386bb19f8dffc8873d6c1c16f22bb63f19c960d774b647b9a01e99ad624 + md5: 0f40953c960dc51ed18611a48f4b22a0 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 39966 + timestamp: 1781016460562 +- conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda + sha256: 42ad15cbb3bf31830efa04d4b86dd2d5c0dd590c86f98adcd3c8c1f75acf5dd5 + md5: 9c9303e08b50e09f5c23e1dac99d0936 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 41580 + timestamp: 1779292867015 - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda sha256: 2b6ce54174ec19110e1b3c37455f7cd138d0e228a75727a9bba443427da30a36 md5: 45c3d2c224002d6d0d7769142b29f986 @@ -11059,6 +14851,18 @@ packages: license_family: APACHE size: 55357 timestamp: 1749853464518 +- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + sha256: 8de2f0cd8a659b01abf86e7fbb8cea4f28ada62fd288429a2bbc040db1b98dd0 + md5: c930c8052d780caa41216af7de472226 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 55754 + timestamp: 1773844383536 - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda sha256: 3f231f2747a37a58471c82a9a8a80d92b7fece9f3fce10901a5ac888ce00b747 md5: b28cf020fd2dead0ca6d113608683842 @@ -11068,6 +14872,7 @@ packages: - libstdcxx >=13 license: BSD-2-Clause license_family: BSD + purls: [] size: 731471 timestamp: 1739400677213 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda @@ -11078,6 +14883,7 @@ packages: - libstdcxx >=13 license: BSD-2-Clause license_family: BSD + purls: [] size: 774512 timestamp: 1739400731652 - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda @@ -11089,8 +14895,38 @@ packages: - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD + purls: [] size: 411269 timestamp: 1739401120354 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 355400 + timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + sha256: bd1bc8bdde5e6c5cbac42d462b939694e40b59be6d0698f668515908640c77b8 + md5: cea962410e327262346d48d01f05936c + depends: + - libgcc >=14 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 392636 + timestamp: 1758489353577 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -11103,6 +14939,18 @@ packages: purls: [] size: 3164551 timestamp: 1769555830639 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b + md5: 79dd2074b5cd5c5c6b2930514a11e22d + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3159683 + timestamp: 1781069855778 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f md5: 25f5885f11e8b1f075bccf4a2da91c60 @@ -11114,6 +14962,17 @@ packages: purls: [] size: 3692030 timestamp: 1769557678657 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + sha256: da4a5df42614166b69c2f6d8602fc1425f7aaa699f77c3bafb5c7fe69b3d9fb7 + md5: fa6260b3e6eababf6ca85a7eb3336383 + depends: + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3704664 + timestamp: 1781069675555 - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 md5: eb585509b815415bc964b2c7e11c7eb3 @@ -11127,6 +14986,19 @@ packages: purls: [] size: 9343023 timestamp: 1769557547888 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + sha256: cb6e7ba0d010ee0d3249ce9886de3d7613d26d9965d4c95666fa66b9c4c31001 + md5: e99f95734a326c0fd4d02bbd995150d4 + depends: + - ca-certificates + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 9414790 + timestamp: 1781071745579 - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.0-py314h9891dd4_0.conda sha256: 620379ebc27e1c43b9a8defdb167442a3413de949a464305443833db32ba7a83 md5: e13172f02effa3c9f07571ed0ddef44d @@ -11141,6 +15013,22 @@ packages: license_family: Apache size: 504345 timestamp: 1771868359859 +- conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.1-py314h9891dd4_0.conda + sha256: 0bc01fdc2dccad1a38f680249414c0f6a006ce3bd3c3043bde89711ec7b3d074 + md5: 44ffc8b345a7844a847d4fdf469d64ea + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - typing-extensions >=4.12 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree?source=hash-mapping + size: 513161 + timestamp: 1778047690925 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.0-py314hd7d8586_0.conda sha256: 78deba0984ab747179c1aa87f024d6597ecfba75378c9b4601046d9c8ab59956 md5: 214ab44a77f6135a6b0178c1c9cb5149 @@ -11155,6 +15043,22 @@ packages: license_family: Apache size: 467867 timestamp: 1771868413266 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.1-py314hd7d8586_0.conda + sha256: 4c255c7f435badb89df01c9eba8d9e9df0b6f8d36fe85abe1da54b81aaf04ff3 + md5: 1b70477fda9714b24e56bf5691dd8cdc + depends: + - libgcc >=14 + - libstdcxx >=14 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - typing-extensions >=4.12 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/optree?source=hash-mapping + size: 477463 + timestamp: 1778047736212 - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 md5: b76541e68fea4d511b1ac46a28dcd2c6 @@ -11167,6 +15071,18 @@ packages: - pkg:pypi/packaging?source=compressed-mapping size: 72010 timestamp: 1769093650580 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 + md5: 4c06a92e74452cfa53623a81592e8934 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 91574 + timestamp: 1777103621679 - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda sha256: 3613774ad27e48503a3a6a9d72017087ea70f1426f6e5541dbdb59a3b626eaaf md5: 79f71230c069a287efe3a8614069ddf1 @@ -11187,6 +15103,47 @@ packages: license: LGPL-2.1-or-later size: 455420 timestamp: 1751292466873 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + sha256: 315b52bfa6d1a820f4806f6490d472581438a28e21df175290477caec18972b0 + md5: d53ffc0edc8eabf4253508008493c5bc + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 458036 + timestamp: 1774281947855 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda + sha256: d209c8b0d53c441ee0bc0d8fce0fcae8e7e05755e51b13b6b9da02c7aa032f98 + md5: 3fc7cc25bba3381e77b753578058e3b0 + depends: + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + license: LGPL-2.1-or-later + purls: [] + size: 470441 + timestamp: 1774284032397 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda sha256: dd36cd5b6bc1c2988291a6db9fa4eb8acade9b487f6f1da4eaa65a1eebb0a12d md5: a22cc88bf6059c9bcc158c94c9aab5b8 @@ -11227,6 +15184,28 @@ packages: license: LGPL-2.1-or-later size: 454854 timestamp: 1751292618315 +- conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda + sha256: 3d4e6e541e633f6fd22fc2c1d79ad5ec39503dea3ba04fc3e01d5be904ec7cea + md5: 1f1cf3772ba7d4eef989e4679ddf97f7 + depends: + - cairo >=1.18.4,<2.0a0 + - fontconfig >=2.17.1,<3.0a0 + - fonts-conda-ecosystem + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LGPL-2.1-or-later + purls: [] + size: 454919 + timestamp: 1774282149607 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 md5: 97c1ce2fffa1209e7afb432810ec6e12 @@ -11249,6 +15228,7 @@ packages: - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 1222481 timestamp: 1763655398280 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda @@ -11260,6 +15240,7 @@ packages: - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 1166552 timestamp: 1763655534263 - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda @@ -11273,6 +15254,7 @@ packages: - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD + purls: [] size: 995992 timestamp: 1763655708300 - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda @@ -11283,9 +15265,55 @@ packages: - python >=3.9 license: ISC purls: - - pkg:pypi/pexpect?source=hash-mapping - size: 53561 - timestamp: 1733302019362 + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + sha256: 123d8a7c16c88658b4f29e9f115a047598c941708dade74fbaff373a32dbec5e + md5: 76c4757c0ec9d11f969e8eb44899307b + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - python_abi 3.14.* *_cp314 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - lcms2 >=2.18,<3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 1082797 + timestamp: 1775060059882 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda + sha256: 96b26c2657275ffe84ab510edf0865e21999d791485d12794edd4a71b837beb6 + md5: 87d58d103b47c4a8567b3d7666647684 + depends: + - python + - libgcc >=14 + - python 3.14.* *_cp314 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - python_abi 3.14.* *_cp314 + - lcms2 >=2.18,<3.0a0 + - tk >=8.6.13,<8.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.2,<4.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + license: HPND + purls: + - pkg:pypi/pillow?source=hash-mapping + size: 1062080 + timestamp: 1775060067775 - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda sha256: 5f66ea31d62188c266c5a8752119b0cc90a5bf05963f665cf48a33e0ec58d39c md5: 09a970fbf75e8ed1aa633827ded6aa4f @@ -11307,6 +15335,7 @@ packages: - __glibc >=2.17,<3.0.a0 license: MIT license_family: MIT + purls: [] size: 450960 timestamp: 1754665235234 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda @@ -11318,6 +15347,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 357913 timestamp: 1754665583353 - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda @@ -11332,6 +15362,7 @@ packages: - ucrt >=10.0.20348.0 license: MIT license_family: MIT + purls: [] size: 542795 timestamp: 1754665193489 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda @@ -11423,6 +15454,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 8252 timestamp: 1726802366959 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda @@ -11432,6 +15464,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 8342 timestamp: 1726803319942 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda @@ -11453,6 +15486,7 @@ packages: - libstdcxx >=13 license: MIT license_family: MIT + purls: [] size: 118488 timestamp: 1736601364156 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda @@ -11463,6 +15497,7 @@ packages: - libstdcxx >=13 license: MIT license_family: MIT + purls: [] size: 113424 timestamp: 1737355438448 - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda @@ -11481,6 +15516,7 @@ packages: - pulseaudio 17.0 *_3 license: LGPL-2.1-or-later license_family: LGPL + purls: [] size: 750785 timestamp: 1763148198088 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda @@ -11498,6 +15534,7 @@ packages: - pulseaudio 17.0 *_3 license: LGPL-2.1-or-later license_family: LGPL + purls: [] size: 760306 timestamp: 1763148231117 - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda @@ -11533,11 +15570,27 @@ packages: license_family: BSD size: 232875 timestamp: 1755953378112 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda + sha256: 71a9524f44d6ac6304feae71e2bbe8d8ce0816f0be7a0271c15681ad1040965d + md5: e0f4549ccb507d4af8ed5c5345210673 + depends: + - python >=3.8 + - pybind11-global ==3.0.3 *_0 + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11?source=hash-mapping + size: 247963 + timestamp: 1775004608640 - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda sha256: 9e7fe12f727acd2787fb5816b2049cef4604b7a00ad3e408c5e709c298ce8bf1 md5: f0599959a2447c1e544e216bddf393fa license: BSD-3-Clause license_family: BSD + purls: [] size: 14671 timestamp: 1752769938071 - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda @@ -11553,6 +15606,21 @@ packages: license_family: BSD size: 228871 timestamp: 1755953338243 +- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda + sha256: 97a0fbd2a81d95e90d714e5c628fe860b29a3caad53abcfb90add1965ad85bef + md5: 7fdc3e18c14b862ae5f064c1ea8e2636 + depends: + - python >=3.8 + - __unix + - python + constrains: + - pybind11-abi ==11 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pybind11-global?source=hash-mapping + size: 243898 + timestamp: 1775004520432 - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda sha256: 210a7beee6dce5e57d4d4166b6fd93693ede3e213510efa7373103f10c18d057 md5: 0cda5dbfd261b08292fcf16429662b0a @@ -11575,6 +15643,18 @@ packages: license_family: BSD size: 110100 timestamp: 1733195786147 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda + sha256: e27e0473fc6723311a0bd48b89b616fa1b996a2f7a2b555338cbbcfb9c640568 + md5: 9c5491066224083c41b6d5635ed7107b + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=compressed-mapping + size: 55886 + timestamp: 1779293633166 - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda sha256: 03ae7063dd18f070cf28a441dd86ea476c20ff7fc174d8365a476a650a6ae20f md5: c09bb5f9960ff1cd334c5573b5ad79c2 @@ -11605,6 +15685,19 @@ packages: license_family: BSD size: 725938 timestamp: 1770169149613 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda + sha256: 9436a5bdcf63c215a9b4c0bc7be4ba16dae43a714cd15c2133ca851c588279ac + md5: 85911d1b0c7ffe28189b6d461915ad9c + depends: + - ffmpeg >=4.0.0 + - freetype + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyglet?source=hash-mapping + size: 728286 + timestamp: 1775384075243 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a md5: 6b6ece66ebcae2d5f326c77ef2c5a066 @@ -11622,7 +15715,7 @@ packages: license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/pygments?source=compressed-mapping + - pkg:pypi/pygments?source=hash-mapping size: 893031 timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda @@ -11683,6 +15776,27 @@ packages: - pkg:pypi/pytest?source=hash-mapping size: 299581 timestamp: 1765062031645 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 + md5: 64c98a12c4e23eb238bf66bbecafdf3c + depends: + - colorama + - pygments >=2.7.2 + - python >=3.10 + - iniconfig >=1.0.1 + - packaging >=22 + - pluggy >=1.5,<2 + - tomli >=1 + - exceptiongroup >=1 + - python + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=compressed-mapping + size: 306724 + timestamp: 1782127176429 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda sha256: 2f2229415a6e5387c1faaedf442ea8c07471cb2bf5ad1007b9cfb83ea85ca29a md5: 0e7294ed4af8b833fcd2c101d647c3da @@ -11754,6 +15868,34 @@ packages: size: 36702440 timestamp: 1770675584356 python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + build_number: 100 + sha256: 6d28ac2b061179deb434d3d57afa98ffd20ec3c5d44ab8048a1ca33424b22d38 + md5: 0b9b2f83b5b600e1ac38becde8d0dd44 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + size: 36717183 + timestamp: 1781255094700 + python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda build_number: 101 sha256: 87e9dff5646aba87cecfbc08789634c855871a7325169299d749040b0923a356 @@ -11781,6 +15923,33 @@ packages: size: 37305578 timestamp: 1770674395875 python_site_packages_path: lib/python3.14/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + build_number: 100 + sha256: dd56fd95db3cb49a69fbe41df80afc8bd5214daa829bcd3930de80f0408ba5eb + md5: 416c74941d13d9f2b9e68b1a900f7f50 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + size: 34900936 + timestamp: 1781254861576 + python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda build_number: 101 sha256: 3f99d83bfd95b9bdae64a42a1e4bf5131dc20b724be5ac8a9a7e1ac2c0f006d7 @@ -11806,6 +15975,31 @@ packages: size: 18273230 timestamp: 1770675442998 python_site_packages_path: Lib/site-packages +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + build_number: 100 + sha256: f1acb89cb1a6bec9a94ae9f8e7411839de009cd64d3ac6a6aec4f3d8a481099a + md5: 8333e3ca6f8d1ebcd30b678dd53f0a25 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.8.1,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.3,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 + - python_abi 3.14.* *_cp314 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - zstd >=1.5.7,<1.6.0a0 + license: Python-2.0 + purls: [] + size: 18481352 + timestamp: 1781256034828 + python_site_packages_path: Lib/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 md5: 5b8d21249ff20967101ffa321cab24e8 @@ -11911,6 +16105,67 @@ packages: license_family: BSD size: 25484211 timestamp: 1772227839293 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.1-cuda130_mkl_py314_h5d99997_300.conda + sha256: dabbecc8dcf3af4718a4c5a80a5d44f280811873f27daa4b041f3ec20d8f533c + md5: b25f00231badfc906d431c515ce7ecc6 + depends: + - __cuda + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - cuda-cudart >=13.0.96,<14.0a0 + - cuda-cupti >=13.0.85,<14.0a0 + - cuda-nvrtc >=13.0.88,<14.0a0 + - cuda-nvtx >=13.0.85,<14.0a0 + - cuda-version >=13.0,<14 + - filelock + - fmt >=12.1.0,<12.2.0a0 + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libblas * *mkl + - libcblas >=3.11.0,<4.0a0 + - libcublas >=13.1.1.3,<14.0a0 + - libcudnn >=9.23.1.3,<10.0a0 + - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcufft >=12.0.0.61,<13.0a0 + - libcufile >=1.15.1.6,<2.0a0 + - libcurand >=10.4.0.35,<11.0a0 + - libcusolver >=12.0.4.66,<13.0a0 + - libcusparse >=12.6.3.3,<13.0a0 + - libgcc >=14 + - libmagma >=2.10.0,<2.10.1.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libtorch 2.12.1 cuda130_mkl_h5535f43_300 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - llvm-openmp >=22.1.8 + - mkl >=2026.0.0,<2027.0a0 + - nccl >=2.30.7.1,<3.0a0 + - networkx + - numpy >=1.23,<3 + - onednn >=3.12,<4.0a0 + - optree >=0.13.0 + - pybind11 + - pybind11-abi 11 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - setuptools <82 + - sleef >=3.9.0,<4.0a0 + - sympy >=1.13.3 + - triton 3.7.1 + - typing_extensions >=4.10.0 + constrains: + - pytorch-gpu 2.12.1 + - pytorch-cpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 26990927 + timestamp: 1781843342171 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h7cb4a1c_203.conda sha256: 70b45b24d9591f943ff3a5ffff9419af85293e318a5f001be41cd9538d4e21c9 md5: eec5f372504eec64c324446bbfc8442a @@ -11972,6 +16227,69 @@ packages: license_family: BSD size: 24872224 timestamp: 1772302448327 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.12.1-cuda130_generic_py314_h1da07bd_200.conda + sha256: 46688459ca322948021c689eff157a2f87d0235c08d49f086fbf3dda0b8870d0 + md5: 1736ee7eb6b9e5a82dc025b3a013a6e2 + depends: + - __cuda + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex * *_llvm + - _openmp_mutex >=4.5 + - arm-variant * sbsa + - cuda-cudart >=13.0.96,<14.0a0 + - cuda-cupti >=13.0.85,<14.0a0 + - cuda-nvrtc >=13.0.88,<14.0a0 + - cuda-nvtx >=13.0.85,<14.0a0 + - cuda-version >=13.0,<14 + - filelock + - fmt >=12.1.0,<12.2.0a0 + - fsspec + - jinja2 + - libabseil * cxx17* + - libabseil >=20260526.0,<20260527.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcublas >=13.1.1.3,<14.0a0 + - libcudnn >=9.23.1.3,<10.0a0 + - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcufft >=12.0.0.61,<13.0a0 + - libcufile >=1.15.1.6,<2.0a0 + - libcurand >=10.4.0.35,<11.0a0 + - libcusolver >=12.0.4.66,<13.0a0 + - libcusparse >=12.6.3.3,<13.0a0 + - libgcc >=14 + - liblapack >=3.9.0,<4.0a0 + - libmagma >=2.10.0,<2.10.1.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libtorch 2.12.1 cuda130_generic_h4328193_200 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - llvm-openmp >=22.1.8 + - nccl >=2.30.7.1,<3.0a0 + - networkx + - nomkl + - numpy >=1.23,<3 + - onednn >=3.12,<4.0a0 + - optree >=0.13.0 + - pybind11 + - pybind11-abi 11 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + - setuptools <82 + - sleef >=3.9.0,<4.0a0 + - sympy >=1.13.3 + - triton 3.7.1 + - typing_extensions >=4.10.0 + constrains: + - pytorch-gpu 2.12.1 + - pytorch-cpu <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/torch?source=hash-mapping + size: 26781142 + timestamp: 1781843840773 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.10.0-cuda129_mkl_h0d04637_303.conda sha256: 9807474ce5bbbf81e7a92dd724f38f0dffcfefe5494619c2e94f2df469553bf5 md5: 1050dc8cf80cd0a9e63f361c12ee0e82 @@ -11981,6 +16299,16 @@ packages: license_family: BSD size: 53576 timestamp: 1772317256452 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.1-cuda129_mkl_h0d04637_300.conda + sha256: 6962557638794695e9368fec8358913138de6ac42263f4106b0b0d289aa8c90f + md5: e0e4cda52c574ebc52a1433de2f64b42 + depends: + - pytorch 2.12.1 cuda*_mkl*300 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 55687 + timestamp: 1781849857048 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda130_generic_h63a1e35_203.conda sha256: 98c965bf49b087129af7ac9df6c218dbd5c9b9cd1d63d9f19af7b5cb8031a41c md5: 0f82b7f7e338cd8d5b04b9b29c9db41f @@ -11991,6 +16319,17 @@ packages: license_family: BSD size: 53542 timestamp: 1772302593139 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.12.1-cuda129_generic_hda344be_200.conda + sha256: 0c149b792c00a17accbc4f3b944090a95e95e02f9a7a93dc81f5775f4ed20b9d + md5: be94b3604dab4bba2c92d71aaf10d5c3 + depends: + - arm-variant * sbsa + - pytorch 2.12.1 cuda*_generic*200 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 55745 + timestamp: 1781849755104 - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda sha256: 6918a8067f296f3c65d43e84558170c9e6c3f4dd735cfe041af41a7fdba7b171 md5: 2d7b7ba21e8a8ced0eca553d4d53f773 @@ -12123,6 +16462,21 @@ packages: purls: [] size: 1268666 timestamp: 1769154883613 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda + sha256: f0931894c751b22be09d7c976343a2957a14a59cfe0db04d916d1b93bd66ffcf + md5: da47d3251c0f0d16b2801afe5a77b532 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - libstdcxx >=14 + - libsystemd0 >=257.13 + - libudev1 >=257.13 + license: Linux-OpenIB + license_family: BSD + purls: [] + size: 1281605 + timestamp: 1778528449130 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda sha256: 1c69fab2e833080d48f24d5ac06ea6745c470a8ef779d526bd1edd846184da7e md5: 58f1eb9b507e3e098091840c6f1f9c11 @@ -12137,6 +16491,20 @@ packages: purls: [] size: 1341616 timestamp: 1769154919140 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda + sha256: 89dc4066bf0a2ee8e0cdeb6b6e8884c2c36c9a82855a438a0720ee59297fae3e + md5: 94e99208cc8828d5953fac098814a0e9 + depends: + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - libstdcxx >=14 + - libsystemd0 >=257.13 + - libudev1 >=257.13 + license: Linux-OpenIB + license_family: BSD + purls: [] + size: 1351719 + timestamp: 1778528506759 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec @@ -12373,6 +16741,7 @@ packages: - sdl3 >=3.2.22,<4.0a0 - libegl >=1.7.0,<2.0a0 license: Zlib + purls: [] size: 589145 timestamp: 1757842881 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda @@ -12385,6 +16754,7 @@ packages: - libgl >=1.7.0,<2.0a0 - libegl >=1.7.0,<2.0a0 license: Zlib + purls: [] size: 597756 timestamp: 1757842928996 - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda @@ -12399,8 +16769,39 @@ packages: - ucrt >=10.0.20348.0 - sdl3 >=3.2.22,<4.0a0 license: Zlib + purls: [] size: 572101 timestamp: 1757842925694 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.10-hdeec2a5_0.conda + sha256: 04fa7dab2b8f688e3fc4b7ae4522fd3935fb0601e3329cda8b40d63c60d6cc05 + md5: 845c0b154836c034f361668bec2a4f20 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libusb >=1.0.29,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + - liburing >=2.14,<2.15.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - dbus >=1.16.2,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + - libudev1 >=257.13 + license: Zlib + purls: [] + size: 2148830 + timestamp: 1780262823658 - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda sha256: 64b982664550e01c25f8f09333c0ee54d4764a80fe8636b8aaf881fe6e8a0dbe md5: 88a69db027a8ff59dab972a09d69a1ab @@ -12428,8 +16829,37 @@ packages: - xorg-libxi >=1.8.2,<2.0a0 - wayland >=1.24.0,<2.0a0 license: Zlib - size: 2138749 - timestamp: 1771668185803 + size: 2138749 + timestamp: 1771668185803 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.10-had2c13b_0.conda + sha256: 8fe249e71c077a09f94f49256a8738a2ef22bb018f119194ece94361721dff65 + md5: 90e79fd7ec05af2fb5424cd84fd70d20 + depends: + - libstdcxx >=14 + - libgcc >=14 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - libusb >=1.0.29,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - libunwind >=1.8.3,<1.9.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - libudev1 >=257.13 + - xorg-libxfixes >=6.0.2,<7.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - liburing >=2.14,<2.15.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - dbus >=1.16.2,<2.0a0 + license: Zlib + purls: [] + size: 2144308 + timestamp: 1780262838628 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda sha256: 17aad2e3439d6d778bf995134f37e442a8420adc740457f43d647d4dbf0b10fe md5: c667298eebd2296ace8cb07dbbba95c0 @@ -12458,6 +16888,19 @@ packages: license: Zlib size: 2136476 timestamp: 1771668207211 +- conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.10-h5112557_0.conda + sha256: 0331417611907f1891c1c8b1c52fed48e337157a6e2d6a893ed352792f8f7ea0 + md5: 82adb3bed17cc9189d81ca90b41c77b9 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libusb >=1.0.29,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + license: Zlib + purls: [] + size: 1677765 + timestamp: 1780262836463 - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.2-h5112557_0.conda sha256: a4677774a9d542c6f4bac8779a2d7105748d38d8b7d56c8d02f36d14fba471b9 md5: a0256884d35489e520360267e67ce3fc @@ -12470,6 +16913,17 @@ packages: license: Zlib size: 1669623 timestamp: 1771668231217 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda + sha256: 6ecf738d5590bf228f09c4ecd1ea91d811f8e0bd9acdef341bc4d6c36beb13a3 + md5: d629a398d7bf872f9ed7b27ab959de15 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=hash-mapping + size: 676888 + timestamp: 1770456470072 - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 md5: 8e194e7b992f99a5015edbd4ebd38efd @@ -12492,6 +16946,20 @@ packages: license_family: Apache size: 113513 timestamp: 1770208767759 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + sha256: c6e3280867e54c97996a4fedda0ab72c92d48d1d69258bddf910130df72c169d + md5: 6438976979721e2f60ec47327d8d38df + depends: + - __glibc >=2.17,<3.0.a0 + - glslang >=16,<17.0a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 113684 + timestamp: 1777360595361 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda sha256: bf3f47847832e33acbcb7a1aba948f3b574979ad2a91f2ebdc9fc685c09433db md5: 8268bdcd82d8f9abcb7f0fd6a9568ba4 @@ -12504,6 +16972,19 @@ packages: license_family: Apache size: 115498 timestamp: 1770208786806 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + sha256: 487c021f4f10ae963e9192c9bbc0d3bba8f11cb3a2bb91fd351e4ea3e1ebc109 + md5: 9a389f225e6d2a8cc1e425c128caffe8 + depends: + - glslang >=16,<17.0a0 + - libgcc >=14 + - libstdcxx >=14 + - spirv-tools >=2026,<2027.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 115991 + timestamp: 1777360628740 - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-h8fa7867_1.conda sha256: b2f6e199df47ca314294ad393818d6b499fd544703abcede0f19007b8f8f10e4 md5: 04d62bc008ee442843e2f24f603ea1a6 @@ -12517,6 +16998,20 @@ packages: license_family: Apache size: 1558909 timestamp: 1770208850155 +- conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + sha256: 3a4edc274c947d34258af01886d9ca301098fe037dacd91ccd5f5291dda5ca0b + md5: dd6d0d119b1ca747af3ba964eaa3c565 + depends: + - glslang >=16,<17.0a0 + - spirv-tools >=2026,<2027.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 1559352 + timestamp: 1777360694042 - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -12538,6 +17033,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: BSL-1.0 + purls: [] size: 1951720 timestamp: 1756274576844 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sleef-3.9.0-h5bb93e2_0.conda @@ -12548,6 +17044,7 @@ packages: - libgcc >=14 - libstdcxx >=14 license: BSL-1.0 + purls: [] size: 1190849 timestamp: 1756276271706 - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda @@ -12560,6 +17057,7 @@ packages: - libgcc >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 45829 timestamp: 1762948049098 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda @@ -12571,6 +17069,7 @@ packages: - libgcc >=14 license: BSD-3-Clause license_family: BSD + purls: [] size: 47096 timestamp: 1762948094646 - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda @@ -12800,6 +17299,20 @@ packages: license_family: APACHE size: 2296977 timestamp: 1770089626195 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + sha256: 309d1a3317e91a03611bc960fc807cf2c0c5baacbfddea0f5636438a76c52256 + md5: 0c2b1d811632f1f4aa923450a002ff4f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2392190 + timestamp: 1780139567779 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda sha256: 841a7df4b73a13a148410e677b1bf07ed81bd181cc686278d64d65e033f4a06a md5: ad8208c6618a543687d754dc57876091 @@ -12812,6 +17325,19 @@ packages: license_family: APACHE size: 2255599 timestamp: 1770089690097 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + sha256: fcd1bb3c246ffc0beee0c66d1f240610288c81286041190b42402435408b5cc5 + md5: c82bb7d70fffe04afe74d55542af1d41 + depends: + - libgcc >=14 + - libstdcxx >=14 + constrains: + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 2290233 + timestamp: 1780139661664 - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.1-h49e36cd_0.conda sha256: 9976eeaf650d43833c110447ba264a72f470928d8a8fa5d1cfbadcd2a276184c md5: bf5a4eb05c8b38dbc4e32ce17ab36389 @@ -12825,6 +17351,20 @@ packages: license_family: APACHE size: 13881533 timestamp: 1770089875437 +- conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda + sha256: 256818df74531014639af4cd0791a2a2d238bef74b593db92baeb3c881d89ef2 + md5: 64190192873306d90833d53a820311b8 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + constrains: + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 14305012 + timestamp: 1780140089597 - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.49-py314h0f05182_0.conda sha256: 85b8d29abab6896abc18956a6e6cff3cba939b63440039be8471f5ca51096686 md5: 40330dd2ec87f319b1c4dffe0db4f4e7 @@ -12896,6 +17436,7 @@ packages: - libstdcxx >=14 license: BSD-2-Clause license_family: BSD + purls: [] size: 2619743 timestamp: 1769664536467 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.0.1-hfae3067_0.conda @@ -12906,6 +17447,7 @@ packages: - libstdcxx >=14 license: BSD-2-Clause license_family: BSD + purls: [] size: 2042800 timestamp: 1769668627820 - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda @@ -12917,6 +17459,7 @@ packages: - vc14_runtime >=14.44.35208 license: BSD-2-Clause license_family: BSD + purls: [] size: 1808810 timestamp: 1769664619287 - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda @@ -12930,6 +17473,8 @@ packages: - python >=3.10 license: BSD-3-Clause license_family: BSD + purls: + - pkg:pypi/sympy?source=hash-mapping size: 4661767 timestamp: 1771952371059 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda @@ -12941,6 +17486,7 @@ packages: - tzdata license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later license_family: GPL + purls: [] size: 24008591 timestamp: 1765578833462 - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda @@ -12952,6 +17498,7 @@ packages: - tzdata license: LGPL-2.0-or-later AND LGPL-2.0-or-later WITH exceptions AND GPL-2.0-or-later license_family: GPL + purls: [] size: 23644746 timestamp: 1765578629426 - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda @@ -12978,6 +17525,19 @@ packages: license_family: APACHE size: 181329 timestamp: 1767886632911 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + sha256: 30cb9355c2fefc20ff1a3d6566b9714d5614086a2524c07721fc344eb20515ae + md5: 7073b15f9364ebc118998601ac6ca6a6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libhwloc >=2.13.0,<2.13.1.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 182331 + timestamp: 1778673758649 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-hfefdfc9_2.conda sha256: 2e875ba342c2cde6301b088cd6471f67e44d961bd292abcdfa6ba3fc32506935 md5: 4d424acd246a5ba42512c097139ed0a0 @@ -12989,6 +17549,18 @@ packages: license_family: APACHE size: 144746 timestamp: 1767888618836 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + sha256: 7ed4e93fad3707aa1686c5be286604c63aad33c9765a0d53fab7adbd179510b3 + md5: 0bc302bd45e5f744a672eb4f4a930398 + depends: + - libgcc >=14 + - libhwloc >=2.13.0,<2.13.1.0a0 + - libstdcxx >=14 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 145425 + timestamp: 1778675412470 - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9 md5: 0f9817ffbe25f9e69ceba5ea70c52606 @@ -13002,6 +17574,19 @@ packages: purls: [] size: 155869 timestamp: 1767886839029 +- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + sha256: 8a4053839b8e997a5965e2dff7d6cf3c77be62d82c0e48c8a04a5ed2d2e73035 + md5: 8ee01a693aecff5432069eaaf1183c45 + depends: + - libhwloc >=2.13.0,<2.13.1.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: APACHE + purls: [] + size: 156515 + timestamp: 1778673901757 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac md5: cffd3bdd58090148f4cfcd831f4b26ab @@ -13060,7 +17645,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/tomli?source=compressed-mapping + - pkg:pypi/tomli?source=hash-mapping size: 21561 timestamp: 1774492402955 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py314h5bd0f2a_0.conda @@ -13138,6 +17723,30 @@ packages: license_family: MIT size: 236152104 timestamp: 1771627549811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.1-cuda130py314h1cdc6f0_1.conda + sha256: c526abff27dd48435fe15019c4fec3c8a31c0435ea1d1f9fb5a8145cdc4319f0 + md5: 13491b40def8e902433945de06b88b85 + depends: + - python + - setuptools + - cuda-nvcc-tools + - cuda-cuobjdump + - cuda-cudart + - cuda-cupti + - libstdcxx >=14 + - libgcc >=14 + - cuda-version >=13.0,<14 + - __glibc >=2.28,<3.0.a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - cuda-cupti >=13.0.85,<14.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/triton?source=hash-mapping + size: 40376689 + timestamp: 1781881965775 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_1.conda sha256: 7a5e51bea6dd90c2d59fcbf6b06f722289409ff34eeaece2362b0a1429b6c84f md5: c1e928be7f75d193cb83923f60ebc07e @@ -13162,6 +17771,31 @@ packages: license_family: MIT size: 244688202 timestamp: 1771627574163 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.7.1-cuda130py314ha788bc0_1.conda + sha256: 29a6a5028fd2d99a35886b268045da54d27b9b15b30b96cf4f351d4b5b43c2b0 + md5: aaee2741e58071208ce075fd1f89e4e9 + depends: + - python + - setuptools + - cuda-nvcc-tools + - cuda-cuobjdump + - cuda-cudart + - cuda-cupti + - cuda-version >=13.0,<14 + - arm-variant * sbsa + - __glibc >=2.28,<3.0.a0 + - libstdcxx >=14 + - libgcc >=14 + - cuda-cupti >=13.0.85,<14.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.2,<2.0a0 + - python_abi 3.14.* *_cp314 + license: MIT + license_family: MIT + purls: + - pkg:pypi/triton?source=hash-mapping + size: 47202278 + timestamp: 1781881972923 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -13241,6 +17875,18 @@ packages: purls: [] size: 19356 timestamp: 1767320221521 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + sha256: 17693b60cb54f80c60275f003f3bfc1b128af56dbfd65c4fae37c64eeb755ce1 + md5: 2eacea63f545b97342da520df6854276 + depends: + - vc14_runtime >=14.51.36231 + track_features: + - vc14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20362 + timestamp: 1781320968457 - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda sha256: 02732f953292cce179de9b633e74928037fa3741eb5ef91c3f8bae4f761d32a5 md5: 37eb311485d2d8b2c419449582046a42 @@ -13254,6 +17900,19 @@ packages: purls: [] size: 683233 timestamp: 1767320219644 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + sha256: 8153ed849c92e891eacac0f2f8d7ecb79f9b5fd7f7917fbb896f252a60a40390 + md5: 06a5bf5a1ca16cce0df6eaa91fc42bc2 + depends: + - ucrt >=10.0.20348.0 + - vcomp14 14.51.36231 h1b9f54f_39 + constrains: + - vs2015_runtime 14.51.36231.* *_39 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 737434 + timestamp: 1781320964561 - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda sha256: 878d5d10318b119bd98ed3ed874bd467acbe21996e1d81597a1dbf8030ea0ce6 md5: 242d9f25d2ae60c76b38a5e42858e51d @@ -13266,6 +17925,18 @@ packages: purls: [] size: 115235 timestamp: 1767320173250 +- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + sha256: 07fb14713c4bc62e2533a2e23a363abfb0e65650681fba0ae4c840e2219350f3 + md5: 8b53a83fda40ec679e4d63fa32fae989 + depends: + - ucrt >=10.0.20348.0 + constrains: + - vs2015_runtime 14.51.36231.* *_39 + license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime + license_family: Proprietary + purls: [] + size: 120684 + timestamp: 1781320948530 - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda sha256: 63ff4ec6e5833f768d402f5e95e03497ce211ded5b6f492e660e2bfc726ad24d md5: f276d1de4553e8fca1dfb6988551ebb4 @@ -13275,6 +17946,16 @@ packages: license_family: BSD size: 19347 timestamp: 1767320221943 +- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda + sha256: 6de6c2cf008fc2dce61060b583f2d8494c83883106952b201381b6b0505f03d7 + md5: 2ccc63d7b7d066a814ed9f99072832d7 + depends: + - vc14_runtime >=14.51.36231 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 20355 + timestamp: 1781320968804 - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda sha256: 3aa04ae8e9521d9b56b562376d944c3e52b69f9d2a0667f77b8953464822e125 md5: 035da2e4f5770f036ff704fa17aace24 @@ -13288,6 +17969,20 @@ packages: license_family: MIT size: 329779 timestamp: 1761174273487 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda + sha256: ea374d57a8fcda281a0a89af0ee49a2c2e99cc4ac97cf2e2db7064e74e764bdb + md5: 996583ea9c796e5b915f7d7580b51ea6 + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 334139 + timestamp: 1773959575393 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda sha256: d94af8f287db764327ac7b48f6c0cd5c40da6ea2606afd34ac30671b7c85d8ee md5: f6966cb1f000c230359ae98c29e37d87 @@ -13300,6 +17995,19 @@ packages: license_family: MIT size: 331480 timestamp: 1761174368396 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda + sha256: 3cc479df517b0ce110835a1256f91ca568581cb6dfe1c53a0786f0a226039a45 + md5: 0a7a9548726f98d5869fd4c43e110f0f + depends: + - libexpat >=2.7.4,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 335260 + timestamp: 1773959583826 - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda sha256: 9ab2c12053ea8984228dd573114ffc6d63df42c501d59fda3bf3aeb1eaa1d23e md5: 7da1571f560d4ba3343f7f4c48a79c76 @@ -13307,6 +18015,14 @@ packages: license_family: MIT size: 140476 timestamp: 1765821981856 +- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda + sha256: 04ce686cd187d379344f9b2be7b4da5f431b265dc0944a6b764fab9da9171948 + md5: 0839a3421140d4a9ba93fb988698fc00 + license: MIT + license_family: MIT + purls: [] + size: 147954 + timestamp: 1780946721169 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa md5: c3197f8c0d5b955c904616b716aca093 @@ -13347,6 +18063,7 @@ packages: - libgcc-ng >=12 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 897548 timestamp: 1660323080555 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 @@ -13356,6 +18073,7 @@ packages: - libgcc-ng >=12 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 1000661 timestamp: 1660324722559 - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 @@ -13366,6 +18084,7 @@ packages: - vs2015_runtime >=14.16.27033 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 1041889 timestamp: 1660323726084 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 @@ -13376,6 +18095,7 @@ packages: - libstdcxx-ng >=10.3.0 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 3357188 timestamp: 1646609687141 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 @@ -13386,6 +18106,7 @@ packages: - libstdcxx-ng >=10.3.0 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 1018181 timestamp: 1646610147365 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 @@ -13396,6 +18117,7 @@ packages: - vs2015_runtime >=14.16.27033 license: GPL-2.0-or-later license_family: GPL + purls: [] size: 5517425 timestamp: 1646611941216 - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda @@ -13409,6 +18131,18 @@ packages: license_family: MIT size: 399291 timestamp: 1772021302485 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + sha256: 3b04afd5d1a65d2d27ac2d49a63b01ab8bcd875776779ec63e337370ed38afdc + md5: b233b41be0bf210989d57160ed39b394 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 441670 + timestamp: 1782027360439 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda sha256: ec7ff9dffbd41faa31a30fa0724699f05bca000d57c745a195ecdb56888a8605 md5: 4ac707a4279972357712af099cd1ae50 @@ -13419,6 +18153,17 @@ packages: license_family: MIT size: 399629 timestamp: 1772021320967 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda + sha256: 96078068df25ddccc60958be740e6fa99efb1e0fa2dae2f84e775201bf84d70c + md5: 3dbc6d9e1f8a8768e7ef9f57585a43ca + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 442725 + timestamp: 1782027381059 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 @@ -13427,6 +18172,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 58628 timestamp: 1734227592886 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda @@ -13436,6 +18182,7 @@ packages: - libgcc >=13 license: MIT license_family: MIT + purls: [] size: 60433 timestamp: 1734229908988 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda @@ -13448,6 +18195,7 @@ packages: - xorg-libice >=1.1.2,<2.0a0 license: MIT license_family: MIT + purls: [] size: 27590 timestamp: 1741896361728 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda @@ -13459,6 +18207,7 @@ packages: - xorg-libice >=1.1.2,<2.0a0 license: MIT license_family: MIT + purls: [] size: 28701 timestamp: 1741897678254 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda @@ -13470,6 +18219,7 @@ packages: - libxcb >=1.17.0,<2.0a0 license: MIT license_family: MIT + purls: [] size: 839652 timestamp: 1770819209719 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda @@ -13480,6 +18230,7 @@ packages: - libxcb >=1.17.0,<2.0a0 license: MIT license_family: MIT + purls: [] size: 869058 timestamp: 1770819244991 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda @@ -13490,6 +18241,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 15321 timestamp: 1762976464266 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda @@ -13499,6 +18251,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 16317 timestamp: 1762977521691 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda @@ -13512,6 +18265,7 @@ packages: - xorg-libxrender >=0.9.11,<0.10.0a0 license: MIT license_family: MIT + purls: [] size: 32533 timestamp: 1730908305254 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda @@ -13524,6 +18278,7 @@ packages: - xorg-libxrender >=0.9.11,<0.10.0a0 license: MIT license_family: MIT + purls: [] size: 34596 timestamp: 1730908388714 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda @@ -13534,6 +18289,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 20591 timestamp: 1762976546182 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda @@ -13543,6 +18299,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 21039 timestamp: 1762979038025 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda @@ -13554,6 +18311,7 @@ packages: - xorg-libx11 >=1.8.12,<2.0a0 license: MIT license_family: MIT + purls: [] size: 50326 timestamp: 1769445253162 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda @@ -13564,6 +18322,7 @@ packages: - xorg-libx11 >=1.8.12,<2.0a0 license: MIT license_family: MIT + purls: [] size: 52409 timestamp: 1769446753771 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda @@ -13575,6 +18334,7 @@ packages: - xorg-libx11 >=1.8.12,<2.0a0 license: MIT license_family: MIT + purls: [] size: 20071 timestamp: 1759282564045 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda @@ -13585,6 +18345,7 @@ packages: - xorg-libx11 >=1.8.12,<2.0a0 license: MIT license_family: MIT + purls: [] size: 20704 timestamp: 1759284028146 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda @@ -13600,6 +18361,20 @@ packages: license_family: MIT size: 47179 timestamp: 1727799254088 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + sha256: 495f99c8eacfa4ae2d8fed2a7f2105777af89acdc204df145d2bbbc380ac631b + md5: adba2e334082bb218db806d4c12277c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 47717 + timestamp: 1779111857071 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda sha256: 7b587407ecb9ccd2bbaf0fb94c5dbdde4d015346df063e9502dc0ce2b682fb5e md5: eeee3bdb31c6acde2b81ad1b8c287087 @@ -13612,6 +18387,19 @@ packages: license_family: MIT size: 48197 timestamp: 1727801059062 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda + sha256: 0c1c7b39763469cfe0e9c6d0f9a39415321f477710719f4c5d63c61ea270271c + md5: f8ad5777ecc217d383a722598dbeb1ac + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 49292 + timestamp: 1779113229775 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 md5: e192019153591938acf7322b6459d36e @@ -13623,6 +18411,7 @@ packages: - xorg-libxrender >=0.9.12,<0.10.0a0 license: MIT license_family: MIT + purls: [] size: 30456 timestamp: 1769445263457 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda @@ -13635,6 +18424,7 @@ packages: - xorg-libxrender >=0.9.12,<0.10.0a0 license: MIT license_family: MIT + purls: [] size: 31122 timestamp: 1769445286951 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda @@ -13646,6 +18436,7 @@ packages: - xorg-libx11 >=1.8.10,<2.0a0 license: MIT license_family: MIT + purls: [] size: 33005 timestamp: 1734229037766 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda @@ -13656,6 +18447,7 @@ packages: - xorg-libx11 >=1.8.10,<2.0a0 license: MIT license_family: MIT + purls: [] size: 33649 timestamp: 1734229123157 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda @@ -13668,6 +18460,7 @@ packages: - xorg-libxext >=1.3.6,<2.0a0 license: MIT license_family: MIT + purls: [] size: 14412 timestamp: 1727899730073 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda @@ -13679,6 +18472,7 @@ packages: - xorg-libxext >=1.3.6,<2.0a0 license: MIT license_family: MIT + purls: [] size: 15720 timestamp: 1750007336692 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda @@ -13692,6 +18486,7 @@ packages: - xorg-libxi >=1.7.10,<2.0a0 license: MIT license_family: MIT + purls: [] size: 32808 timestamp: 1727964811275 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda @@ -13704,6 +18499,7 @@ packages: - xorg-libxi >=1.7.10,<2.0a0 license: MIT license_family: MIT + purls: [] size: 33786 timestamp: 1727964907993 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda @@ -13714,6 +18510,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 570010 timestamp: 1766154256151 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda @@ -13723,6 +18520,7 @@ packages: - libgcc >=14 license: MIT license_family: MIT + purls: [] size: 569539 timestamp: 1766155414260 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda @@ -13814,6 +18612,42 @@ packages: - pkg:pypi/zipp?source=hash-mapping size: 24194 timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + sha256: ef408f85f664a4b9c9dac3cb2e36154d9baa15a88984ea800e11060e0f2394a1 + md5: 5187ecf958be3c39110fe691cbd6873e + depends: + - libzlib 1.3.2 hfd05255_2 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + purls: [] + size: 850351 + timestamp: 1774072891049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + purls: [] + size: 122618 + timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda + sha256: 638a3a41a4fbfed52d3c60c8ef5a3693b3f12a5b1a3f58fa29f5698d0a0702e2 + md5: f731af71c723065d91b4c01bb822641b + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + purls: [] + size: 121046 + timestamp: 1770167944449 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index d2e72807af7..d4e97b5aede 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -24,31 +24,37 @@ cloudpickle = "*" psutil = "*" pyglet = "*" -[feature.examples.dependencies] +[feature.local-deps.dependencies] +cuda-bindings = { path = "../cuda_bindings" } +cuda-pathfinder = { path = "../cuda_pathfinder" } + +[feature.samples.dependencies] cuda-core = { path = "." } cffi = "*" pyglet = "*" +pytest = "*" +numpy = "*" -[feature.examples.system-requirements] +[feature.samples.system-requirements] cuda = "13" -[feature.local-deps.dependencies] -cuda-bindings = { path = "../cuda_bindings" } -cuda-pathfinder = { path = "../cuda_pathfinder" } +[feature.samples.pypi-dependencies] +nvtx = "*" -[feature.examples.target.linux.dependencies] +[feature.samples.target.linux.dependencies] cupy = "*" pytorch-gpu = "*" libgl-devel = "*" gxx = "*" +pillow = "*" -[feature.examples.target.linux-64.activation.env] +[feature.samples.target.linux-64.activation.env] CUDA_HOME = "$CONDA_PREFIX/targets/x86_64-linux" -[feature.examples.target.linux-aarch64.activation.env] +[feature.samples.target.linux-aarch64.activation.env] CUDA_HOME = "$CONDA_PREFIX/targets/sbsa-linux" -[feature.examples.target.win-64.activation.env] +[feature.samples.target.win-64.activation.env] CUDA_HOME = "$CONDA_PREFIX/Library" [feature.cython-tests.dependencies] @@ -115,7 +121,7 @@ nvidia-sphinx-theme = "*" make = "*" # We keep both cu12 and cu13 because cuda.core works with either major version. -# The local sibling checkouts are wired into the default/cu13/examples workflows; +# The local sibling checkouts are wired into the default/cu13/samples workflows; # cu12 intentionally solves against published packages instead. [environments] default = { features = [ @@ -125,7 +131,7 @@ default = { features = [ ], solve-group = "default" } cu13 = { features = ["cu13", "test", "cython-tests", "local-deps"], solve-group = "cu13" } cu12 = { features = ["cu12", "test", "cython-tests"], solve-group = "cu12" } -examples = { features = ["cu13", "examples", "local-deps"], solve-group = "examples" } +samples = { features = ["cu13", "samples", "local-deps"], solve-group = "samples" } docs = { features = ["cu13", "docs", "local-deps"], solve-group = "docs" } # TODO: check if these can be extracted from pyproject.toml @@ -227,3 +233,7 @@ cmd = [ "norecursedirs=\"\"", # include cython tests (ignore by default config) ] depends-on = [{ task = "build-cython-tests" }] + +[tasks.test-samples] +cmd = ["pytest", "-rxXs", "-v", "$PIXI_PROJECT_ROOT/../tests/samples"] +default-environment = "samples" diff --git a/pixi.toml b/pixi.toml index f73d299e012..ed78119b47f 100644 --- a/pixi.toml +++ b/pixi.toml @@ -53,6 +53,13 @@ cmd = [ 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_core" -e "$PIXI_ENVIRONMENT_NAME" test', ] +[target.linux.tasks.test-samples] +cmd = [ + "bash", + "-c", + 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_core" test-samples', +] + [target.linux.tasks.test] depends-on = [ { task = "test-pathfinder" }, diff --git a/pytest.ini b/pytest.ini index 9c11c2b5f56..2e025401e29 100644 --- a/pytest.ini +++ b/pytest.ini @@ -6,18 +6,21 @@ addopts = --showlocals norecursedirs = cuda_bindings/examples cuda_core/examples + samples testpaths = cuda_pathfinder/tests cuda_bindings/tests cuda_core/tests tests/integration + tests/samples ci/tools/tests markers = pathfinder: tests for cuda_pathfinder bindings: tests for cuda_bindings core: tests for cuda_core + samples: tests for the standalone samples under ./samples cython: cython tests smoke: meta-level smoke tests flaky: mark test as flaky (provided by pytest-rerunfailures) diff --git a/ruff.toml b/ruff.toml index 210f852cd3e..f087df55872 100644 --- a/ruff.toml +++ b/ruff.toml @@ -108,10 +108,17 @@ inline-quotes = "double" "B028", # no explicit stacklevel in warnings (test code) ] -"**/examples/**" = [ +"samples/**" = [ "T201", # print - "E402", # module-level import not at top of file - "RUF059", # unused unpacked variable + "E402", # module-level import not at top of file (sys.path mutation before import) + "N801", # CUDA naming conventions (CamelCase classes) + "N802", # CUDA naming conventions (camelCase methods) + "N803", # CUDA naming conventions (argument names) + "N806", # non-lowercase variable in function (e.g. d_A, h_blockSums) + "N816", # mixed-case variable in global scope + "N999", # invalid module name (samples/Utilities is a directory, not a module) + "RUF001", # ambiguous unicode in strings (math symbols like ``×`` in shape annotations) + "RUF003", # ambiguous unicode in comments (same as RUF001) ] "**/benchmarks/**" = [ diff --git a/samples/Utilities/README.md b/samples/Utilities/README.md new file mode 100644 index 00000000000..91816a232f4 --- /dev/null +++ b/samples/Utilities/README.md @@ -0,0 +1,134 @@ +# CUDA Python Utilities + +Common utilities for CUDA Python samples using the `cuda.core` API. + +## Overview + +This module provides reusable utility functions for CUDA samples to reduce code duplication. Samples import from `cuda_samples_utils.py` using simple path-based imports (no package structure needed). + +## Installation Requirements + +Install from the Python samples directory: + +```bash +cd /path/to/cuda-samples/Python +pip install -r requirements.txt +``` + +This installs a common CUDA 13 stack (see `python/requirements.txt`): + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=2.3.2) + +## How to Use in Samples + +Import utilities using path-based import: + +```python +import sys +from pathlib import Path + +# Add Utilities directory to path +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +# Use the utility +if verify_array_result(result, expected): + print("Success!") +``` + +## Available Functions + +### Result Verification + +#### `verify_array_result(result, expected, rtol=1e-5, atol=1e-8, verbose=True)` + +Verify computed results match expected values. The helper detects whether both +arguments are NumPy arrays or both are CuPy arrays and uses the matching +library's `allclose` (no unnecessary cross-device transfers). + +**Parameters:** +- `result`: NumPy or CuPy array with computed results +- `expected`: NumPy or CuPy array with expected values (same kind as `result`) +- `rtol`: Relative tolerance (default: 1e-5) +- `atol`: Absolute tolerance (default: 1e-8) +- `verbose`: Print test result (default: True) + +**Returns:** +- `True` if results match within tolerance, `False` otherwise + +**Example:** +```python +expected = a + b +if verify_array_result(c, expected): + print("Computation correct!") +``` + +### Package Check + +#### `check_cuda_requirements()` + +Check if required CUDA packages are available. + +**Returns:** +- `True` if requirements are met, `False` otherwise + +**Example:** +```python +if not check_cuda_requirements(): + sys.exit(1) +``` + +## Design Philosophy + +These utilities focus on common operations that are **not** part of `cuda.core` API: +- Result verification for NumPy or CuPy arrays +- Package requirements checking + +For CUDA operations like device initialization, kernel compilation, and grid size calculations, samples should use `cuda.core` API directly to demonstrate the proper usage patterns. + +## Complete Example + +See `../vectorAdd/vectorAdd.py` for a complete example: + +```python +import sys +from pathlib import Path + +# Import utility +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +import cupy as cp +from cuda.core import Device, Program, ProgramOptions, LaunchConfig, launch + +# Use cuda.core directly for device and kernel operations +device = Device(0) +device.set_current() + +program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") +program = Program(kernel_source, code_type="c++", options=program_options) +module = program.compile("cubin", name_expressions=("kernel_name",)) +kernel = module.get_kernel("kernel_name") + +# Calculate grid size inline +threads_per_block = 256 +blocks_per_grid = (num_elements + threads_per_block - 1) // threads_per_block + +# Launch kernel - pass cupy arrays directly +config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) +launch(stream, config, kernel, a, b, c, cp.int32(num_elements)) + +# Verify results using utility +verify_array_result(c, expected) +``` + +## Benefits + +- **Code Reuse**: Write common functionality once +- **Consistency**: All samples use the same patterns +- **Maintainability**: Bug fixes benefit all samples +- **Transparency**: Samples show cuda.core API usage directly +- **Simplicity**: No complex package structure needed diff --git a/samples/Utilities/__init__.py b/samples/Utilities/__init__.py new file mode 100644 index 00000000000..a84c3bf5b70 --- /dev/null +++ b/samples/Utilities/__init__.py @@ -0,0 +1,47 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +CUDA Python Samples - Utilities + +Common utilities for CUDA Python samples. + +Provides: +- Package requirements checking +- Result verification +""" + +from .cuda_samples_utils import ( + check_cuda_requirements, + verify_array_result, +) + +__version__ = "1.0.0" + +__all__ = [ + "check_cuda_requirements", + "verify_array_result", +] diff --git a/samples/Utilities/cuda_samples_utils.py b/samples/Utilities/cuda_samples_utils.py new file mode 100644 index 00000000000..50b21713fb1 --- /dev/null +++ b/samples/Utilities/cuda_samples_utils.py @@ -0,0 +1,140 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +Common CUDA utilities for Python samples. + +This module provides common utility functions for CUDA samples including: +- Package requirements checking +- Result verification +- GPU device information + +Requirements: +- Python 3.10+ +- CUDA Toolkit 13.0+ (recommended; matches cuda-python 13.x) +- cuda-python >= 13.0.0 +- cuda-core >= 0.6.0 +- cupy-cuda13x >= 13.0.0 +- numpy >= 2.3.2 (when used with samples that install it) +""" + + +def check_cuda_requirements() -> bool: + """ + Check if required CUDA packages are available. + + Returns + ------- + bool + True if requirements are met, False otherwise + """ + try: + import cupy as cp # noqa: F401 + + from cuda.core import Device # noqa: F401 + + return True + except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + return False + + +def verify_array_result(result, expected, rtol: float = 1e-5, atol: float = 1e-8, verbose: bool = True) -> bool: + """ + Verify that computed result matches expected result. + + Automatically detects whether arrays are NumPy or CuPy and uses the + appropriate library without unnecessary data transfers. + + Parameters + ---------- + result : numpy.ndarray or cupy.ndarray + Computed result array. + expected : numpy.ndarray or cupy.ndarray + Expected result array. + rtol : float + Relative tolerance (default: 1e-5) + atol : float + Absolute tolerance (default: 1e-8) + verbose : bool + Whether to print verification result (default: True). + + Returns + ------- + bool + True if results match, False otherwise. + + Raises + ------ + TypeError + If arrays are not both NumPy or both CuPy, or if CuPy is needed + but not available. + """ + import numpy as np + + is_np = isinstance(result, np.ndarray) and isinstance(expected, np.ndarray) + + if is_np: + allclose = np.allclose + abs_ = np.abs + max_ = np.max + else: + import cupy as cp + + is_cp = isinstance(result, cp.ndarray) and isinstance(expected, cp.ndarray) + + if not is_cp: + raise TypeError("verify_array_result expects both arrays to be either numpy.ndarray or cupy.ndarray") + + allclose = cp.allclose + abs_ = cp.abs + max_ = cp.max + + if allclose(result, expected, rtol=rtol, atol=atol): + if verbose: + print("Test PASSED") + return True + else: + max_error = max_(abs_(result - expected)) + if verbose: + print(f"Test FAILED - Max error: {max_error}") + return False + + +def print_gpu_info(device) -> None: + """ + Print GPU device information. + + Parameters + ---------- + device : cuda.core.Device + CUDA device object + """ + print(f"Device: {device.name}") + cc = device.compute_capability + print(f"Compute Capability: {cc.major}.{cc.minor}") diff --git a/samples/binarySearch/README.md b/samples/binarySearch/README.md new file mode 100644 index 00000000000..4bbddcecd63 --- /dev/null +++ b/samples/binarySearch/README.md @@ -0,0 +1,129 @@ +# binarySearch (Python) + +## Description + +This sample demonstrates the parallel binary-search algorithms +exposed by **cuda.compute** (from the `cuda-cccl` package). Given +a sorted `d_data` array and a batch of `d_values` to locate, one +device-wide call returns the insertion index for every value: + +- `cuda.compute.lower_bound` writes, for each value, the lowest index + where it could be inserted into `d_data` without breaking the sort + order. Equivalent to `numpy.searchsorted(..., side="left")`. +- `cuda.compute.upper_bound` is the analogous upper form, equivalent + to `numpy.searchsorted(..., side="right")`. + +The sample runs both algorithms on two curated inputs: one with +distinct elements (where `lower_bound` and `upper_bound` agree on +any value not in the data) and one with duplicates (where they +diverge on present values). Results are verified against +`numpy.searchsorted`. + +## What You'll Learn + +- How to call `cuda.compute.lower_bound` / `upper_bound` with CuPy + arrays +- The semantic difference between `lower_bound` and `upper_bound`, + especially for inputs containing duplicates +- How the output dtype (`np.uintp`) is used for indices + +## Key Libraries + +- [`cuda.compute`](https://nvidia.github.io/cccl/python.html) (from the `cuda-cccl` package) - device algorithms +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - device setup +- `cupy` - device buffers +- `numpy` - host-side reference via `numpy.searchsorted` + +## Key APIs + +### From `cuda.compute` + +- `cuda.compute.lower_bound(d_data, num_items, d_values, num_values, d_out)` +- `cuda.compute.upper_bound(d_data, num_items, d_values, num_values, d_out)` + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 512 MB + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-cccl` (>=1.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +If the CUDA toolkit is not on your `PATH`, set `CUDA_HOME` so that +cuda.compute's JIT path can locate its dependencies: + +```bash +export CUDA_HOME=/usr/local/cuda +``` + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/binarySearch +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-cccl` (>=1.0.0) - ships the `cuda.compute` module +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=1.24.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/binarySearch +python binarySearch.py +``` + +### With custom parameters + +```bash +python binarySearch.py --device 1 +``` + +## Expected Output + +``` +Device: +Compute Capability: + +Case 1: distinct data, mixed queries + data = [1, 3, 5, 7, 9] + values = [0, 3, 4, 10] + lower_bound: got [0, 1, 2, 5] expected [0, 1, 2, 5] OK + upper_bound: got [0, 2, 2, 5] expected [0, 2, 2, 5] OK + +Case 2: duplicates in data + data = [1, 3, 3, 5, 7, 9] + values = [3, 3, 5, 8] + lower_bound: got [1, 1, 3, 5] expected [1, 1, 3, 5] OK + upper_bound: got [3, 3, 4, 5] expected [3, 3, 4, 5] OK + +Done +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `binarySearch.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) diff --git a/samples/binarySearch/binarySearch.py b/samples/binarySearch/binarySearch.py new file mode 100644 index 00000000000..ccd6f488c0c --- /dev/null +++ b/samples/binarySearch/binarySearch.py @@ -0,0 +1,144 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-cccl[cu13]>=1.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=1.24.0"] +# /// + +""" +This sample demonstrates the parallel binary-search algorithms exposed +by cuda.compute (from the cuda-cccl package). Given a sorted +``d_data`` array and a batch of ``d_values`` to locate, cuda.compute: + + - ``cuda.compute.lower_bound(d_data, num_items, d_values, num_values, d_out)`` + writes, for each value, the lowest index where it could be inserted + into d_data without breaking the sort order. Matches + ``numpy.searchsorted(..., side="left")``. + + - ``cuda.compute.upper_bound(d_data, num_items, d_values, num_values, d_out)`` + is the analogous upper form, matching ``side="right"``. + +The sample runs both algorithms on a curated sorted input with +duplicates so the lower/upper distinction is visible, verifies the +results against ``numpy.searchsorted``, and prints both sets of +indices side-by-side. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + import cuda.compute + from cuda.core import Device +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def run_binary_search(h_data: np.ndarray, h_values: np.ndarray) -> bool: + d_data = cp.asarray(h_data) + d_values = cp.asarray(h_values) + + d_lb = cp.empty(len(h_values), dtype=np.uintp) + d_ub = cp.empty(len(h_values), dtype=np.uintp) + + cuda.compute.lower_bound( + d_data=d_data, + num_items=len(d_data), + d_values=d_values, + num_values=len(d_values), + d_out=d_lb, + ) + cuda.compute.upper_bound( + d_data=d_data, + num_items=len(d_data), + d_values=d_values, + num_values=len(d_values), + d_out=d_ub, + ) + + got_lb = cp.asnumpy(d_lb) + got_ub = cp.asnumpy(d_ub) + expected_lb = np.searchsorted(h_data, h_values, side="left").astype(np.uintp) + expected_ub = np.searchsorted(h_data, h_values, side="right").astype(np.uintp) + + ok_lb = np.array_equal(got_lb, expected_lb) + ok_ub = np.array_equal(got_ub, expected_ub) + + print(f" data = {h_data.tolist()}") + print(f" values = {h_values.tolist()}") + print(f" lower_bound: got {got_lb.tolist()} expected {expected_lb.tolist()} {'OK' if ok_lb else 'FAIL'}") + print(f" upper_bound: got {got_ub.tolist()} expected {expected_ub.tolist()} {'OK' if ok_ub else 'FAIL'}") + return ok_lb and ok_ub + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description="Parallel upper_bound / lower_bound via cuda.compute") + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + print() + + ok = True + + # Case 1: values both inside and outside the data range; no duplicates + # in the data. lower_bound and upper_bound agree on values not present. + print("Case 1: distinct data, mixed queries") + h_data1 = np.array([1, 3, 5, 7, 9], dtype=np.int32) + h_values1 = np.array([0, 3, 4, 10], dtype=np.int32) + ok &= run_binary_search(h_data1, h_values1) + print() + + # Case 2: duplicates in the data so lower_bound and upper_bound diverge + # on present values. + print("Case 2: duplicates in data") + h_data2 = np.array([1, 3, 3, 5, 7, 9], dtype=np.int32) + h_values2 = np.array([3, 3, 5, 8], dtype=np.int32) + ok &= run_binary_search(h_data2, h_values2) + + print() + if ok: + print("Done") + return 0 + print("FAILED") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/binarySearch/requirements.txt b/samples/binarySearch/requirements.txt new file mode 100644 index 00000000000..3110a76e934 --- /dev/null +++ b/samples/binarySearch/requirements.txt @@ -0,0 +1,4 @@ +cuda-cccl[cu13]>=1.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=1.24.0 diff --git a/samples/blockwiseSum/README.md b/samples/blockwiseSum/README.md new file mode 100644 index 00000000000..19fcc922770 --- /dev/null +++ b/samples/blockwiseSum/README.md @@ -0,0 +1,102 @@ +# Sample: Block-wise Array Sum (Python) + +## Description + +Demonstrates fundamental CUDA thread cooperation: thread/block indexing, strided loops, and block-wise reduction using shared memory. This sample shows three progressively complex kernel patterns using the **cuda.core API**: + +1. **Simple indexing** - One thread per element +2. **Strided loop** - Each thread processes multiple elements +3. **Block partial sum** - Shared memory reduction within each block + +## What You'll Learn + +- How to calculate global thread ID from block and thread indices +- Strided loop pattern for processing arrays larger than grid size +- Block-level cooperation using shared memory and `__syncthreads()` + +## Key Concepts + +### Thread and Block Indexing + +``` +Global Thread ID = blockIdx.x * blockDim.x + threadIdx.x +Stride = blockDim.x * gridDim.x +``` + +### Strided Loop Pattern + +Each thread processes multiple elements, enabling fixed grid size for arbitrary array lengths: + +```c +for (size_t i = tid; i < N; i += stride) { + output[i] = input[i] * 2.0f; +} +``` + +## Key APIs + +### From `cuda.core`: + +- `Device` - Device management and context +- `Program` - Compile CUDA C++ kernels +- `ProgramOptions` - Kernel compilation options (architecture target) +- `LaunchConfig` - Configure grid/block dimensions and shared memory +- `launch()` - Execute kernel +- `EventOptions` - GPU timing configuration + +### From CuPy: + +- `cp.asarray()` - Transfer data to GPU +- `cp.zeros_like()` - Allocate GPU arrays + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See `requirements.txt` for Python packages + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python blockwiseSum.py +``` + +## Expected Output + +``` +Device: +Compute Capability: sm_XX +Array size: 1,048,576 elements + +Simple indexing: Test PASSED +Strided loop: Test PASSED +Block-wise sum: Test PASSED + +Kernel time: X.XXX ms, Bandwidth: XXX.X GB/s + +Done +``` + +## Files + +- `blockwiseSum.py` - Python implementation with CUDA kernels +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CUDA Shared Memory](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/blockwiseSum/blockwiseSum.py b/samples/blockwiseSum/blockwiseSum.py new file mode 100644 index 00000000000..b61bfa00d1b --- /dev/null +++ b/samples/blockwiseSum/blockwiseSum.py @@ -0,0 +1,256 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +Block-wise Array Sum with Threaded Access + +Demonstrates thread/block indexing, strided loops, and block-wise reduction. + +Key Concepts: + Global Thread ID = blockIdx.x * blockDim.x + threadIdx.x + Stride = blockDim.x * gridDim.x +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +try: + import cupy as cp + import numpy as np + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Install with: pip install -r requirements.txt") + sys.exit(1) + + +KERNELS_CODE: str = r""" +// Each thread processes one element +extern "C" __global__ +void simple_indexing(const float* input, float* output, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + if (tid < N) { + output[tid] = input[tid] * 2.0f; + } +} + +// Each thread processes multiple elements via strided access +extern "C" __global__ +void strided_loop(const float* input, float* output, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)blockDim.x * gridDim.x; + for (size_t i = tid; i < N; i += stride) { + output[i] = input[i] * 2.0f; + } +} + +// Block-wise partial sum with shared memory reduction +extern "C" __global__ +void block_partial_sum(const float* input, float* partial_sums, size_t N) { + extern __shared__ float sdata[]; + + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + unsigned int local_tid = threadIdx.x; + size_t stride = (size_t)blockDim.x * gridDim.x; + + // Each thread accumulates multiple elements (strided) + float sum = 0.0f; + for (size_t i = tid; i < N; i += stride) { + sum += input[i]; + } + sdata[local_tid] = sum; + __syncthreads(); + + // Block-level tree reduction + for (int s = blockDim.x / 2; s > 0; s >>= 1) { + if (local_tid < s) { + sdata[local_tid] += sdata[local_tid + s]; + } + __syncthreads(); + } + + if (local_tid == 0) { + partial_sums[blockIdx.x] = sdata[0]; + } +} +""" + + +def run_sample(num_elements: int = 1024 * 1024, device_id: int = 0) -> bool: + """ + Run block-wise sum demonstration. + + Parameters + ---------- + num_elements : int + Number of array elements + device_id : int + CUDA device ID + + Returns + ------- + bool + True if all tests passed + """ + threads_per_block = 256 + num_blocks = 64 + + device = Device(device_id) + device.set_current() + stream = device.create_stream() + + arch = f"sm_{device.arch}" + print(f"Device: {device.name}") + print(f"Compute Capability: {arch}") + print(f"Array size: {num_elements:,} elements\n") + + try: + # Make CuPy use our stream + cp.cuda.Stream.from_external(stream).use() + + # Compile kernels + program = Program(KERNELS_CODE, code_type="c++", options=ProgramOptions(arch=arch)) + module = program.compile(target_type="cubin") + kernel_simple = module.get_kernel("simple_indexing") + kernel_strided = module.get_kernel("strided_loop") + kernel_sum = module.get_kernel("block_partial_sum") + + # Test data + h_input = np.arange(num_elements, dtype=np.float32) + d_input = cp.asarray(h_input) + d_output = cp.zeros_like(d_input) + expected = cp.asarray(h_input * 2.0) + + # Demo 1: Simple indexing (1 thread = 1 element) + full_blocks = (num_elements + threads_per_block - 1) // threads_per_block + config = LaunchConfig(grid=full_blocks, block=threads_per_block) + launch( + stream, + config, + kernel_simple, + d_input.data.ptr, + d_output.data.ptr, + cp.uint64(num_elements), + ) + stream.sync() + print("Simple indexing: ", end="") + test1 = verify_array_result(d_output, expected) + + # Demo 2: Strided loop (threads process multiple elements) + d_output.fill(0) + config = LaunchConfig(grid=num_blocks, block=threads_per_block) + launch( + stream, + config, + kernel_strided, + d_input.data.ptr, + d_output.data.ptr, + cp.uint64(num_elements), + ) + stream.sync() + print("Strided loop: ", end="") + test2 = verify_array_result(d_output, expected) + + # Demo 3: Block-wise sum with shared memory + d_ones = cp.ones(num_elements, dtype=cp.float32) + d_partial = cp.zeros(num_blocks, dtype=cp.float32) + shared_mem = threads_per_block * 4 + + config = LaunchConfig(grid=num_blocks, block=threads_per_block, shmem_size=shared_mem) + launch( + stream, + config, + kernel_sum, + d_ones.data.ptr, + d_partial.data.ptr, + cp.uint64(num_elements), + ) + stream.sync() + + # Each block sums num_elements/num_blocks elements (strided access). + # Requires num_elements % num_blocks == 0 for correct expected values. + assert num_elements % num_blocks == 0, "num_elements must be divisible by num_blocks for block_partial_sum" + expected_partial = cp.full(num_blocks, num_elements / num_blocks, dtype=cp.float32) + print("Block-wise sum: ", end="") + test3 = verify_array_result(d_partial, expected_partial) + + # Performance timing + event_opts = EventOptions(timing_enabled=True) + iterations = 100 + + stream.sync() + start = stream.record(options=event_opts) + for _ in range(iterations): + launch( + stream, + config, + kernel_sum, + d_ones.data.ptr, + d_partial.data.ptr, + cp.uint64(num_elements), + ) + end = stream.record(options=event_opts) + end.sync() + + time_ms = (end - start) / iterations + bandwidth = (num_elements * 4) / (time_ms * 1e6) + print(f"\nKernel time: {time_ms:.3f} ms, Bandwidth: {bandwidth:.1f} GB/s") + + return test1 and test2 and test3 + + finally: + # Explicit resource cleanup + cp.cuda.Stream.null.use() + stream.close() + + +def main() -> None: + """Entry point.""" + success = run_sample() + if success: + print("\nDone") + else: + print("\nSome tests failed") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/blockwiseSum/requirements.txt b/samples/blockwiseSum/requirements.txt new file mode 100644 index 00000000000..e70c86353b6 --- /dev/null +++ b/samples/blockwiseSum/requirements.txt @@ -0,0 +1,6 @@ +# Block-wise Array Sum Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/blurImageUnifiedMemory/README.md b/samples/blurImageUnifiedMemory/README.md new file mode 100644 index 00000000000..93bdd26d233 --- /dev/null +++ b/samples/blurImageUnifiedMemory/README.md @@ -0,0 +1,177 @@ +# Sample: Image Blur with Unified Memory (Python) + +## Description + +Blur images on GPU using modern `cuda.core` APIs for kernel compilation, execution, and memory management. This sample demonstrates **zero-copy data sharing** between CPU and GPU using unified (managed) memory. + +## What You'll Learn + +- Compiling CUDA kernels at runtime with `cuda.core.Program` +- Launching kernels with `cuda.core.launch` and `LaunchConfig` +- Using unified memory with `cuda.core.ManagedMemoryResource` +- **Zero-copy CPU access** to unified memory via `np.from_dlpack()` +- Seamless CPU/GPU memory access without explicit transfers + +## Key Concepts + +### Kernel Compilation with cuda.core.Program + +```python +# Compile CUDA C++ kernel at runtime +program = Program(KERNEL_CODE, code_type="c++", options=options) +compiled = program.compile(target_type="cubin") +kernel = compiled.get_kernel("box_blur_3x3") +``` + +### Kernel Launch with cuda.core.launch + +```python +# Configure and launch kernel +config = LaunchConfig(grid=grid_size, block=block_size) + +# Buffers can be passed directly as kernel arguments +launch(stream, config, kernel, src_buf, dst_buf, H, W) +``` + +### Unified Memory (Managed Memory) + +This sample uses `ManagedMemoryResource` for simplicity: a single allocation is accessible from both CPU and GPU without explicit transfers. For performance-critical workloads, consider `LegacyPinnedMemoryResource` + `DeviceMemoryResource` instead, which gives explicit control over host/device placement and transfer costs. + +Unified memory is accessible from both CPU and GPU without explicit data transfers: + +```python +# Allocate unified memory +options = ManagedMemoryResourceOptions(preferred_location=device.device_id) +mr = ManagedMemoryResource(options) +src_buf = mr.allocate(n_bytes, stream) +dst_buf = mr.allocate(n_bytes, stream) +try: + # Synchronize to ensure allocations are complete before CPU access + stream.sync() + + # Create numpy views of unified memory using DLPack protocol (zero-copy) + src_np = np.from_dlpack(src_buf).view(np.float32).reshape(H, W) + dst_np = np.from_dlpack(dst_buf).view(np.float32).reshape(H, W) + + # CPU writes directly to unified memory + src_np[:] = input_data + + # Launch kernel - buffers can be passed directly as arguments + launch(stream, config, kernel, src_buf, dst_buf, H, W) + stream.sync() + + # Return zero-copy view; caller must close buffers when done + return dst_np, src_buf, dst_buf +except Exception: + src_buf.close() + dst_buf.close() + raise +``` + +When returning a zero-copy view, the caller must close the buffers after use (e.g., in a `try/finally` block) to avoid leaking managed memory. + +## Key APIs + +### From `cuda.core`: + +- `Device` - CUDA device management +- `Program` - Runtime kernel compilation (NVRTC) +- `ProgramOptions` - Compilation options (architecture target) +- `LaunchConfig` - Kernel launch configuration (grid/block dimensions) +- `launch` - Execute compiled kernel +- `ManagedMemoryResource` - Unified memory allocation + +### Zero-Copy Techniques: + +- `np.from_dlpack(buffer)` - Create numpy view of unified memory using DLPack protocol +- Pass `buffer` directly to `launch()` as kernel arguments +- When returning a zero-copy view, return `(view, src_buf, dst_buf)` and have the caller close buffers in `try/finally` after use + +## Kernel Techniques + +- **2D Thread Mapping** - Each thread computes one output pixel +- **Stencil Pattern** - Read neighboring pixels (3x3 neighborhood) +- **Boundary Handling** - Clamp to edge for border pixels +- **Box Filter** - 3x3 averaging for blur effect + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support +- Minimum GPU memory: 256 MB + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` package (13.0.0+) +- `cuda-core` package (>=1.0.0) +- `numpy` package (>=2.3.2) +- `pillow` package (10.0.0+) + +### Platform Support: + +This sample relies on `ManagedMemoryResource` with **concurrent host access** +to managed allocations while GPU kernels are in flight. That behavior +requires the device property `concurrent_managed_access=True`, which is only +supported on Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) +the property is `False`, so the sample exits early with a waive message and +exit code `2` instead of attempting a run that would crash the process. + +## Installation + +```bash +cd /path/to/cuda-samples/python/1_GettingStarted/blurImageUnifiedMemory +pip install -r requirements.txt +``` + +## How to Run + +```bash +python blurImageUnifiedMemory.py +``` + +## Expected Output + +``` +============================================================ +Image Blur with Unified Memory (cuda.core) +============================================================ + +Device: +Compute Capability: sm_ + +Compiling CUDA kernel with cuda.core.Program... + Compiled for architecture: sm_ + +Image size: 256x256 grayscale +Creating sample image... +Blurring image on GPU... + +Saving results... + Saved: original_image.png + Saved: blurred_image.png + +Verifying result... + Test PASSED + Max difference from original: +``` + +## Output Files + +- `original_image.png` - Test pattern image before blur +- `blurred_image.png` - Image after 3x3 box blur + +## Files + +- `blurImageUnifiedMemory.py` - Python implementation using cuda.core +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [cuda.core.Program](https://nvidia.github.io/cuda-python/cuda-core/latest/generated/cuda.core.Program.html) +- [cuda.core.ManagedMemoryResource](https://nvidia.github.io/cuda-python/cuda-core/latest/generated/cuda.core.ManagedMemoryResource.html) +- [CUDA Managed Memory](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-unified-memory-programming-hd) diff --git a/samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py b/samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py new file mode 100644 index 00000000000..062a966552c --- /dev/null +++ b/samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py @@ -0,0 +1,278 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2", "pillow>=10.0.0"] +# /// + +""" +Image Blur with Unified Memory using cuda.core + +Demonstrates GPU image blurring using cuda.core APIs for kernel compilation, +launch, and unified memory allocation. +""" + +import sys + +try: + import numpy as np + from PIL import Image + + from cuda.core import ( + Device, + LaunchConfig, + ManagedMemoryResource, + ManagedMemoryResourceOptions, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# CUDA kernel source code - compiled at runtime by cuda.core.Program +BOX_BLUR_KERNEL_CODE = r""" +extern "C" __global__ +void box_blur_3x3(const float* __restrict__ src, + float* __restrict__ dst, int H, int W) { + /* + * Simple 3x3 box blur CUDA kernel. + * + * Each thread computes one output pixel by averaging + * the 3x3 neighborhood of input pixels (stencil pattern). + */ + + int x = blockIdx.x * blockDim.x + threadIdx.x; + int y = blockIdx.y * blockDim.y + threadIdx.y; + + if (x >= W || y >= H) return; + + float sum = 0.0f; + int count = 0; + + // 3x3 stencil: iterate over neighborhood + for (int dy = -1; dy <= 1; dy++) { + for (int dx = -1; dx <= 1; dx++) { + int nx = x + dx; + int ny = y + dy; + + // Boundary check (clamp to edge) + if (nx >= 0 && nx < W && ny >= 0 && ny < H) { + sum += src[ny * W + nx]; + count++; + } + } + } + + dst[y * W + x] = sum / count; +} +""" + + +def make_test_image(h: int, w: int, dtype=np.uint8) -> np.ndarray: + """Create a test grayscale image for demonstration.""" + img = np.zeros((h, w), dtype=dtype) + + # Create horizontal stripes + for i in range(0, h, 50): + img[i : i + 25, :] = 255 + + # Create vertical stripes with different intensity + for j in range(0, w, 50): + img[:, j : j + 25] = 128 + + # Add circular pattern for interesting blur effects + center_y, center_x = h // 2, w // 2 + y, x = np.ogrid[:h, :w] + circle_mask = (x - center_x) ** 2 + (y - center_y) ** 2 <= (min(h, w) // 6) ** 2 + img[circle_mask] = 200 + + return np.ascontiguousarray(img) + + +def blur_image_unified_memory(host_np: np.ndarray, device: Device, stream, kernel) -> tuple[np.ndarray, object, object]: + """ + Blur image on GPU using unified memory with cuda.core. + + This function demonstrates: + 1. Allocate managed memory using ManagedMemoryResource + 2. Create zero-copy numpy views using np.from_dlpack() + 3. Launch kernel via cuda.core.launch + + Args: + host_np: NumPy array containing image data on CPU + device: CUDA device to use + stream: cuda.core Stream for async operations + kernel: Compiled cuda.core Kernel object + + Returns: + Tuple of (dst_np, src_buf, dst_buf). dst_np is a zero-copy view into + unified memory. Caller must close src_buf and dst_buf when done with + dst_np to avoid leaking managed memory. + """ + H, W = host_np.shape + n_bytes = H * W * np.dtype(np.float32).itemsize + + # Create managed memory resource for unified memory allocation + options = ManagedMemoryResourceOptions(preferred_location=device.device_id) + mr = ManagedMemoryResource(options) + + # Allocate unified memory buffers for source and destination images + src_buf = mr.allocate(n_bytes, stream=stream) + dst_buf = mr.allocate(n_bytes, stream=stream) + try: + # Synchronize to ensure allocations are complete before CPU access + stream.sync() + + # Create numpy views of unified memory using DLPack protocol (zero-copy) + src_np = np.from_dlpack(src_buf).view(np.float32).reshape(H, W) + dst_np = np.from_dlpack(dst_buf).view(np.float32).reshape(H, W) + + # Write input data to unified memory (CPU can access directly) + src_np[:] = host_np.astype(np.float32) / 255.0 + + # Configure kernel launch parameters + block_size = (16, 16) + grid_size = ( + (W + block_size[0] - 1) // block_size[0], + (H + block_size[1] - 1) // block_size[1], + ) + + # Create LaunchConfig for kernel execution + config = LaunchConfig(grid=grid_size, block=block_size) + + # Launch kernel - buffers can be passed directly as kernel arguments + launch( + stream, + config, + kernel, + src_buf, + dst_buf, + np.int32(H), + np.int32(W), + ) + + # Synchronize to ensure kernel completion before reading results + stream.sync() + + # Return zero-copy view; caller closes buffers when done + return (dst_np, src_buf, dst_buf) + except Exception: + src_buf.close() + dst_buf.close() + raise + + +def main(): + """ + Complete demonstration of GPU image blurring with cuda.core. + + This example shows: + 1. Device initialization with cuda.core.Device + 2. Kernel compilation with cuda.core.Program + 3. Unified memory with cuda.core.ManagedMemoryResource + 4. Kernel launch with cuda.core.launch and LaunchConfig + """ + if sys.platform == "win32": + print( + "This sample relies on ManagedMemoryResource with concurrent host " + "access, which is not supported on Windows " + "(concurrent_managed_access=False). Waiving this sample." + ) + sys.exit(2) + + print("=" * 60) + print("Image Blur with Unified Memory (cuda.core)") + print("=" * 60) + + # Initialize CUDA device + device = Device(0) + device.set_current() + + print(f"\nDevice: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + + # Create stream for async operations + stream = device.create_stream() + try: + # Compile kernel using cuda.core.Program + print("\nCompiling CUDA kernel with cuda.core.Program...") + arch = f"sm_{device.arch}" + options = ProgramOptions(arch=arch) + program = Program(BOX_BLUR_KERNEL_CODE, code_type="c++", options=options) + compiled = program.compile(target_type="cubin") + kernel = compiled.get_kernel("box_blur_3x3") + print(f" Compiled for architecture: {arch}") + + # Image parameters + H, W = 256, 256 + print(f"\nImage size: {H}x{W} grayscale") + + # Create test image + print("Creating sample image...") + host_np = make_test_image(H, W, dtype=np.uint8) + + # Blur image on GPU using cuda.core (returns zero-copy view + buffers) + print("Blurring image on GPU...") + blurred_result, src_buf, dst_buf = blur_image_unified_memory(host_np, device, stream, kernel) + try: + # Save images (use zero-copy view before releasing buffers) + print("\nSaving results...") + original_pil = Image.fromarray(host_np, mode="L") + original_pil.save("original_image.png") + print(" Saved: original_image.png") + + blurred_uint8 = (np.clip(blurred_result, 0, 1) * 255).astype(np.uint8) + blurred_pil = Image.fromarray(blurred_uint8, mode="L") + blurred_pil.save("blurred_image.png") + print(" Saved: blurred_image.png") + + # Verify blur was applied + print("\nVerifying result...") + original_float = host_np.astype(np.float32) / 255.0 + max_diff = np.max(np.abs(blurred_result - original_float)) + blur_applied = max_diff > 0.01 + + if blur_applied: + print(" Test PASSED") + else: + print(" Test FAILED - blur not applied") + sys.exit(1) + + print(f" Max difference from original: {max_diff:.4f}") + finally: + src_buf.close() + dst_buf.close() + finally: + stream.close() + + +if __name__ == "__main__": + main() diff --git a/samples/blurImageUnifiedMemory/blurred_image.png b/samples/blurImageUnifiedMemory/blurred_image.png new file mode 100644 index 0000000000000000000000000000000000000000..2d24272e22f47e5ba9d706bea489cb59c3e66d36 GIT binary patch literal 1407 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5890C>L#5>RT?`DYZk{fVAr*7p-aVUl+fAhH zVYob-$YZUp2V#@NGpF&*O1UllV(M3=xpy2kZ`f+^L|$S_luGLowz4QLQQdPLi~Y}+ z87(bvx7g)Q6$n?$;UbFzJ2Cl2sET@@oeRzJSbN0-0=Kwf8whd4V!ct z?fuWm2^-Ayixmo3$Dn`i+S-bjWTK>B1_d9U&a%1YB>JyG0yLWGrsqOxEUu|+J zpWdZq3QPFvL!|#smhoAqx2%0;!>9T~@iTpnT|RmB`g}fp#;0Zv>%9-I`4JV`KDD99 zcOeup1yd~LHqc5>X%a#mi+oP`^f%TPL|$<5-lO|^*1YmB9~e4 zIDN4-s4K3!X7Z<`-LYdY^D+6l+Rr^duD3h>;c4+@Uf(W#Z?im~^w}Bx_v&WYd_Mfw zoH@64)p5zh%jcqBot<%ie$PDVdSA9ruO)Ww-WT_w=IM%G?}8@89zXHtU){#nqF*Z2 zC*-cY{qgvDhmM^efBr4y=Ip4}4A|p)IO#i6M;z0uZ;S%=%w5|v#kyU)%L6`pAJ{XO zsUwEzRUP9IUB=S=43DNY7-=-DP+h>orI5v`(azKn$<(za_BYF!Xx)Ym)df0S4`whF zt!}71%_^YJeCjcWg<8WIEd_aCf)Y35{ZqL4q21@RZ^ew`=KR_4***Jz@YS;%v&*(d z=O6p|Gdk(Svg9Y*Cwp+7SdyG#Be#9uS&!?Ez~~E}vi4ZT{m;LbFIg*yNJK|(zA34i zdOUPO1m})fv(yu^<}uu|V@o>fzlCK>4bPM54J#{|GQLZ6h}nM>y70}MCl<0i5@iq+z7WUhqQju{Pb_0Si;@_Fp|x9`q)7KPZiV%I6F+)-b5`gyoUw9y zx9)a@?}L|;3Y+^TCK+g0)v~D+9d?nw@wN11R@uyarWf!3t@C-pr0_|1^;0YMZxjUk^Q>& zdfYnpwO=)lG<{bQ(OR#d?Gd2soH?yg<>~wa!KqnpS05Ny>h&)0&= zjMp52p`klNxw?`9?%1ELcDHaXfgUPpMtpZ%8? z>Maisea&*^NrGr?;1b^XU%0ixu0HOXbogNb64dHKWRn!m*-%OmgpoAt;EjE z8g{$$k_+oh-16Pb(_4OBl-MhImr8jXXCd=i*4phwp1FG$(Bdu9cV#rwIEoM5F=U+a ZTUxV(T`oYL#5>RT?`D&;+`&!Ar*7p-gPXJG8AyQ z_&)v)r+i}G(aB^AF% z1ks+Vr!QwEyL!wy;z^=GW z#vkr@9{BWd^Yr#74@^$Jk)PIl+2wM5@l6ZXb94Ws#)|livM~SiTE}ML)0o)!qGGqVjLr zpQ11KndQ!&DXEjqkI!n8<+uPcNPcaA6szy?|s9fa-rvS-|F?My$*bC_%5?K)(JU~ zzkTw|xUek{sN?2IDT%FxQ9#LW8`;{n@_Ed8vxw!`*FGSi_VbN$&lp<2PP@x{dydj0wZ(UgX7~C97S2xGXE*fyKatVfp!geU2beF@IIN{QcP(#wekJ970I!b2E2aZtIv}0SaII nsQ6i4pRN)pF~6&4>iErTs#j)PZ@|9|lvO-k{an^LB{Ts5-P(!9 literal 0 HcmV?d00001 diff --git a/samples/blurImageUnifiedMemory/requirements.txt b/samples/blurImageUnifiedMemory/requirements.txt new file mode 100644 index 00000000000..5213dcc2546 --- /dev/null +++ b/samples/blurImageUnifiedMemory/requirements.txt @@ -0,0 +1,6 @@ +# Image Blur with Unified Memory Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 +pillow>=10.0.0 diff --git a/samples/copyImageArraytoGPU/README.md b/samples/copyImageArraytoGPU/README.md new file mode 100644 index 00000000000..46120af2e8a --- /dev/null +++ b/samples/copyImageArraytoGPU/README.md @@ -0,0 +1,119 @@ +# Sample: Image Array Copy to GPU (Python) + +## Description + +Copy image arrays between CPU and GPU memory using the modern `cuda.core` API with optimal performance through pinned memory and asynchronous transfers. + +## What You'll Learn + +- How to use pinned memory for faster CPU↔GPU transfers +- Using the `cuda.core` API for memory management +- Working with DLPack for zero-copy array views +- Performing asynchronous memory transfers with CUDA streams +- Interoperability between CUDA Core API and CuPy +- Proper CUDA resource management and cleanup + +## Key Libraries + +- `cuda.core` - Modern CUDA Python API +- `numpy` - Array operations and DLPack support +- `cupy` - GPU array operations and CUDA interoperability + +## Key APIs + +### From `cuda.core`: + +- `Device()` - Initialize and access CUDA device +- `Device.set_current()` - Set the current device for API calls +- `Device.create_stream()` - Create CUDA stream for async operations +- `Device.memory_resource` - Access device memory allocator +- `PinnedMemoryResource()` - Allocate pinned host memory +- `buffer.copy_to()` - Copy data between memory spaces +- `buffer.close()` - Release allocated memory + +### From `numpy`: + +- `np.from_dlpack()` - Create array view from DLPack capsule +- `np.copyto()` - Copy data between arrays + +### From `cupy`: + +- `cp.from_dlpack()` - Create GPU array view from DLPack capsule +- `cp.cuda.Stream.from_external()` - Use external CUDA stream + +### From `cuda_samples_utils`: + +- `verify_array_result()` - Verify computation results + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support +- Sufficient GPU memory for image data (sample uses ~200KB for 256×256×3 image) + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- NumPy 2.3.2 or newer (required for DLPack support) +- `cuda-python` package (>=13.0.0+) +- `cuda-core` package (>=1.0.0) +- `cupy-cuda13x` package (14.0.0+) + +## Installation + +Install the required packages from requirements.txt: + +```bash +cd /path/to/cuda-samples/python/1_GettingStarted/copyImageArraytoGPU +pip install -r requirements.txt +``` + +The requirements.txt installs: +- `numpy` (2.3.2+, required for DLPack) +- `cuda-python` (>=13.0.0+) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (14.0.0+) + +## How to Run + +### Basic usage: + +```bash +cd samples/python/1_GettingStarted/copyImageArraytoGPU +python copyImageArraytoGPU.py +``` + +## Expected Output + +``` +[Image Array Copy to GPU using CUDA Core API] +Device: NVIDIA GeForce RTX 4090 +[Image array copy of 256x256x3 image] +Creating sample image... +Copying image to GPU... +Creating CuPy view of GPU data... +Mean pixel value (computed on GPU): 127.50 +Copying image back from GPU... +Verifying result... +Test PASSED + +Done +``` + +**Note:** Device name will vary based on your GPU. + +## Files + +- `copyImageArraytoGPU.py` - Python implementation using cuda.core API +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [cuda.core API Guide](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [DLPack Specification](https://dmlc.github.io/dlpack/latest/) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/copyImageArraytoGPU/copyImageArraytoGPU.py b/samples/copyImageArraytoGPU/copyImageArraytoGPU.py new file mode 100644 index 00000000000..dd8d3da15fc --- /dev/null +++ b/samples/copyImageArraytoGPU/copyImageArraytoGPU.py @@ -0,0 +1,242 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Image Array Copy to GPU using CUDA Core API + +This sample demonstrates how to copy image arrays between CPU and GPU memory +using NVIDIA's CUDA Core Python API with optimal performance. +""" + +import sys +from pathlib import Path + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +try: + import cupy as cp + import numpy as np + + from cuda.core import Buffer, Device, PinnedMemoryResource, Stream +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# ----------------------------- Helper Functions ------------------------------ + + +def make_random_image(h: int, w: int, c: int, dtype=np.uint8) -> np.ndarray: + """ + Create a random test image for demonstration. + + Args: + h: Image height in pixels + w: Image width in pixels + c: Number of channels (e.g., 3 for RGB) + dtype: NumPy data type (e.g., np.uint8 for 0-255 pixel values) + + Returns: + A contiguous NumPy array representing the image + """ + img = np.random.randint(0, 256, size=(h, w, c), dtype=dtype) + return np.ascontiguousarray(img) # Ensure memory is contiguous for GPU transfer + + +# ----------------------------- Core GPU Functions --------------------------- + + +def copy_image_to_gpu_cuda_core(host_np: np.ndarray, dev: Device, stream: Stream) -> tuple[Buffer, Buffer]: + """ + Copy image from CPU memory to GPU memory using optimal transfer method. + + This function demonstrates the recommended approach: + 1. Use pinned memory for faster transfers + 2. Use DLPack for zero-copy array views + 3. Perform async transfers on a CUDA stream + + Args: + host_np: NumPy array containing image data on CPU + dev: CUDA device object + stream: CUDA stream for async operations + + Returns: + Tuple of (device_buffer, pinned_buffer) - both need to be cleaned up later + """ + nbytes = host_np.nbytes # Calculate total bytes needed + + # Step 1: Set up memory resources + # Device memory resource - allocates on GPU + device_mr = dev.memory_resource + # Pinned memory resource - allocates CPU memory that GPU can access faster + pinned_mr = PinnedMemoryResource() + + # Step 2: Allocate memory buffers + pinned_buffer = pinned_mr.allocate(nbytes, stream=stream) # Fast CPU memory + device_buffer = device_mr.allocate(nbytes, stream=stream) # GPU memory + + # Step 3: Create a NumPy view of pinned memory using DLPack + # This allows us to work with pinned memory as if it's a regular NumPy array + pinned_view = np.from_dlpack(pinned_buffer).view(dtype=host_np.dtype).reshape(host_np.shape) + + # Step 4: Copy image data from regular CPU memory to pinned CPU memory + # This is a CPU-to-CPU copy, so it's very fast + np.copyto(pinned_view, host_np) + + # Step 5: Copy from pinned CPU memory to GPU memory + # This is the actual CPU-to-GPU transfer, done asynchronously + pinned_buffer.copy_to(device_buffer, stream=stream) + + return device_buffer, pinned_buffer + + +def copy_image_from_gpu_cuda_core( + device_buffer: Buffer, + shape: tuple, + dtype: type, + _dev: Device, # unused: kept for symmetry with copy_image_to_gpu_cuda_core + stream: Stream, +) -> np.ndarray: + """ + Copy image from GPU memory back to CPU memory. + + This function reverses the GPU-to-CPU transfer process: + 1. Allocate pinned CPU memory for fast transfer + 2. Copy from GPU to pinned CPU memory + 3. Create NumPy view and copy to regular CPU memory + + Args: + device_buffer: GPU buffer containing image data + shape: Original image shape tuple (height, width, channels) + dtype: Original image data type + dev: CUDA device object + stream: CUDA stream for async operations + + Returns: + NumPy array with image data copied from GPU + """ + nbytes = np.prod(shape) * np.dtype(dtype).itemsize # Calculate total bytes + + # Step 1: Create pinned memory for fast GPU-to-CPU transfer + pinned_mr = PinnedMemoryResource() + pinned_buffer = pinned_mr.allocate(nbytes, stream=stream) + + # Step 2: Copy from GPU memory to pinned CPU memory + device_buffer.copy_to(pinned_buffer, stream=stream) + stream.sync() # Wait for the GPU transfer to complete + + # Step 3: Create NumPy view of pinned memory using DLPack + pinned_view = np.from_dlpack(pinned_buffer).view(dtype=dtype).reshape(shape) + + # Step 4: Copy from pinned CPU memory to regular CPU memory + # This creates the final result that can be used normally + host_result = pinned_view.copy() + + # Step 5: Clean up the temporary pinned buffer + pinned_buffer.close(stream) + + return host_result + + +# ------------------------------ Main Demo ------------------------------------ + + +def main(): + """ + Complete demonstration of GPU image copying workflow. + + This example shows: + 1. Setting up CUDA device and stream + 2. Creating a sample image + 3. Copying image to GPU + 4. Accessing GPU data with CuPy (optional) + 5. Copying image back from GPU + 6. Verifying data integrity + 7. Proper cleanup of resources + """ + print("[Image Array Copy to GPU using CUDA Core API]") + + # Image parameters - modify these to test different sizes + H, W, C = 256, 256, 3 # Height=256, Width=256, Channels=3 (RGB) + dtype = np.uint8 # Standard image pixel type (0-255 values) + + # Step 1: Set up CUDA device and stream + dev = Device() # Get default CUDA device (GPU 0) + dev.set_current() # Make this device the active one + stream = dev.create_stream() # Create stream for async operations + + print(f"Device: {dev.name}") + print(f"[Image array copy of {H}x{W}x{C} image]") + + # Step 2: Configure CuPy to use our CUDA stream (for interoperability) + cp.cuda.Stream.from_external(stream).use() + + # Step 3: Create a test image on CPU + print("Creating sample image...") + host_np = make_random_image(H, W, C, dtype=dtype) + + # Step 4: Copy image from CPU to GPU + print("Copying image to GPU...") + device_buffer, pinned_buffer = copy_image_to_gpu_cuda_core(host_np, dev, stream) + + # Step 5: (Optional) Get a CuPy view of GPU data for processing + # This shows how you can work with the GPU data without copying it back + print("Creating CuPy view of GPU data...") + device_cp = cp.from_dlpack(device_buffer).view(dtype=dtype).reshape(H, W, C) + + # Example: compute mean pixel value on GPU + mean_value = float(cp.mean(device_cp)) + print(f"Mean pixel value (computed on GPU): {mean_value:.2f}") + + # Step 6: Copy image back from GPU to CPU + print("Copying image back from GPU...") + host_back = copy_image_from_gpu_cuda_core(device_buffer, host_np.shape, host_np.dtype, dev, stream) + + # Step 7: Verify that the data survived the round trip + print("Verifying result...") + host_back_cp = cp.asarray(host_back) + host_np_cp = cp.asarray(host_np) + verify_array_result(host_back_cp, host_np_cp, rtol=0, atol=0) + + # Step 8: Clean up all allocated resources + device_buffer.close(stream) # Free GPU memory + pinned_buffer.close(stream) # Free pinned CPU memory + stream.close() # Close CUDA stream + cp.cuda.Stream.null.use() # Reset CuPy's stream to default + + print("\nDone") + + +if __name__ == "__main__": + main() diff --git a/samples/copyImageArraytoGPU/requirements.txt b/samples/copyImageArraytoGPU/requirements.txt new file mode 100644 index 00000000000..31aed2541ce --- /dev/null +++ b/samples/copyImageArraytoGPU/requirements.txt @@ -0,0 +1,6 @@ +# Image Array Copy to GPU Sample Requirements + +numpy>=2.3.2 +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/cudaComputeLambdas/README.md b/samples/cudaComputeLambdas/README.md new file mode 100644 index 00000000000..db0586a3a8f --- /dev/null +++ b/samples/cudaComputeLambdas/README.md @@ -0,0 +1,130 @@ +# cudaComputeLambdas (Python) + +## Description + +This sample demonstrates how **cuda.compute** (from the +`cuda-cccl` package) accepts plain Python callables, including +lambdas, as the operators that drive device-wide reductions, +transforms, and scans. Internally `cuda.compute` JIT-compiles the +callable through Numba for the GPU, so you can iterate on the +operator in pure Python and still get a fused device-wide kernel. + +The sample exercises three algorithm families: + +1. `cuda.compute.reduce_into` - sum via `lambda a, b: a + b`. +2. `cuda.compute.unary_transform` - elementwise `y = x*x + 1` via a + lambda. +3. `cuda.compute.inclusive_scan` - prefix sum over only the even + values, driven by a regular Python function as the binary + operator. + +## What You'll Learn + +- Passing a Python `lambda` directly as the operator to a cuda.compute + device algorithm +- Using a regular Python `def` function for the same purpose when the + op is non-trivial +- The three core algorithm families in cuda.compute: reductions, + transforms, and scans +- How cuda.compute auto-compiles the op to LTO-IR via Numba + +## Key Libraries + +- [`cuda.compute`](https://nvidia.github.io/cccl/python.html) (from the `cuda-cccl` package) - device algorithms and JIT-compiled Python ops +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - device setup +- `cupy` - device buffers +- `numpy` - scalar init values and host-side verification + +## Key APIs + +### From `cuda.compute` + +- `cuda.compute.reduce_into(d_in, d_out, num_items, op, h_init)` - device-wide reduction +- `cuda.compute.unary_transform(d_in, d_out, num_items, op)` - elementwise unary transform +- `cuda.compute.inclusive_scan(d_in, d_out, op, init_value, num_items)` - inclusive prefix scan + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer (cuda.compute compiles ops to LTO-IR via + Numba, which needs the toolkit's `nvvm` and `libdevice`). +- Python 3.10 or newer +- `cuda-cccl` (>=1.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numba-cuda` (pulled in transitively by `cuda-cccl`) + +If the CUDA toolkit is not on your `PATH`, set `CUDA_HOME` so Numba +can locate `libdevice`: + +```bash +export CUDA_HOME=/usr/local/cuda +``` + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/cudaComputeLambdas +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-cccl` (>=1.0.0) - ships the `cuda.compute` module +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=1.24.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/cudaComputeLambdas +python cudaComputeLambdas.py +``` + +### With custom parameters + +```bash +python cudaComputeLambdas.py --device 1 +``` + +## Expected Output + +``` +Device: +Compute Capability: + +reduce_into(lambda a,b: a+b) over 1..10 -> 55 (expected 55) OK + +unary_transform(lambda x: x*x + 1): + got = [1, 2, 5, 10, 17, 26, 37, 50] + expected = [1, 2, 5, 10, 17, 26, 37, 50] OK + +inclusive_scan(add-evens-only) over [1,2,3,4,5,6]: + got = [0, 2, 2, 6, 6, 12] + expected = [0, 2, 2, 6, 6, 12] OK + +Done +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `cudaComputeLambdas.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) diff --git a/samples/cudaComputeLambdas/cudaComputeLambdas.py b/samples/cudaComputeLambdas/cudaComputeLambdas.py new file mode 100644 index 00000000000..5137adbd2c5 --- /dev/null +++ b/samples/cudaComputeLambdas/cudaComputeLambdas.py @@ -0,0 +1,179 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-cccl[cu13]>=1.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=1.24.0"] +# /// + +""" +cuda.compute: Python lambdas as device-wide operators + +This sample demonstrates how cuda.compute 1.0 (from the cuda-cccl +package) accepts plain Python callables, including lambdas, as the +operators that drive device-wide reductions, transforms, and scans. +Internally cuda.compute JIT-compiles the callable with Numba for the +device, so you can iterate on the operator in pure Python and still +get a fused GPU kernel. + +The sample exercises three algorithm families with Python lambdas / +regular functions: + + 1. cuda.compute.reduce_into - sum via a lambda. + 2. cuda.compute.unary_transform - elementwise y = x*x + 1 via a lambda. + 3. cuda.compute.inclusive_scan - prefix sum over only the even values, + using a regular Python function as the binary operator. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + import cuda.compute + from cuda.core import Device +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def demo_reduce_lambda() -> bool: + """reduce_into driven by a lambda.""" + dtype = np.int32 + h_init = np.array([0], dtype=dtype) + d_in = cp.arange(1, 11, dtype=dtype) # 1..10 + d_out = cp.empty(1, dtype=dtype) + + cuda.compute.reduce_into( + d_in=d_in, + d_out=d_out, + num_items=int(d_in.size), + op=lambda a, b: a + b, + h_init=h_init, + ) + + got = int(d_out.get()[0]) + expected = int(d_in.get().sum()) + ok = got == expected + print(f"reduce_into(lambda a,b: a+b) over 1..10 -> {got} (expected {expected}) {'OK' if ok else 'FAIL'}") + return ok + + +def demo_unary_transform_lambda() -> bool: + """unary_transform driven by a lambda: y = x*x + 1.""" + d_in = cp.arange(8, dtype=cp.int32) + d_out = cp.empty_like(d_in) + + cuda.compute.unary_transform( + d_in=d_in, + d_out=d_out, + num_items=int(d_in.size), + op=lambda x: x * x + 1, + ) + + got = d_out.get() + expected = (d_in.get().astype(np.int64) ** 2 + 1).astype(np.int32) + ok = np.array_equal(got, expected) + print( + f"unary_transform(lambda x: x*x + 1):\n" + f" got = {got.tolist()}\n" + f" expected = {expected.tolist()} {'OK' if ok else 'FAIL'}" + ) + return ok + + +def demo_scan_custom_op() -> bool: + """inclusive_scan with a Python function that sums only even values. + + This shows the same pattern that also works for reduce/transform: + the Python callable is JIT-compiled for the device by cuda.compute. + """ + dtype = np.int32 + d_in = cp.array([1, 2, 3, 4, 5, 6], dtype=dtype) + d_out = cp.empty_like(d_in) + h_init = np.array([0], dtype=dtype) + + def add_evens(a, b): + # Treat odd operands as zero; scan accumulates only even values. + return (a if a % 2 == 0 else 0) + (b if b % 2 == 0 else 0) + + cuda.compute.inclusive_scan( + d_in=d_in, + d_out=d_out, + op=add_evens, + init_value=h_init, + num_items=int(d_in.size), + ) + + got = d_out.get() + # Host reference: running sum of even-only projection of the input. + h_in = d_in.get() + proj = np.where(h_in % 2 == 0, h_in, 0) + expected = np.cumsum(proj).astype(dtype) + ok = np.array_equal(got, expected) + print( + f"inclusive_scan(add-evens-only) over [1,2,3,4,5,6]:\n" + f" got = {got.tolist()}\n" + f" expected = {expected.tolist()} {'OK' if ok else 'FAIL'}" + ) + return ok + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description="Drive cuda.compute device algorithms with Python lambdas / callables") + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + print() + + ok = True + ok &= demo_reduce_lambda() + print() + ok &= demo_unary_transform_lambda() + print() + ok &= demo_scan_custom_op() + + print() + if ok: + print("Done") + return 0 + print("FAILED") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/cudaComputeLambdas/requirements.txt b/samples/cudaComputeLambdas/requirements.txt new file mode 100644 index 00000000000..3110a76e934 --- /dev/null +++ b/samples/cudaComputeLambdas/requirements.txt @@ -0,0 +1,4 @@ +cuda-cccl[cu13]>=1.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=1.24.0 diff --git a/samples/cudaGraphs/README.md b/samples/cudaGraphs/README.md new file mode 100644 index 00000000000..60b8c5bdc78 --- /dev/null +++ b/samples/cudaGraphs/README.md @@ -0,0 +1,140 @@ +# cudaGraphs (Python) + +## Description + +This sample demonstrates how to capture a multi-stage kernel pipeline as a +CUDA graph with `cuda.core` and replay it with a single driver call. + +The sample runs a three-stage elementwise pipeline +`r3 = (a + b) * c - a` in two modes: + +1. **Individual launches** - one `launch(stream, ...)` per stage, repeated + for every iteration of the pipeline. +2. **CUDA graph replay** - the same three launches are recorded into a + `Graph` once and replayed with `graph.launch(stream)` on each + iteration. + +Both paths are timed over N iterations and their results are verified +against a reference computation. The sample also re-launches the graph +after mutating the input buffers to show that the graph captures +pointers (not data), so the same graph can process new inputs without +rebuilding. + +## What You'll Learn + +- Creating a `GraphBuilder` from a stream with `stream.create_graph_builder()` +- Capturing launches with `begin_building()` and `end_building()` +- Completing a graph with `builder.complete()` and uploading it to a stream +- Replaying the graph with `graph.launch(stream)` +- Measuring the launch-overhead savings for small kernels +- Re-running the same graph against updated input data + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Pythonic access to CUDA runtime, programs, and graphs +- `cupy` - input buffers and result verification +- `numpy` - scalar kernel arguments + +## Key APIs + +### From `cuda.core` + +- `Stream.create_graph_builder()` - obtain a `GraphBuilder` +- `GraphBuilder.begin_building()` / `end_building()` - begin and finish recording launches issued against the builder +- `GraphBuilder.complete()` - produce an executable `Graph` +- `Graph.upload(stream)` - upload the graph structure to the device +- `Graph.launch(stream)` - replay the entire graph +- `launch(graph_builder, config, kernel, ...)` - record a kernel launch into the graph being built + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 512 MB + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/cudaGraphs +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/cudaGraphs +python cudaGraphs.py +``` + +### With custom parameters + +```bash +# Larger vectors and more iterations +python cudaGraphs.py --elements 4096 --iters 2000 + +# Use a specific GPU +python cudaGraphs.py --device 1 +``` + +Short vectors exaggerate the launch-overhead savings; larger vectors +will show the two approaches converging because per-launch overhead +becomes negligible next to kernel runtime. + +## Expected Output + +Speedup numbers vary with GPU and host CPU. + +``` +Device: +Compute Capability: + +Individual launches: 1000 iters in 0.0085s (8.49 us/iter) + +Building CUDA graph... +Graph replay: 1000 iters in 0.0034s (3.41 us/iter) +Graph speedup: 2.49x + +Graph replay on updated data verified (same graph, new buffer contents) + +Done +``` + +**Note:** Device name, compute capability, and speedup will vary based on +your GPU and host CPU. + +## Files + +- `cudaGraphs.py` - Python implementation using `cuda.core` CUDA graphs +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` graphs API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda-graphs) +- Upstream `cuda.core` example: [`cuda_graphs.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/cuda_graphs.py) +- [CUDA Graphs programming guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cuda-graphs) diff --git a/samples/cudaGraphs/cudaGraphs.py b/samples/cudaGraphs/cudaGraphs.py new file mode 100644 index 00000000000..5b6c7f58464 --- /dev/null +++ b/samples/cudaGraphs/cudaGraphs.py @@ -0,0 +1,254 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +CUDA Graphs with cuda.core + +CUDA graphs let you record a DAG of operations once, then replay the entire +graph with a single driver call. For workflows that issue many small kernels +this can significantly reduce CPU-side launch overhead. + +This sample runs a three-stage elementwise pipeline (add -> multiply -> +subtract) in two modes: + + 1. Individually launched kernels on a stream. + 2. A single CUDA graph that captures the same three launches and is + replayed with ``graph.launch(stream)``. + +We then measure the wall-clock time of each mode across many iterations to +illustrate the graph replay advantage for short kernels, and demonstrate that +a graph can be relaunched against new data (the pointers are baked in, but +the contents of those buffers are not). +""" + +import sys +import time +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +PIPELINE_KERNELS = r""" +extern "C" __global__ +void vec_add(const float* A, const float* B, float* C, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride) C[i] = A[i] + B[i]; +} + +extern "C" __global__ +void vec_mul(const float* A, const float* B, float* C, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride) C[i] = A[i] * B[i]; +} + +extern "C" __global__ +void vec_sub(const float* A, const float* B, float* C, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride) C[i] = A[i] - B[i]; +} +""" + + +def run_pipeline_individual(stream, kernels, config, buffers, size, n_iters): + """Run the 3-stage pipeline `n_iters` times with one launch per stage.""" + add_k, mul_k, sub_k = kernels + a, b, c, r1, r2, r3 = buffers + stream.sync() + t0 = time.perf_counter() + for _ in range(n_iters): + launch(stream, config, add_k, a.data.ptr, b.data.ptr, r1.data.ptr, np.uint64(size)) + launch(stream, config, mul_k, r1.data.ptr, c.data.ptr, r2.data.ptr, np.uint64(size)) + launch(stream, config, sub_k, r2.data.ptr, a.data.ptr, r3.data.ptr, np.uint64(size)) + stream.sync() + return time.perf_counter() - t0 + + +def build_graph(stream, kernels, config, buffers, size): + """Capture the 3-stage pipeline into a CUDA graph and return it.""" + add_k, mul_k, sub_k = kernels + a, b, c, r1, r2, r3 = buffers + + graph_builder = stream.create_graph_builder() + graph_builder.begin_building() + launch( + graph_builder, + config, + add_k, + a.data.ptr, + b.data.ptr, + r1.data.ptr, + np.uint64(size), + ) + launch( + graph_builder, + config, + mul_k, + r1.data.ptr, + c.data.ptr, + r2.data.ptr, + np.uint64(size), + ) + launch( + graph_builder, + config, + sub_k, + r2.data.ptr, + a.data.ptr, + r3.data.ptr, + np.uint64(size), + ) + graph_builder.end_building() + graph = graph_builder.complete() + graph.upload(stream) + return graph_builder, graph + + +def run_pipeline_graph(stream, graph, n_iters): + """Launch the compiled graph `n_iters` times.""" + stream.sync() + t0 = time.perf_counter() + for _ in range(n_iters): + graph.launch(stream) + stream.sync() + return time.perf_counter() - t0 + + +def main() -> int: + import argparse + + parser = argparse.ArgumentParser(description="CUDA Graphs demo with cuda.core") + parser.add_argument( + "--elements", + type=int, + default=1 << 12, + help="Elements per vector (default: 4096 - small to emphasize launch overhead)", + ) + parser.add_argument( + "--iters", + type=int, + default=1000, + help="Number of pipeline iterations to time (default: 1000)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + + stream = device.create_stream() + # Tell CuPy to order its allocations on our stream so buffer initialization + # below is serialized with the kernels we launch. + cp.cuda.Stream.from_external(stream).use() + + graph_builder = graph = None + try: + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + program = Program(PIPELINE_KERNELS, code_type="c++", options=program_options) + module = program.compile("cubin") + add_k = module.get_kernel("vec_add") + mul_k = module.get_kernel("vec_mul") + sub_k = module.get_kernel("vec_sub") + kernels = (add_k, mul_k, sub_k) + + N = args.elements + rng = cp.random.default_rng(seed=0) + a = rng.random(N, dtype=cp.float32) + b = rng.random(N, dtype=cp.float32) + c = rng.random(N, dtype=cp.float32) + r1 = cp.empty_like(a) + r2 = cp.empty_like(a) + r3 = cp.empty_like(a) + buffers = (a, b, c, r1, r2, r3) + + expected = (a + b) * c - a + + config = LaunchConfig(grid=(N + 255) // 256, block=256) + device.sync() + + # Warm up compilation/caches, then measure individual launches. + run_pipeline_individual(stream, kernels, config, buffers, N, n_iters=5) + t_individual = run_pipeline_individual(stream, kernels, config, buffers, N, n_iters=args.iters) + assert cp.allclose(r3, expected, rtol=1e-5, atol=1e-5), "Individual pipeline produced incorrect results" + print( + f"\nIndividual launches: {args.iters} iters in {t_individual:.4f}s" + f" ({t_individual * 1e6 / args.iters:.2f} us/iter)" + ) + + # Capture the same pipeline as a graph and measure the replay. + print("\nBuilding CUDA graph...") + graph_builder, graph = build_graph(stream, kernels, config, buffers, N) + + run_pipeline_graph(stream, graph, n_iters=5) # warm up + t_graph = run_pipeline_graph(stream, graph, n_iters=args.iters) + assert cp.allclose(r3, expected, rtol=1e-5, atol=1e-5), "Graph pipeline produced incorrect results" + print(f"Graph replay: {args.iters} iters in {t_graph:.4f}s ({t_graph * 1e6 / args.iters:.2f} us/iter)") + if t_graph > 0: + print(f"Graph speedup: {t_individual / t_graph:.2f}x") + + # Demonstrate that the graph replays against current buffer contents. + a[:] = cp.ones(N, dtype=cp.float32) + b[:] = cp.full(N, 2.0, dtype=cp.float32) + c[:] = cp.full(N, 3.0, dtype=cp.float32) + device.sync() + # r3 = (a + b) * c - a = (1 + 2) * 3 - 1 = 8 + graph.launch(stream) + stream.sync() + assert cp.allclose(r3, 8.0), "Graph replay with new data produced wrong result" + print("\nGraph replay on updated data verified (same graph, new buffer contents)") + + print("\nDone") + return 0 + finally: + if graph is not None: + graph.close() + if graph_builder is not None: + graph_builder.close() + stream.close() + cp.cuda.Stream.null.use() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/cudaGraphs/requirements.txt b/samples/cudaGraphs/requirements.txt new file mode 100644 index 00000000000..c650cd51f17 --- /dev/null +++ b/samples/cudaGraphs/requirements.txt @@ -0,0 +1,5 @@ +# CUDA Graphs Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/customPyTorchKernel/README.md b/samples/customPyTorchKernel/README.md new file mode 100644 index 00000000000..502b3b74071 --- /dev/null +++ b/samples/customPyTorchKernel/README.md @@ -0,0 +1,62 @@ +# Sample: PyTorch Custom GPU Operator + +## Description + +This sample demonstrates how to add a custom GPU operation to PyTorch using the `cuda.core` API. It implements a simple square operation (y = x²) to show the complete workflow from CUDA kernel to PyTorch integration with autograd support. + +## Requirements + +- NVIDIA GPU with Compute Capability 7.0+ +- CUDA Toolkit 13.0+ +- Python 3.10+ +- PyTorch 2.0+ +- cuda-python >= 13.0.0 +- cuda-core >=1.0.0 + +## Installation + +```bash +cd python/3_FrameworkInterop/customPyTorchKernel +pip install -r requirements.txt +``` + +**Windows users:** The default `torch` wheel on PyPI for Windows is CPU-only and will cause `torch.cuda.is_available()` to return `False`. Install a CUDA-enabled build from PyTorch's wheel index *before* (or after) the command above: + +```bash +pip install torch --index-url https://download.pytorch.org/whl/cu128 +``` + +Replace `cu128` with the wheel suffix matching your installed CUDA driver (e.g. `cu121`, `cu124`, `cu126`, `cu128`). The driver's CUDA version must be >= the wheel's bundled runtime. + +## How to Run + +```bash +# Basic usage +python customPyTorchKernel.py + +# Test with more elements +python customPyTorchKernel.py --size 1000000 + +# Use specific GPU +CUDA_VISIBLE_DEVICES=1 python customPyTorchKernel.py +``` + +## Expected Output + +The sample runs three tests: +1. Forward pass correctness (y = x²) +2. Backward pass correctness (gradient computation) +3. Multi-dimensional tensor support + +All tests should pass, confirming the custom operator works correctly with PyTorch's autograd system. + +## Key Concepts + +The sample demonstrates: +- Writing CUDA kernels with grid-stride loops +- Runtime kernel compilation with cuda.core +- PyTorch autograd integration via `torch.autograd.Function` +- Stream management using PyTorch's current stream +- Kernel caching for performance + +The code is self-documenting with inline comments explaining each step. diff --git a/samples/customPyTorchKernel/customPyTorchKernel.py b/samples/customPyTorchKernel/customPyTorchKernel.py new file mode 100644 index 00000000000..b092bc94706 --- /dev/null +++ b/samples/customPyTorchKernel/customPyTorchKernel.py @@ -0,0 +1,389 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "torch>=2.0.0"] +# /// + +""" +PyTorch Custom GPU Operator using cuda.core + +Question: How do I add a custom GPU op to PyTorch? +Answer: This sample shows the complete workflow. + +This sample implements a custom square operation (y = x²) to demonstrate: +- Writing a CUDA kernel +- Compiling with cuda.core +- Integrating with PyTorch's autograd system +- Proper device and stream management +""" + +import sys + +try: + import torch + + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install: pip install torch cuda-python cuda-core") + sys.exit(1) + + +# ============================================================================ +# Step 1: Define CUDA Kernel +# ============================================================================ +# Simple element-wise square: y = x² +# This kernel is easy to understand and verify + +SQUARE_KERNEL = """ +extern "C" __global__ +void square_kernel(const float* x, float* y, int n) +{ + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (int i = tid; i < n; i += gridDim.x * blockDim.x) { + y[i] = x[i] * x[i]; + } +} +""" + + +# ============================================================================ +# PyTorch Stream Wrapper +# ============================================================================ +# cuda.core requires objects with __cuda_stream__ protocol +class PyTorchStreamWrapper: + def __init__(self, pt_stream): + self.pt_stream = pt_stream + + def __cuda_stream__(self): + stream_id = self.pt_stream.cuda_stream + return (0, stream_id) # Return format required by CUDA Python + + +# ============================================================================ +# Step 2: Kernel Compilation and Caching +# ============================================================================ +# Compile kernel once per device and cache it to avoid recompilation overhead +# In real training loops, this avoids paying compilation cost on every forward. + + +_kernel_cache = {} + + +def get_square_kernel(device): + """ + Get or compile the square kernel for a given device. + + Parameters + ---------- + device : Device + CUDA device object + + Returns + ------- + Kernel + Compiled CUDA kernel + """ + # Cache key based on device to avoid recompiling for the same GPU + key = device.pci_bus_id + + if key not in _kernel_cache: + # Compile the kernel with appropriate architecture + opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(SQUARE_KERNEL, code_type="c++", options=opts) + mod = prog.compile("cubin") + _kernel_cache[key] = mod.get_kernel("square_kernel") + + return _kernel_cache[key] + + +# ============================================================================ +# Step 3: PyTorch Autograd Function +# ============================================================================ +# This integrates the CUDA kernel with PyTorch's automatic differentiation + + +class SquareOp(torch.autograd.Function): + """ + Custom square operation using cuda.core. + + Forward: y = x² (computed with custom CUDA kernel) + Backward: grad_x = 2 * x * grad_y (computed with PyTorch) + """ + + @staticmethod + def forward(ctx, x): + """ + Forward pass: compute y = x² using custom CUDA kernel. + + Parameters + ---------- + ctx : Context + PyTorch context for saving tensors + x : torch.Tensor + Input tensor (must be CUDA, float32, contiguous) + + Returns + ------- + torch.Tensor + Output tensor with y = x² + """ + # Validate input requirements + if not x.is_cuda: + raise RuntimeError("SquareOp only supports CUDA tensors") + if x.dtype != torch.float32: + raise RuntimeError("SquareOp only supports float32 tensors") + + # Ensure contiguous memory layout for efficient kernel access + x = x.contiguous() + + device = Device() + # Use PyTorch's current stream to ensure proper ordering with other PyTorch ops + # Create a cuda.core Stream from PyTorch's stream wrapper + torch_stream = torch.cuda.current_stream(device=x.device) + stream = device.create_stream(PyTorchStreamWrapper(torch_stream)) + + # Create a try/finally block to ensure the stream is properly closed + try: + # Get compiled kernel (cached) + kernel = get_square_kernel(device) + + # Allocate output tensor + y = torch.empty_like(x) + + # Configure kernel launch + n = int(x.numel()) + threads_per_block = 256 + blocks_per_grid = (n + threads_per_block - 1) // threads_per_block + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + + # Launch the kernel + launch(stream, config, kernel, x.data_ptr(), y.data_ptr(), n) + finally: + # Ensure stream is properly closed + stream.close() + + # Save input for backward pass + ctx.save_for_backward(x) + + return y + + @staticmethod + def backward(ctx, grad_output): + """ + Backward pass: compute gradient. + + For y = x², the derivative is dy/dx = 2x + Therefore: grad_x = grad_output * 2x + + Parameters + ---------- + ctx : Context + PyTorch context with saved tensors + grad_output : torch.Tensor + Gradient from upstream + + Returns + ------- + torch.Tensor + Gradient with respect to input + """ + # Retrieve saved input + (x,) = ctx.saved_tensors + + # Note: We assume grad_output has the same dtype and device as x. + # This is guaranteed by PyTorch's autograd system. + + # Compute gradient: d(x²)/dx = 2x + grad_x = 2.0 * x * grad_output + + return grad_x + + +# ============================================================================ +# Step 4: Public API +# ============================================================================ + + +def square(x): + """ + Apply element-wise square operation using custom CUDA kernel. + + Parameters + ---------- + x : torch.Tensor + Input tensor (must be on CUDA device, dtype=float32) + + Returns + ------- + torch.Tensor + Output tensor with y = x² + + Examples + -------- + >>> x = torch.randn(100, device="cuda") + >>> y = square(x) + >>> assert torch.allclose(y, x**2) + """ + return SquareOp.apply(x) + + +# ============================================================================ +# Step 5: Testing and Verification +# ============================================================================ + + +def main(): + """Test the custom square operation.""" + import argparse + + parser = argparse.ArgumentParser(description="Custom PyTorch Square Operator using cuda.core") + parser.add_argument("--size", type=int, default=10000, help="Number of elements (default: 10000)") + + args = parser.parse_args() + + # Device info + device = Device() + device.set_current() + major, minor = device.compute_capability + + print("\nDevice Information:") + print(f" Name: {device.name}") + print(f" Compute Capability: sm_{major}{minor}") + + print("\n" + "=" * 70) + print("Custom PyTorch Square Operator Test") + print("=" * 70) + + # ======================================================================== + # Test 1: Forward Pass Correctness + # ======================================================================== + print("\n" + "-" * 70) + print("Test 1: Forward Pass") + print("-" * 70) + + x = torch.randn(args.size, dtype=torch.float32, device="cuda") + + # Custom square operation + y_custom = square(x) + + # PyTorch reference + y_reference = x**2 + + # Check correctness + max_error = torch.max(torch.abs(y_custom - y_reference)).item() + + print(f"Max absolute error: {max_error:.2e}") + + if torch.allclose(y_custom, y_reference, rtol=1e-5, atol=1e-6): + print("[PASS] Forward pass PASSED") + else: + print("[FAIL] Forward pass FAILED") + return 1 + + # ======================================================================== + # Test 2: Backward Pass (Gradient) Correctness + # ======================================================================== + print("\n" + "-" * 70) + print("Test 2: Backward Pass") + print("-" * 70) + + # Test with requires_grad + x_custom = torch.randn(args.size, dtype=torch.float32, device="cuda", requires_grad=True) + x_reference = x_custom.clone().detach().requires_grad_(True) + + # Forward pass + y_custom = square(x_custom) + y_reference = x_reference**2 + + # Create upstream gradient + grad_output = torch.randn_like(y_custom) + + # Backward pass + y_custom.backward(grad_output) + y_reference.backward(grad_output) + + # Check gradients + max_grad_error = torch.max(torch.abs(x_custom.grad - x_reference.grad)).item() + + print(f"Max gradient error: {max_grad_error:.2e}") + + if torch.allclose(x_custom.grad, x_reference.grad, rtol=1e-5, atol=1e-6): + print("[PASS] Backward pass PASSED") + else: + print("[FAIL] Backward pass FAILED") + return 1 + + # ======================================================================== + # Test 3: Multi-dimensional Tensors + # ======================================================================== + print("\n" + "-" * 70) + print("Test 3: Multi-dimensional Tensors") + print("-" * 70) + + # Test with 2D tensor + x_2d = torch.randn(100, 100, dtype=torch.float32, device="cuda") + y_2d_custom = square(x_2d) + y_2d_reference = x_2d**2 + + if torch.allclose(y_2d_custom, y_2d_reference, rtol=1e-5, atol=1e-6): + print("[PASS] 2D tensor test PASSED") + else: + print("[FAIL] 2D tensor test FAILED") + return 1 + + # Test with 3D tensor + x_3d = torch.randn(10, 20, 30, dtype=torch.float32, device="cuda") + y_3d_custom = square(x_3d) + y_3d_reference = x_3d**2 + + if torch.allclose(y_3d_custom, y_3d_reference, rtol=1e-5, atol=1e-6): + print("[PASS] 3D tensor test PASSED") + else: + print("[FAIL] 3D tensor test FAILED") + return 1 + + # ======================================================================== + # Summary + # ======================================================================== + print("\n" + "=" * 70) + print("All tests PASSED!") + print("=" * 70) + print("\nYour custom GPU operator is working correctly!") + print("You can now use it in your PyTorch models like any built-in op.") + print("\nExample usage:") + print(" x = torch.randn(100, device='cuda')") + print(" y = square(x) # Uses your custom CUDA kernel") + print(" loss = y.sum()") + print(" loss.backward() # Gradients computed automatically") + print("=" * 70 + "\n") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/customPyTorchKernel/requirements.txt b/samples/customPyTorchKernel/requirements.txt new file mode 100644 index 00000000000..001018fab75 --- /dev/null +++ b/samples/customPyTorchKernel/requirements.txt @@ -0,0 +1,10 @@ +# Custom PyTorch Kernel Sample Requirements +# +# NOTE: On Windows, the default `torch` wheel from PyPI is CPU-only and the +# sample will fail with "Torch not compiled with CUDA enabled". Install a +# CUDA-enabled torch from PyTorch's wheel index first (see README.md): +# pip install torch --index-url https://download.pytorch.org/whl/cu128 + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +torch>=2.0.0 diff --git a/samples/customTensorFlowKernel/README.md b/samples/customTensorFlowKernel/README.md new file mode 100644 index 00000000000..77192b487ef --- /dev/null +++ b/samples/customTensorFlowKernel/README.md @@ -0,0 +1,81 @@ +# Sample: TensorFlow Custom GPU Operator + +## Description + +Learn how to add a custom GPU operation to TensorFlow using `cuda.core` with `tf.py_function`. This sample implements a custom **ReLU operation** (y = max(0, x)) for rapid prototyping of GPU operations. + +## Key Question Answered + +**Q: How do I add a custom GPU op to TensorFlow?** + +**A:** Use `tf.py_function` to wrap cuda.core kernels: +1. Write CUDA kernels (forward + backward) with grid-stride loops +2. Compile them with cuda.core +3. Wrap in Python functions +4. Use `tf.py_function` to call from TensorFlow +5. Register gradients with `@tf.custom_gradient` + +## Requirements + +- NVIDIA GPU with Compute Capability 7.0+ +- CUDA Toolkit 13.0+ +- Python 3.10+ +- TensorFlow 2.10+ +- cuda-python >= 13.0.0 +- cuda-core >=1.0.0 (required for LEGACY_DEFAULT_STREAM) +- numpy >= 2.3.2 +- CuPy (for device pointer access) + +## Installation + +```bash +cd python/3_FrameworkInterop/customTensorFlowKernel +pip install -r requirements.txt +``` + +## How to Run + +```bash +python customTensorFlowKernel.py +python customTensorFlowKernel.py --size 1000000 +``` + +## Usage Example + +```python +import tensorflow as tf +from customTensorFlowKernel import custom_relu + +# Simple usage +x = tf.random.normal([100], dtype=tf.float32) +y = custom_relu(x) + +# In a Keras model +model = tf.keras.Sequential([ + tf.keras.layers.Dense(128), + tf.keras.layers.Lambda(custom_relu), + tf.keras.layers.Dense(10) +]) +``` + +## Key Concepts + +- **tf.py_function**: Bridges TensorFlow and Python code using cuda.core (has overhead, not XLA-compatible) +- **@tf.custom_gradient**: Registers custom backward pass +- **cuda.core**: Primary GPU manager (device, stream, kernel compilation) +- **CuPy**: Internal helper for device pointer access only + +## Production Alternatives + +This sample is for rapid prototyping. For production: +- **TensorFlow C++ Custom Op**: Full performance, XLA compatible +- **XLA Custom Calls**: For XLA-compiled models +- See TensorFlow documentation for details + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [TensorFlow tf.py_function](https://www.tensorflow.org/api_docs/python/tf/py_function) +- [TensorFlow @custom_gradient](https://www.tensorflow.org/api_docs/python/tf/custom_gradient) +- [TensorFlow C++ Custom Op Guide](https://www.tensorflow.org/guide/create_op) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/customTensorFlowKernel/customTensorFlowKernel.py b/samples/customTensorFlowKernel/customTensorFlowKernel.py new file mode 100644 index 00000000000..8b4c1c05c3e --- /dev/null +++ b/samples/customTensorFlowKernel/customTensorFlowKernel.py @@ -0,0 +1,429 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "tensorflow>=2.10.0", "cupy-cuda13x>=14.0.0", "cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +""" +TensorFlow Custom GPU Operator using cuda.core + +Question: How do I add a custom GPU op to TensorFlow? +Answer: This sample shows rapid prototyping with cuda.core + tf.py_function. + +This sample implements a custom ReLU operation (y = max(0, x)) to demonstrate: +- Writing CUDA kernels (forward + backward) with grid-stride loops +- Compiling with cuda.core +- Integrating with TensorFlow via tf.py_function +- Proper gradient registration + +Dependencies: +- tensorflow: Deep learning framework +- cuda-core: GPU kernel compilation and launch + (requires >=0.6.0 for LEGACY_DEFAULT_STREAM) +- cuda-python: CUDA driver API bindings +- cupy: Array operations and device pointer access + +Note: This approach uses tf.py_function for rapid prototyping. For production +TensorFlow applications, use TensorFlow's C++ Custom Op API. +""" + +import sys + +try: + # CuPy is required for array operations and device pointer access + import cupy as cp + import tensorflow as tf + + from cuda.core import ( + LEGACY_DEFAULT_STREAM, + Device, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install: pip install tensorflow cupy cuda-python cuda-core") + sys.exit(1) + + +# ============================================================================ +# Step 1: Define CUDA Kernels +# ============================================================================ +# Simple element-wise ReLU: y = max(0, x) + +RELU_KERNEL = """ +extern "C" __global__ +void relu_forward_kernel(const float* x, float* y, int n) +{ + // Grid-stride loop: each thread processes multiple elements + int idx = blockIdx.x * blockDim.x + threadIdx.x; + int stride = gridDim.x * blockDim.x; + for (int i = idx; i < n; i += stride) { + y[i] = x[i] > 0.0f ? x[i] : 0.0f; + } +} + +extern "C" __global__ +void relu_backward_kernel(const float* x, const float* grad_y, float* grad_x, int n) +{ + // Grid-stride loop: each thread processes multiple elements + int idx = blockIdx.x * blockDim.x + threadIdx.x; + int stride = gridDim.x * blockDim.x; + for (int i = idx; i < n; i += stride) { + grad_x[i] = x[i] > 0.0f ? grad_y[i] : 0.0f; + } +} +""" + + +# ============================================================================ +# Step 2: Kernel Compilation and Caching +# ============================================================================ +# Compile kernel once per device and cache it to avoid recompilation overhead +# In real training loops, this avoids paying compilation cost on every forward. + +_kernel_cache = {} + + +def _get_relu_kernels(device): + """ + Get or compile the ReLU kernels for a given device. + + Parameters + ---------- + device : Device + CUDA device object + + Returns + ------- + tuple + (forward_kernel, backward_kernel) compiled CUDA kernels + """ + # Cache key based on device to avoid recompiling for the same GPU + key = device.pci_bus_id + + if key not in _kernel_cache: + # Compile the kernel with appropriate architecture + opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(RELU_KERNEL, code_type="c++", options=opts) + mod = prog.compile("cubin") + forward_kernel = mod.get_kernel("relu_forward_kernel") + backward_kernel = mod.get_kernel("relu_backward_kernel") + _kernel_cache[key] = (forward_kernel, backward_kernel) + + return _kernel_cache[key] + + +def _launch_relu_forward(x_np): + """ + Internal function: Launch forward CUDA kernel. + + Takes numpy array, returns numpy array. + Uses CuPy for array operations and device pointer access, cuda.core for + device/stream management. + + Note: LEGACY_DEFAULT_STREAM doesn't require explicit cleanup, but kernel + launch failures should be handled by the caller. CuPy arrays are + automatically cleaned up when they go out of scope. + """ + device = Device() + + # Ensure this device is current (TensorFlow usually does this already) + device.set_current() + + # Get compiled kernel (cached) + forward_kernel, _ = _get_relu_kernels(device) + + # Convert numpy to CuPy (CPU-to-GPU copy) + # CuPy is used for array operations and getting device pointers + x_cp = cp.asarray(x_np) + y_cp = cp.empty_like(x_cp) + + # Configure kernel launch + n = int(x_cp.size) + threads_per_block = 256 + blocks_per_grid = (n + threads_per_block - 1) // threads_per_block + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + + # Launch on the legacy default stream (stream 0) for TensorFlow interop + launch(LEGACY_DEFAULT_STREAM, config, forward_kernel, x_cp.data.ptr, y_cp.data.ptr, n) + + # Return as numpy array (GPU-to-CPU copy via cp.asnumpy) + return cp.asnumpy(y_cp) + + +def _launch_relu_backward(x_np, grad_y_np): + """ + Internal function: Launch backward CUDA kernel. + + Takes numpy arrays, returns numpy array. + Uses CuPy for array operations and device pointer access, cuda.core for + device/stream management. + + Note: LEGACY_DEFAULT_STREAM doesn't require explicit cleanup, but kernel + launch failures should be handled by the caller. CuPy arrays are + automatically cleaned up when they go out of scope. + """ + device = Device() + + # Ensure this device is current (TensorFlow usually does this already) + device.set_current() + + # Get compiled kernel (cached) + _, backward_kernel = _get_relu_kernels(device) + + # Convert numpy to CuPy (CPU-to-GPU copy) + # CuPy is used for array operations and getting device pointers + x_cp = cp.asarray(x_np) + grad_y_cp = cp.asarray(grad_y_np) + grad_x_cp = cp.empty_like(x_cp) + + # Configure kernel launch + n = int(x_cp.size) + threads_per_block = 256 + blocks_per_grid = (n + threads_per_block - 1) // threads_per_block + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + + # Launch on the legacy default stream (stream 0) for TensorFlow interop + launch( + LEGACY_DEFAULT_STREAM, + config, + backward_kernel, + x_cp.data.ptr, + grad_y_cp.data.ptr, + grad_x_cp.data.ptr, + n, + ) + + # Return as numpy array (GPU-to-CPU copy via cp.asnumpy) + return cp.asnumpy(grad_x_cp) + + +# ============================================================================ +# Step 3: TensorFlow Integration via tf.py_function +# ============================================================================ + + +@tf.custom_gradient +def custom_relu(x): + """ + Custom ReLU operation using cuda.core. + + This function provides a TensorFlow-native interface to custom CUDA kernels + compiled with cuda.core. The implementation uses tf.py_function internally + to bridge TensorFlow and cuda.core. + + Parameters + ---------- + x : tf.Tensor + Input tensor (must be float32 on GPU) + + Returns + ------- + tf.Tensor + Output tensor with ReLU applied + + Examples + -------- + >>> x = tf.random.normal([100], dtype=tf.float32) + >>> y = custom_relu(x) + >>> # Use in models + >>> model = tf.keras.Sequential( + ... [ + ... tf.keras.layers.Dense(128), + ... tf.keras.layers.Lambda(custom_relu), # Custom ReLU + ... tf.keras.layers.Dense(10), + ... ] + ... ) + """ + # Validate input + if x.dtype != tf.float32: + raise ValueError("custom_relu only supports float32 tensors") + + # Forward pass using tf.py_function + # py_function allows us to call arbitrary Python code (including cuda.core) + y = tf.py_function(func=_launch_relu_forward, inp=[x], Tout=tf.float32) + + # Restore shape information (py_function loses shape) + y.set_shape(x.shape) + + # Define gradient function + def grad_fn(grad_y): + """Backward pass using custom CUDA kernel""" + grad_x = tf.py_function(func=_launch_relu_backward, inp=[x, grad_y], Tout=tf.float32) + grad_x.set_shape(x.shape) + return grad_x + + return y, grad_fn + + +# ============================================================================ +# Step 4: Testing and Verification +# ============================================================================ + + +def main(): + """Test the custom ReLU operation.""" + import argparse + + parser = argparse.ArgumentParser(description="Custom TensorFlow ReLU Operator using cuda.core") + parser.add_argument("--size", type=int, default=10000, help="Number of elements (default: 10000)") + + args = parser.parse_args() + + # Device info + device = Device() + device.set_current() + major, minor = device.compute_capability + + print("\nDevice Information:") + print(f" Name: {device.name}") + print(f" Compute Capability: sm_{major}.{minor}") + + print("\n" + "=" * 70) + print("Custom TensorFlow ReLU Operator Test") + print("=" * 70) + + # ======================================================================== + # Test 1: Forward Pass Correctness + # ======================================================================== + print("\n" + "-" * 70) + print("Test 1: Forward Pass") + print("-" * 70) + + # Run on the first visible GPU (respects CUDA_VISIBLE_DEVICES), + # aligning with cuda.core Device(). + with tf.device("/GPU:0"): + x = tf.random.normal([args.size], dtype=tf.float32) + + # Custom ReLU operation + y_custom = custom_relu(x) + + # TensorFlow reference + y_reference = tf.nn.relu(x) + + # Check correctness + max_error = tf.reduce_max(tf.abs(y_custom - y_reference)).numpy() + + print(f"Max absolute error: {max_error:.2e}") + + if tf.reduce_all(tf.abs(y_custom - y_reference) < 1e-5): + print("[PASS] Forward pass PASSED") + else: + print("[FAIL] Forward pass FAILED") + return 1 + + # ======================================================================== + # Test 2: Backward Pass (Gradient) Correctness + # ======================================================================== + print("\n" + "-" * 70) + print("Test 2: Backward Pass") + print("-" * 70) + + with tf.device("/GPU:0"): + x_custom = tf.random.normal([args.size], dtype=tf.float32) + x_reference = tf.identity(x_custom) + + # Compute gradients with GradientTape + with tf.GradientTape() as tape_custom: + tape_custom.watch(x_custom) + y_custom = custom_relu(x_custom) + grad_custom = tape_custom.gradient(y_custom, x_custom) + + with tf.GradientTape() as tape_reference: + tape_reference.watch(x_reference) + y_reference = tf.nn.relu(x_reference) + grad_reference = tape_reference.gradient(y_reference, x_reference) + + # Check gradients + max_grad_error = tf.reduce_max(tf.abs(grad_custom - grad_reference)).numpy() + + print(f"Max gradient error: {max_grad_error:.2e}") + + if tf.reduce_all(tf.abs(grad_custom - grad_reference) < 1e-5): + print("[PASS] Backward pass PASSED") + else: + print("[FAIL] Backward pass FAILED") + return 1 + + # ======================================================================== + # Test 3: Multi-dimensional Tensors + # ======================================================================== + print("\n" + "-" * 70) + print("Test 3: Multi-dimensional Tensors") + print("-" * 70) + + with tf.device("/GPU:0"): + # Test with 2D tensor + x_2d = tf.random.normal([100, 100], dtype=tf.float32) + y_2d_custom = custom_relu(x_2d) + y_2d_reference = tf.nn.relu(x_2d) + + if tf.reduce_all(tf.abs(y_2d_custom - y_2d_reference) < 1e-5): + print("[PASS] 2D tensor test PASSED") + else: + print("[FAIL] 2D tensor test FAILED") + return 1 + + # Test with 3D tensor + x_3d = tf.random.normal([10, 20, 30], dtype=tf.float32) + y_3d_custom = custom_relu(x_3d) + y_3d_reference = tf.nn.relu(x_3d) + + if tf.reduce_all(tf.abs(y_3d_custom - y_3d_reference) < 1e-5): + print("[PASS] 3D tensor test PASSED") + else: + print("[FAIL] 3D tensor test FAILED") + return 1 + + # ======================================================================== + # Summary + # ======================================================================== + print("\n" + "=" * 70) + print("All tests PASSED!") + print("=" * 70) + print("\nYour custom GPU operator is working correctly!") + print("You can now use it in your TensorFlow models.") + print("\nExample usage:") + print(" x = tf.random.normal([100], dtype=tf.float32)") + print(" y = custom_relu(x) # Uses your custom CUDA kernel") + print(" ") + print(" # In a model:") + print(" model = tf.keras.Sequential([") + print(" tf.keras.layers.Dense(128),") + print(" tf.keras.layers.Lambda(custom_relu),") + print(" tf.keras.layers.Dense(10)") + print(" ])") + print("=" * 70 + "\n") + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/customTensorFlowKernel/requirements.txt b/samples/customTensorFlowKernel/requirements.txt new file mode 100644 index 00000000000..ff4c4229de8 --- /dev/null +++ b/samples/customTensorFlowKernel/requirements.txt @@ -0,0 +1,14 @@ +# TensorFlow Custom GPU Operator using cuda.core +# +# This sample demonstrates a cuda.core-first approach: +# - cuda-python and cuda-core: Primary GPU management (device, stream, kernel) +# - TensorFlow 2.10+: Deep learning framework (tf.py_function, tf.custom_gradient) +# - CuPy: Internal helper for device pointer access only +# +# Note: cuda-core>=1.0.0 is required for LEGACY_DEFAULT_STREAM constant + +numpy>=2.3.2 +tensorflow>=2.10.0 +cupy-cuda13x>=14.0.0 +cuda-python>=13.0.0 +cuda-core>=1.0.0 diff --git a/samples/deviceQuery/README.md b/samples/deviceQuery/README.md new file mode 100644 index 00000000000..17e639c31ff --- /dev/null +++ b/samples/deviceQuery/README.md @@ -0,0 +1,189 @@ +# Sample: Device Query (Python) + +## Description + +Query and display detailed properties of all CUDA-capable devices in your system using the modern `cuda.core` API. + +## What You'll Learn + +- How to enumerate CUDA devices in the system +- Using the `cuda.core` API for device management +- Querying comprehensive device properties (compute capability, memory, limits) +- Accessing low-level device attributes via `cuda.bindings` +- Checking peer-to-peer (P2P) access capabilities between GPUs + +## Key Libraries + +- `cuda.core` - Modern CUDA Python API +- `cuda.bindings` - Low-level CUDA bindings for runtime and driver APIs + +## Key APIs + +### From `cuda.core`: + +- `Device.get_all_devices()` - Get tuple of all available Device instances +- `Device(device_id)` - Get Device object for specific device ID +- `system.get_driver_version()` - Query CUDA driver version +- `Device.set_current()` - Set the current device for API calls +- `Device.properties` - Access comprehensive device properties +- `Device.name` - Get device name string +- `Device.can_access_peer()` - Check P2P access to peer device + +### From `cuda.bindings.runtime`: + +- `cudart.cudaRuntimeGetVersion()` - Get CUDA runtime version +- `cudart.cudaDeviceGetAttribute()` - Query specific device attributes + +### From `cuda.bindings.driver`: + +- `cuda.cuMemGetInfo()` - Get memory information for current device + +## Device Properties Queried + +### Compute Capabilities: +- Compute capability version (major.minor) +- Driver and runtime versions +- Number of multiprocessors and CUDA cores + +### Memory Information: +- Total global memory +- Memory clock rate and bus width +- L2 cache size +- Constant and shared memory sizes +- Maximum memory pitch + +### Execution Configuration Limits: +- Maximum threads per block and per multiprocessor +- Maximum block dimensions (x, y, z) +- Maximum grid dimensions (x, y, z) +- Warp size +- Registers per block + +### Texture Capabilities: +- Maximum texture dimensions (1D, 2D, 3D) +- Maximum layered texture sizes + +### Feature Support: +- Unified Addressing (UVA) +- Managed Memory +- Compute Preemption +- Cooperative Kernel Launch +- ECC support +- Host page-locked memory mapping +- Concurrent copy and kernel execution + +### System Information: +- PCI bus information +- Compute mode +- Driver mode (Windows only) +- P2P access matrix (multi-GPU systems) + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support (any compute capability) +- No specific GPU memory requirement (query only) + +### Software: + +- CUDA Toolkit 13.0 or newer (recommended; matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` package (>=13.0.0) +- `cuda-core` package (>=1.0.0) + +## Installation + +Install the required packages from requirements.txt: + +```bash +cd cuda-samples/python/1_GettingStarted/deviceQuery +pip install -r requirements.txt +``` + +The requirements.txt installs: +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) + +## How to Run + +### Basic usage: + +```bash +cd cuda-samples/python/1_GettingStarted/deviceQuery +python deviceQuery.py +``` + +### Skip P2P information: + +```bash +python deviceQuery.py --no-p2p +``` + +## Expected Output + +``` +[CUDA Device Query using CUDA Core API] +Detected 1 CUDA Capable device(s) + +Device 0: + CUDA Driver Version / Runtime Version 12.4 / 12.6 + CUDA Capability Major/Minor version number: 8.9 + Total amount of global memory: 24217 MBytes (25393954816 bytes) + (132) Multiprocessors, (128) CUDA Cores/MP: 16896 CUDA Cores + GPU Max Clock rate: 1980 MHz (1.98 GHz) + Memory Clock rate: 10501 Mhz + Memory Bus Width: 384-bit + L2 Cache Size: 67108864 bytes + Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) + Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers + Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers + Total amount of constant memory: 65536 bytes + Total amount of shared memory per block: 49152 bytes + Total shared memory per multiprocessor: 102400 bytes + Total number of registers available per block: 65536 + Warp size: 32 + Maximum number of threads per multiprocessor: 1536 + Maximum number of threads per block: 1024 + Max dimension size of a thread block (x,y,z): (1024, 1024, 64) + Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) + Maximum memory pitch: 2147483647 bytes + Texture alignment: 512 bytes + Concurrent copy and kernel execution: Yes with 2 copy engine(s) + Run time limit on kernels: Yes + Integrated GPU sharing Host Memory: No + Support host page-locked memory mapping: Yes + Device has ECC support: Enabled + Device supports Unified Addressing (UVA): Yes + Device supports Managed Memory: Yes + Device supports Compute Preemption: Yes + Supports Cooperative Kernel Launch: Yes + Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 + Compute Mode: + < Default (multiple host threads can use cudaSetDevice() with device simultaneously) > + +Done +``` + +**Note:** Output will vary based on your specific GPU model and system configuration. + +For multi-GPU systems, the output will include information for all detected devices and a P2P access matrix showing which GPUs can directly access each other's memory. + +## Files + +- `deviceQuery.py` - Python implementation using cuda.core API +- `requirements.txt` - Sample dependencies + +## Use Cases + +- **System Diagnostics** - Verify CUDA installation and GPU detection +- **Hardware Profiling** - Understand GPU capabilities before optimization +- **Multi-GPU Systems** - Identify P2P topology for optimal data placement +- **Kernel Development** - Determine execution configuration limits +- **Compatibility Checks** - Verify compute capability requirements + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [cuda.core API Guide](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CUDA Programming Guide - Device Information](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#device-enumeration) diff --git a/samples/deviceQuery/deviceQuery.py b/samples/deviceQuery/deviceQuery.py new file mode 100755 index 00000000000..0618dab8310 --- /dev/null +++ b/samples/deviceQuery/deviceQuery.py @@ -0,0 +1,360 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +""" +Device Query using CUDA Core API + +This sample enumerates the properties of the CUDA devices present in the system. +""" + +import platform +import sys + +# cuda.bindings used for properties not yet exposed in cuda.core (see comments below) +try: + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart + from cuda.core import Device, system +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def print_property(label, value, indent=2): + """ + Helper function to print device properties with aligned formatting. + + Parameters + ---------- + label : str + Property label + value : any + Property value + indent : int + Number of spaces for indentation (default: 2) + """ + field_width = 47 + spaces = " " * indent + print(f"{spaces}{label:<{field_width}}{value}") + + +def fmt_bytes(size_in_bytes): + """Format bytes to human-readable string with MBytes.""" + return f"{size_in_bytes / (1024 * 1024):.0f} MBytes ({size_in_bytes} bytes)" + + +def fmt_hz(rate_in_khz): + """Format frequency in kHz to MHz and GHz.""" + return f"{rate_in_khz * 1e-3:.0f} MHz ({rate_in_khz * 1e-6:.2f} GHz)" + + +def fmt_yes_no(val): + """Format boolean value to Yes/No string.""" + return "Yes" if val else "No" + + +def convert_sm_ver_to_cores(major, minor): + """ + Maps SM version to the number of CUDA cores per SM. + + Information taken from: + https://github.com/NVIDIA/cuda-samples/blob/master/Common/helper_cuda.h + + Parameters + ---------- + major : int + Major compute capability version + minor : int + Minor compute capability version + + Returns + ------- + int + Number of CUDA cores per SM, or 0 if unknown + """ + sm_to_cores = { + (3, 0): 192, + (3, 2): 192, + (3, 5): 192, + (3, 7): 192, + (5, 0): 128, + (5, 2): 128, + (5, 3): 128, + (6, 0): 64, + (6, 1): 128, + (6, 2): 128, + (7, 0): 64, + (7, 2): 64, + (7, 5): 64, + (8, 0): 64, + (8, 6): 128, + (8, 7): 128, + (8, 9): 128, + (9, 0): 128, + (10, 0): 128, + (10, 1): 128, + (10, 3): 128, + (11, 0): 128, + (12, 0): 128, + (12, 1): 128, + } + return sm_to_cores.get((major, minor), 0) + + +def print_device_info(dev_id, device): + """ + Print detailed information for a single CUDA device. + Uses device.properties (cuda.core) for most fields; cuda.bindings for + runtime version and global memory (not yet in high-level API). + """ + device.set_current() + props = device.properties + + print() + print(f"Device {dev_id}: {device.name}") + + # cuda.bindings workaround: runtime version not in cuda.core + driver_major, driver_minor = system.get_user_mode_driver_version() + err, runtime_version = cudart.cudaRuntimeGetVersion() + if err != cudart.cudaError_t.cudaSuccess: + raise RuntimeError(f"Failed to get CUDA runtime version: {err}") + runtime_major = runtime_version // 1000 + runtime_minor = (runtime_version % 1000) // 10 + + print_property( + "CUDA Driver Version / Runtime Version", + f"{driver_major}.{driver_minor} / {runtime_major}.{runtime_minor}", + ) + print_property( + "CUDA Capability Major/Minor version number:", + f"{props.compute_capability_major}.{props.compute_capability_minor}", + ) + + # cuda.bindings workaround: global memory (free/total) not in device.properties + err, _free_mem, total_mem_bytes = cuda.cuMemGetInfo() + if err != cuda.CUresult.CUDA_SUCCESS: + raise RuntimeError(f"Failed to get memory info: {err}") + print_property("Total amount of global memory:", fmt_bytes(total_mem_bytes)) + + sm_cores = convert_sm_ver_to_cores(props.compute_capability_major, props.compute_capability_minor) + total_cores = sm_cores * props.multiprocessor_count + print_property( + f"({props.multiprocessor_count:3d}) Multiprocessors, ({sm_cores:3d}) CUDA Cores/MP:", + f"{total_cores} CUDA Cores", + ) + + print_property("GPU Max Clock rate:", fmt_hz(props.clock_rate)) + print_property("Memory Clock rate:", f"{props.memory_clock_rate * 1e-3:.0f} Mhz") + print_property("Memory Bus Width:", f"{props.global_memory_bus_width}-bit") + if props.l2_cache_size > 0: + print_property("L2 Cache Size:", f"{props.l2_cache_size} bytes") + + print_property( + "Maximum Texture Dimension Size (x,y,z)", + f"1D=({props.maximum_texture1d_width}), " + f"2D=({props.maximum_texture2d_width}, {props.maximum_texture2d_height}), " + f"3D=({props.maximum_texture3d_width}, {props.maximum_texture3d_height}, " + f"{props.maximum_texture3d_depth})", + ) + print_property( + "Maximum Layered 1D Texture Size, (num) layers", + f"1D=({props.maximum_texture1d_layered_width}), {props.maximum_texture1d_layered_layers} layers", + ) + print_property( + "Maximum Layered 2D Texture Size, (num) layers", + f"2D=({props.maximum_texture2d_layered_width}, " + f"{props.maximum_texture2d_layered_height}), " + f"{props.maximum_texture2d_layered_layers} layers", + ) + + print_property("Total amount of constant memory:", f"{props.total_constant_memory} bytes") + print_property( + "Total amount of shared memory per block:", + f"{props.max_shared_memory_per_block} bytes", + ) + print_property( + "Total shared memory per multiprocessor:", + f"{props.max_shared_memory_per_multiprocessor} bytes", + ) + print_property("Total number of registers available per block:", props.max_registers_per_block) + + print_property("Warp size:", props.warp_size) + print_property( + "Maximum number of threads per multiprocessor:", + props.max_threads_per_multiprocessor, + ) + print_property("Maximum number of threads per block:", props.max_threads_per_block) + print_property( + "Max dimension size of a thread block (x,y,z):", + f"({props.max_block_dim_x}, {props.max_block_dim_y}, {props.max_block_dim_z})", + ) + print_property( + "Max dimension size of a grid size (x,y,z):", + f"({props.max_grid_dim_x}, {props.max_grid_dim_y}, {props.max_grid_dim_z})", + ) + print_property("Maximum memory pitch:", f"{props.max_pitch} bytes") + print_property("Texture alignment:", f"{props.texture_alignment} bytes") + + print_property( + "Concurrent copy and kernel execution:", + f"{fmt_yes_no(props.gpu_overlap)} with {props.async_engine_count} copy engine(s)", + ) + print_property("Run time limit on kernels:", fmt_yes_no(props.kernel_exec_timeout)) + + print_property("Integrated GPU sharing Host Memory:", fmt_yes_no(props.integrated)) + print_property( + "Support host page-locked memory mapping:", + fmt_yes_no(props.can_map_host_memory), + ) + print_property("Device has ECC support:", "Enabled" if props.ecc_enabled else "Disabled") + if platform.system() == "Windows": + mode = "TCC (Tesla Compute Cluster Driver)" if props.tcc_driver else "WDDM (Windows Display Driver Model)" + print_property("CUDA Device Driver Mode (TCC or WDDM):", mode) + + print_property( + "Device supports Unified Addressing (UVA):", + fmt_yes_no(props.unified_addressing), + ) + print_property("Device supports Managed Memory:", fmt_yes_no(props.managed_memory)) + print_property( + "Device supports Compute Preemption:", + fmt_yes_no(props.compute_preemption_supported), + ) + print_property("Supports Cooperative Kernel Launch:", fmt_yes_no(props.cooperative_launch)) + + print_property( + "Device PCI Domain ID / Bus ID / location ID:", + f"{props.pci_domain_id} / {props.pci_bus_id} / {props.pci_device_id}", + ) + compute_modes = { + 0: ("Default (multiple host threads can use cudaSetDevice() with device simultaneously)"), + 1: ("Exclusive (only one host thread in one process is able to use cudaSetDevice() with this device)"), + 2: "Prohibited (no host thread can use cudaSetDevice() with this device)", + 3: ("Exclusive Process (many threads in one process is able to use cudaSetDevice() with this device)"), + } + print_property("Compute Mode:", "") + print(f" < {compute_modes.get(props.compute_mode, 'Unknown')} >") + + +def print_p2p_access_info(devices): + """ + Print peer-to-peer access information for multi-GPU systems. + + Parameters + ---------- + devices : tuple of Device + Tuple of CUDA device objects + """ + print() + print("Peer-to-Peer (P2P) access support:") + for i, dev_i in enumerate(devices): + for j, dev_j in enumerate(devices): + if i == j: + continue + try: + can_access = dev_i.can_access_peer(dev_j) + print(f"> Peer access from {dev_i.name} (GPU{i}) -> {dev_j.name} (GPU{j}) : {fmt_yes_no(can_access)}") + except Exception as e: + print(f"Warning: Could not check peer access between device {i} and {j}: {e}") + + +def query_devices(show_p2p=True): + """ + Query and display information about all CUDA devices. + + Parameters + ---------- + show_p2p : bool + Whether to show peer-to-peer access information (default: True) + + Returns + ------- + bool + True if successful, False otherwise + """ + try: + print("[CUDA Device Query using CUDA Core API]") + devices = Device.get_all_devices() + except Exception as e: + print(f"Error: Failed to get devices: {e}") + import traceback + + traceback.print_exc() + return False + + if len(devices) == 0: + print("There are no available device(s) that support CUDA") + return True + + print(f"Detected {len(devices)} CUDA Capable device(s)") + + for dev_id, device in enumerate(devices): + try: + print_device_info(dev_id, device) + except Exception as e: + print(f"Error: Failed to get information for device {dev_id}: {e}") + import traceback + + traceback.print_exc() + return False + + if show_p2p and len(devices) >= 2: + print_p2p_access_info(devices) + + return True + + +def main(): + """ + Main entry point for the device query sample. + """ + import argparse + + parser = argparse.ArgumentParser( + description="Query CUDA Device Properties using CUDA Core API", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("--no-p2p", action="store_true", help="Skip peer-to-peer access information") + + args = parser.parse_args() + + success = query_devices(show_p2p=not args.no_p2p) + + if success: + print("\nDone") + return 0 + else: + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/deviceQuery/requirements.txt b/samples/deviceQuery/requirements.txt new file mode 100644 index 00000000000..a0e4feab6d0 --- /dev/null +++ b/samples/deviceQuery/requirements.txt @@ -0,0 +1,4 @@ +# Device Query Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 diff --git a/samples/fftSignalAnalysis/README.md b/samples/fftSignalAnalysis/README.md new file mode 100644 index 00000000000..87c84913b6b --- /dev/null +++ b/samples/fftSignalAnalysis/README.md @@ -0,0 +1,136 @@ +# Sample: FFT Signal Analysis (Python) + +## Description + +Analyze signal frequencies using Fast Fourier Transform (FFT) on the GPU. This sample demonstrates CuPy's cuFFT for GPU-accelerated frequency analysis: generating composite signals, computing magnitude spectrum, detecting dominant frequencies via peak detection, and comparing GPU vs CPU FFT performance. + +## What You'll Learn + +- Using CuPy's `cp.fft.rfft()` for real-to-complex FFT on GPU +- Computing magnitude spectrum from FFT results +- Peak detection to identify dominant frequencies +- Comparing GPU (cuFFT) vs CPU (NumPy) FFT performance +- Uses cuda.core APIs for device management and CUDA event timing + +## Key Concepts + +- **FFT (Fast Fourier Transform)**: Efficiently computes the Discrete Fourier Transform +- **Magnitude Spectrum**: `|FFT(signal)| * 2 / N` gives amplitude at each frequency +- **rfft**: Real FFT - optimized for real-valued input signals +- **Peak Detection**: Finding local maxima to identify dominant frequencies + +### Stream Interop + +This sample demonstrates CuPy integration with cuda.core streams: + +```python +# Create stream with cuda.core +stream = device.create_stream() + +# Use with CuPy operations +cp.cuda.Stream.from_external(stream).use() +``` + +## Key APIs + +### From `cuda.core`: + +- `Device` - Device management and context +- `EventOptions` - Configure events for GPU timing +- `stream.record()` - Record events for timing + +### From CuPy: + +- `cp.fft.rfft()` - Real-to-complex FFT (GPU-accelerated via cuFFT) +- `cp.fft.rfftfreq()` - Generate frequency bins for rfft +- `cp.cuda.Stream.from_external()` - Interop with cuda.core streams + +### From NumPy: + +- `np.fft.rfft()` - CPU FFT for comparison + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See `requirements.txt` for Python packages + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python fftSignalAnalysis.py +``` + +## Expected Output + +``` +============================================================ +FFT Signal Analysis +============================================================ + +Device: +Compute Capability: sm_XX + +Signal Parameters: + Samples: 1,048,576 + Sample Rate: 44,100 Hz + ... + +------------------------------------------------------------ +GPU FFT (cuFFT) +------------------------------------------------------------ +Time: X.XXX ms + +Detected Frequencies: + 440.0 Hz (magnitude: X.XXXX) + ... + +------------------------------------------------------------ +CPU FFT (NumPy) +------------------------------------------------------------ +Time: XX.XXX ms + +------------------------------------------------------------ +PERFORMANCE SUMMARY +------------------------------------------------------------ +GPU (cuFFT): X.XXX ms +CPU (NumPy): XX.XXX ms +Speedup: XXx + +------------------------------------------------------------ +VERIFICATION +------------------------------------------------------------ +GPU vs CPU FFT magnitude: Test PASSED + +Frequency Detection Accuracy: + 440 Hz: [OK] + ... + +Done +``` + +**Note:** Times and speedup vary by hardware. + +## Files + +- `fftSignalAnalysis.py` - Main sample using cuda.core and CuPy +- `README.md` - This file +- `requirements.txt` - Dependencies + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CuPy FFT Documentation](https://docs.cupy.dev/en/stable/reference/fft.html) +- [cuFFT Documentation](https://docs.nvidia.com/cuda/cufft/) diff --git a/samples/fftSignalAnalysis/fftSignalAnalysis.py b/samples/fftSignalAnalysis/fftSignalAnalysis.py new file mode 100644 index 00000000000..f62db19c4bd --- /dev/null +++ b/samples/fftSignalAnalysis/fftSignalAnalysis.py @@ -0,0 +1,319 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +FFT Signal Analysis + +Demonstrates how to analyze signal frequencies using Fast Fourier Transform (FFT): +- Generate composite signals with multiple frequency components +- Use CuPy's cuFFT for GPU-accelerated frequency analysis +- Detect dominant frequencies (peak detection) +- Compare GPU vs CPU FFT performance + +Uses cuda.core APIs for device management and timing. +""" + +import sys +import time +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +try: + import cupy as cp + import numpy as np + + from cuda.core import Device, EventOptions +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Install with: pip install -r requirements.txt") + sys.exit(1) + + +def generate_composite_signal( + num_samples: int, + sample_rate: float, + frequencies: list[float], + amplitudes: list[float], +) -> np.ndarray: + """ + Generate a composite signal with multiple frequency components. + + Parameters + ---------- + num_samples : int + Number of samples in the signal + sample_rate : float + Sampling rate in Hz + frequencies : list[float] + List of frequency components in Hz + amplitudes : list[float] + List of amplitudes for each frequency component + + Returns + ------- + np.ndarray + Signal array + """ + t = np.arange(num_samples, dtype=np.float32) / sample_rate + signal = np.zeros(num_samples, dtype=np.float32) + + for freq, amp in zip(frequencies, amplitudes): + signal += amp * np.sin(2 * np.pi * freq * t) + + return signal + + +def find_dominant_frequencies( + fft_magnitude: cp.ndarray, + frequencies: cp.ndarray, + num_peaks: int = 5, + threshold_ratio: float = 0.1, +) -> list[tuple[float, float]]: + """ + Find dominant frequencies from FFT magnitude spectrum. + + Uses CPU-based peak detection (transfers magnitude/frequencies via cp.asnumpy). + Suitable for small-to-medium spectra; for large-scale analysis, consider + GPU-native peak detection. + + Parameters + ---------- + fft_magnitude : cp.ndarray + Magnitude of FFT (positive frequencies only) + frequencies : cp.ndarray + Frequency bins + num_peaks : int + Maximum number of peaks to return + threshold_ratio : float + Minimum peak height as ratio of max peak + + Returns + ------- + list[tuple[float, float]] + List of (frequency, magnitude) tuples for detected peaks + """ + # Find peaks above threshold + max_magnitude = float(cp.max(fft_magnitude)) + threshold = max_magnitude * threshold_ratio + + # Simple peak detection: find local maxima above threshold + magnitude_cpu = cp.asnumpy(fft_magnitude) + freq_cpu = cp.asnumpy(frequencies) + + peaks = [] + for i in range(1, len(magnitude_cpu) - 1): + if ( + magnitude_cpu[i] > threshold + and magnitude_cpu[i] > magnitude_cpu[i - 1] + and magnitude_cpu[i] > magnitude_cpu[i + 1] + ): + peaks.append((freq_cpu[i], magnitude_cpu[i])) + + # Sort by magnitude and return top peaks + peaks.sort(key=lambda x: x[1], reverse=True) + return peaks[:num_peaks] + + +def run_fft_analysis( + num_samples: int = 2**20, + sample_rate: float = 44100.0, + device_id: int = 0, + num_iterations: int = 10, +) -> bool: + """ + Run FFT signal analysis benchmark. + + device_id and num_iterations are not exposed via CLI; modify defaults + or call this function directly for customization. + + Parameters + ---------- + num_samples : int + Number of samples (power of 2 recommended for FFT) + sample_rate : float + Sampling rate in Hz + device_id : int + CUDA device ID + num_iterations : int + Number of iterations for timing + + Returns + ------- + bool + True if analysis succeeded + """ + print("=" * 60) + print("FFT Signal Analysis") + print("=" * 60) + + # Initialize device + device = Device(device_id) + device.set_current() + stream = device.create_stream() + + try: + print(f"\nDevice: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + + # Make CuPy use our cuda.core stream + cp.cuda.Stream.from_external(stream).use() + + # Define test signal: composite of multiple frequencies + test_frequencies = [440.0, 880.0, 1320.0, 2000.0, 5000.0] # Hz + test_amplitudes = [1.0, 0.5, 0.3, 0.7, 0.4] + + print("\nSignal Parameters:") + print(f" Samples: {num_samples:,}") + print(f" Sample Rate: {sample_rate:,.0f} Hz") + print(f" Duration: {num_samples / sample_rate:.3f} seconds") + print(f" Input Frequencies: {test_frequencies} Hz") + print(f" Input Amplitudes: {test_amplitudes}") + + # Generate composite signal on CPU + h_signal = generate_composite_signal(num_samples, sample_rate, test_frequencies, test_amplitudes) + + # Transfer to GPU + d_signal = cp.asarray(h_signal) + + # --------------------------------------------------------------------- + # GPU FFT (cuFFT via CuPy) + # --------------------------------------------------------------------- + print("\n" + "-" * 60) + print("GPU FFT (cuFFT)") + print("-" * 60) + + event_opts = EventOptions(timing_enabled=True) + + # Warmup + d_fft_result = cp.fft.rfft(d_signal) + stream.sync() + + # Timed runs + start = stream.record(options=event_opts) + for _ in range(num_iterations): + d_fft_result = cp.fft.rfft(d_signal) + end = stream.record(options=event_opts) + end.sync() + + gpu_time_ms = (end - start) / num_iterations + print(f"Time: {gpu_time_ms:.3f} ms") + + # Compute magnitude spectrum + d_magnitude = cp.abs(d_fft_result) * 2 / num_samples + d_frequencies = cp.fft.rfftfreq(num_samples, 1 / sample_rate) + + # Find dominant frequencies + detected_peaks = find_dominant_frequencies(d_magnitude, d_frequencies) + + print("\nDetected Frequencies:") + for freq, mag in detected_peaks: + print(f" {freq:8.1f} Hz (magnitude: {mag:.4f})") + + # --------------------------------------------------------------------- + # CPU FFT (NumPy) for comparison + # --------------------------------------------------------------------- + print("\n" + "-" * 60) + print("CPU FFT (NumPy)") + print("-" * 60) + + # Warmup + h_fft_result = np.fft.rfft(h_signal) + + # Timed runs + cpu_start = time.perf_counter() + for _ in range(num_iterations): + h_fft_result = np.fft.rfft(h_signal) + cpu_end = time.perf_counter() + + cpu_time_ms = (cpu_end - cpu_start) * 1000 / num_iterations + print(f"Time: {cpu_time_ms:.3f} ms") + + # --------------------------------------------------------------------- + # Performance Summary + # --------------------------------------------------------------------- + print("\n" + "-" * 60) + print("PERFORMANCE SUMMARY") + print("-" * 60) + speedup = cpu_time_ms / gpu_time_ms + print(f"GPU (cuFFT): {gpu_time_ms:.3f} ms") + print(f"CPU (NumPy): {cpu_time_ms:.3f} ms") + print(f"Speedup: {speedup:.1f}x") + + # --------------------------------------------------------------------- + # Verification + # --------------------------------------------------------------------- + print("\n" + "-" * 60) + print("VERIFICATION") + print("-" * 60) + + # Compare GPU and CPU results + h_magnitude = cp.asarray(np.abs(h_fft_result).astype(np.float32)) * 2 / num_samples + + print("GPU vs CPU FFT magnitude: ", end="") + success = verify_array_result( + d_magnitude, + h_magnitude, + rtol=1e-4, + atol=1e-6, + ) + + # Verify detected frequencies match input + print("\nFrequency Detection Accuracy:") + detected_freqs = [freq for freq, _ in detected_peaks] + all_found = True + for expected_freq in test_frequencies: + found = any(abs(f - expected_freq) < 10 for f in detected_freqs) + status = "[OK]" if found else "[FAIL]" + print(f" {expected_freq:6.0f} Hz: {status}") + all_found = all_found and found + + success = success and all_found + return success + + finally: + # Cleanup - always close resources + cp.cuda.Stream.null.use() + stream.close() + + +def main() -> None: + """Entry point.""" + success = run_fft_analysis() + if success: + print("\nDone") + else: + print("\nAnalysis completed with errors") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/fftSignalAnalysis/requirements.txt b/samples/fftSignalAnalysis/requirements.txt new file mode 100644 index 00000000000..12db0490abe --- /dev/null +++ b/samples/fftSignalAnalysis/requirements.txt @@ -0,0 +1,6 @@ +# FFT Signal Analysis Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/greenContext/README.md b/samples/greenContext/README.md new file mode 100644 index 00000000000..3afd80831d0 --- /dev/null +++ b/samples/greenContext/README.md @@ -0,0 +1,250 @@ +# greenContext (Python) + +## Description + +This sample demonstrates how to use **green contexts** with +`cuda.core` to statically partition a GPU's streaming multiprocessors +(SMs) so that independent kernels can run on dedicated subsets of the +device. + +This examples takes A long-running kernel that fills the GPU's SMs, +and a short but latency-sensitive "critical" kernel is launched shortly after. +Without green contexts, the critical kernel must wait for SMs to +free up. With green contexts, the GPU's SMs are partitioned so the +critical kernel has its own dedicated SMs and can start immediately. + +Three timed scenarios are compared: + +1. **Reference**: the critical kernel alone on the primary context, + with no competing work. Establishes the pure compute time of the + critical kernel when every SM on the device is available to it. +2. **Baseline**: both kernels run on the device's primary context, + on two non-blocking streams that contend for all SMs. +3. **Green contexts**: the SMs are split into two disjoint groups + (e.g. 112 + 16). Each kernel runs on a stream that belongs to its + own green context, so the critical kernel never waits for SMs + held by the long-running kernel. + +The headline metric is the total wall time of the critical kernel +from launch to completion. In the baseline it is dominated by time +spent waiting behind the long-running kernel. With green contexts it +reflects the kernel's own compute time on its (smaller) SM +partition. The reference row lets you separate those two effects: + +- `baseline - reference` is roughly the time the critical kernel + spent waiting for SMs in the baseline run (the cost that green + contexts eliminate). +- `green / reference` is the compute slowdown caused by running on + a smaller SM partition (the cost that green contexts introduce). + +## What You'll Learn + +- Querying a device's SM resources via `Device.resources.sm` and + reading `sm_count`, `min_partition_size`, `coscheduled_alignment` +- Splitting an `SMResource` into disjoint partitions with + `sm.split(SMResourceOptions(count=(A, B)))` +- Creating a green context from an SM partition via + `Device.create_context(ContextOptions(resources=[group]))` +- Creating a non-blocking stream on a green context with + `ctx.create_stream()` +- Using CUDA events with timing enabled to measure kernel wall time + across streams +- Cleaning up green contexts safely with `ctx.close()` + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - device management, SM partitioning, green contexts, compilation, and launching +- `numpy` - scalar kernel arguments + +## Key APIs + +### From `cuda.core` + +- `Device.resources.sm` - the device's SM-type device resource +- `SMResource.split(SMResourceOptions(count=(A, B)))` - partition SMs + into disjoint groups (plus an optional remainder) +- `Device.create_context(ContextOptions(resources=[sm_group]))` - + create a green context provisioned with a specific SM partition +- `Context.is_green` / `Context.resources` - introspect a green + context +- `Context.create_stream()` - create a non-blocking stream that is + tied to the green context's SM partition +- `Context.close()` - destroy a green context (must not be the + thread's current context when closed) +- `Device.create_event(EventOptions(timing_enabled=True))` / + `Stream.record(event)` / `event2 - event1` - measure elapsed time + in milliseconds between two events on the device +- `Program(..., ProgramOptions(std="c++17", arch=f"sm_{device.arch}"))` + / `program.compile("cubin", name_expressions=(...))` - compile the + delay and critical kernels in one TU +- `launch(stream, LaunchConfig(grid=..., block=...), kernel, ...)` - + submit a kernel on a specific stream + +## Requirements + +### Hardware + +- Any NVIDIA GPU supported by green contexts. +- Green-context SM partitioning is designed for larger server GPUs + (H100, H200, B200, ...) but works on any supported GPU as long as + the SM count is large enough to split meaningfully. + +### Software + +- NVIDIA driver >= 12.4 +- CUDA Toolkit 13.0 or newer. +- Python 3.10 or newer. +- `cuda-core` (`>=1.0.0`) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/greenContext +pip install -r requirements.txt +``` + +## How to Run + +### Basic usage + +The auto-default split reserves a small partition (~16 SMs) for the +critical kernel and gives the rest to the long-running kernel. The +exact sizes are chosen by probing the driver with a dry-run `sm.split`, +escalating the alignment granularity in powers of two until the driver +accepts the pair. This handles architectures where the driver enforces +stricter alignment (e.g. TPC/GPC-pair alignment on Blackwell) than the +reported `min_partition_size`. When that happens the sample prints a +`Note:` line with the granularity it landed on. + +```bash +cd cuda-samples/python/2_CoreConcepts/greenContext +python greenContext.py +``` + +### Match the CUDA programming guide example (112 + 16) + +```bash +python greenContext.py --split 112,16 +``` + +### Tune the workload + +```bash +# Longer long-running kernel, larger host launch gap +python greenContext.py --delay-us 3000 --launch-gap-ms 2.0 + +# Smaller/lighter critical kernel so its own compute time is negligible +python greenContext.py --critical-n 65536 --critical-iters 128 + +# Symmetric split: maximum SMs for the critical kernel, long kernel is +# roughly 2x slower but the critical kernel runs close to its reference time. +python greenContext.py --split 64,64 + +# Use a specific GPU +python greenContext.py --device 1 +``` + +### All options + +``` +--device CUDA device ID (default: 0) +--split SM split as 'LONG,CRITICAL', e.g. '112,16'. + Each side must be a multiple of the device's + min_partition_size, and the driver may enforce additional + architecture-specific alignment (e.g. TPC/partition-grid + alignment on Blackwell). Omit --split to auto-select a + driver-accepted split. +--delay-us Per-block busy-wait of the delay kernel, in us (default: 2000) +--delay-waves Number of waves of the delay kernel on the long + partition. Drives the default --delay-blocks (default: 16) +--delay-blocks Number of blocks for the delay kernel. Overrides + --delay-waves if set. + (default: --delay-waves * device SM count) +--critical-n Work size of the critical kernel (default: 4194304) +--critical-iters Inner math-loop iterations inside the critical kernel. + Higher values make the critical kernel's own compute + time more substantial relative to its wait time + (default: 1024) +--launch-gap-ms Host delay between launching the long and critical + kernels (default: 1.0 ms) +``` + +## Expected Output + +The output depends on the GPU and the number of SMs. +On an RTX 4090 (128 SMs) with the default auto split: + +``` +[Green Context Sample using CUDA Core API] +Device: NVIDIA GeForce RTX 4090 +Compute Capability: sm_89 +Total SMs: 128 +Min. SM partition size: 2 +SM co-scheduled alignment: 2 +SM split (long/critical): 112 / 16 +Workload parameters: + delay kernel: 2048 blocks, 2000 us/block (~32.0 ms on 128 SMs) + critical kernel: 4194304 elements, 1024 inner iterations + host launch gap: 1.0 ms + +Compiling kernels ... +Running reference scenario (critical kernel alone) ... +Running baseline scenario (primary context) ... +Running green context scenario ... + +scenario SMs (long/crit) long (ms) crit total (ms) crit offset (ms) +------------------------------------------------------------------------------------------------------- +crit alone (primary ctx) -/128 - 0.425 - +baseline (primary ctx) 128/128 32.034 30.024 1.090 +green ctx (112+16 SMs) 112/16 38.017 2.696 1.075 + +long (ms) : wall time of the delay kernel +crit total (ms) : launch-to-complete wall time of the critical kernel +crit offset (ms) : when the critical stream started, relative to the long stream start + +Critical-kernel latency speedup (baseline vs green ctx): 11.14x +Green-ctx compute cost vs unconstrained (crit alone): 6.34x +Baseline time spent waiting for SMs (not computing): ~29.60 ms + +Done +``` + +**What to look for:** + +- The critical kernel alone (reference row) takes only a fraction of + a millisecond; almost all of the baseline's `crit total` is time + spent queued waiting for SMs, not compute. +- The **critical kernel's wall time drops sharply** in the + green-context scenario (from ~30 ms to a few ms in the example + above) because it no longer waits for SMs held by the long-running + kernel. +- The **long-running kernel's duration may increase** proportional + to the reduction in SMs available to it (128 -> 112 SMs ~= 14% + slower; 128 -> 64 SMs ~= 2x slower). This is an expected tradeoff: + you reserve SMs for a critical kernel by taking them away from the + background workload. +- The **compute cost** ratio (`green / reference`) shows how close + the critical kernel is to ideal linear scaling with its SM count. + A 112/16 split gives the critical kernel only 12.5% of the SMs and + costs it roughly 6-7x its reference time; a 64/64 split gives it + half the SMs and costs roughly 1.5-2x. +- The `crit offset` column is approximately `--launch-gap-ms` in + both full scenarios; it confirms the host launched the critical + kernel the same amount of time after the long kernel in both runs. + +Exact timings vary with GPU model, driver version, clock state, and +other concurrent GPU work. + +## Files + +- `greenContext.py` - Python implementation using `cuda.core` green-context APIs +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [Green Contexts in the CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#green-contexts) +- [`cuda.core` green-context test suite](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/tests/test_green_context.py) - the authoritative API reference diff --git a/samples/greenContext/greenContext.py b/samples/greenContext/greenContext.py new file mode 100644 index 00000000000..e8464c0d6fe --- /dev/null +++ b/samples/greenContext/greenContext.py @@ -0,0 +1,727 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2"] +# /// + +""" +Green Context Sample using CUDA Core API. + +Three scenarios are timed with CUDA events and compared: + + 1. Reference: the critical kernel alone on the primary context, + with no competing work. Establishes the pure compute time of + the critical kernel with access to every SM on the device. + 2. Baseline: both kernels run on the device's primary context, + on two non-blocking streams. They contend for all SMs. + 3. Green contexts: SMs are split into two disjoint groups; each + kernel runs on a stream belonging to its own green context. + +The headline metric is the total wall time of the critical kernel +from launch to completion on its stream. In the baseline it is +dominated by waiting behind the long-running kernel; with green +contexts it reflects only the kernel's own compute time on a +smaller SM partition. The reference row separates those effects. + +Note: Parallel execution on the GPU is never guaranteed. Green +contexts remove one common source of contention (shared SMs) but +they are not a hard scheduling promise. +""" + +import argparse +import sys +import time +from dataclasses import dataclass +from typing import List, Tuple + +import numpy as np + +from cuda.core import ( + ContextOptions, + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + SMResourceOptions, + launch, +) + +# Two CUDA kernels: +# 1. The delay kernel spins until `cycles` SM clock ticks have elapsed. +# 2. The critical kernel does a small amount of useful work. + +KERNEL_SRC = r""" +extern "C" __global__ void delay_kernel(unsigned long long cycles) +{ + unsigned long long start = clock64(); + while ((unsigned long long)(clock64() - start) < cycles) { } +} + +extern "C" __global__ void critical_kernel(float *out, int n, int iters) +{ + int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i < n) { + // Two dependent accumulators so the compiler cannot collapse the + // loop into a closed-form expression. `iters` is a runtime argument + // for the same reason. + float v = (float)i * 1e-6f + 1.0f; + float u = (float)i * 1e-7f + 0.5f; + for (int k = 0; k < iters; ++k) { + v = v * 1.000001f + u; + u = u * 0.999999f + v * 1e-7f; + } + out[i] = v + u; + } +} +""" + + +@dataclass +class ScenarioResult: + name: str + critical_total_ms: float + critical_sm_count: int + long_ms: float | None = None + critical_offset_ms: float | None = None + long_sm_count: int | None = None + + +def print_sm_topology(device: Device) -> None: + sm = device.resources.sm + print("[Green Context Sample using CUDA Core API]") + print(f"Device: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + print(f"Total SMs: {sm.sm_count}") + print(f"Min. SM partition size: {sm.min_partition_size}") + print(f"SM co-scheduled alignment: {sm.coscheduled_alignment}") + + +def _align_down(n: int, k: int) -> int: + if k <= 0: + return n + return (n // k) * k + + +def _driver_accepts_split(sm, long_count: int, critical_count: int) -> bool: + if long_count <= 0 or critical_count <= 0: + return False + try: + groups, _ = sm.split( + SMResourceOptions(count=(long_count, critical_count)), + dry_run=True, + ) + except Exception: + return False + actual = tuple(g.sm_count for g in groups) + return actual == (long_count, critical_count) + + +def _find_working_split(sm, prefer_critical: int | None = None) -> Tuple[int, int, int] | None: + """ + Probe the driver for a (long, critical) split it actually accepts. + + Escalates the alignment granularity from `min_partition_size` upward in + powers of two, requiring BOTH sides to be multiples of the current + granularity. This handles architectures where the driver's true + allocation granularity is larger than the reported + `min_partition_size` (e.g. TPC/GPC-pair alignment on Blackwell: on a + 188-SM part `min_partition_size` is 8 but the driver actually requires + each side to be a multiple of 16). + + Returns (long_count, critical_count, granularity) or None. The + granularity is the smallest power-of-two multiple of + `min_partition_size` at which both sides are aligned and the driver + accepts the pair. + """ + total = sm.sm_count + min_part = sm.min_partition_size + if min_part <= 0: + return None + + if prefer_critical is None or prefer_critical <= 0: + prefer_critical = max(min_part, min(16, total // 8)) + + # Escalate granularity in powers of two. The upper bound is half of + # `total` because below that we cannot fit two partitions of size + # >= granularity. + granularity = min_part + while granularity * 2 <= total: + base = max(granularity, _align_down(prefer_critical, granularity)) + + candidates: List[int] = [] + seen = set() + + # Default-arg binding captures the current loop iteration's values + # (granularity, seen, candidates). push is never stored — it's only + # called in this same iteration — but the explicit binding silences + # ruff B023 and documents the intent. + def push(c: int, granularity: int = granularity, seen: set = seen, candidates: List[int] = candidates) -> None: + if c >= granularity and c <= total - granularity and c not in seen: + seen.add(c) + candidates.append(c) + + # Walk outward from `base` (the preferred critical size, aligned + # down to the current granularity) in steps of granularity. + push(base) + max_steps = max(total // granularity, 1) + for step in range(1, max_steps + 1): + push(base + step * granularity) + push(base - step * granularity) + + for critical in candidates: + long_count = _align_down(total - critical, granularity) + if long_count < granularity: + continue + if _driver_accepts_split(sm, long_count, critical): + return long_count, critical, granularity + + granularity *= 2 + + return None + + +def _format_suggestion(sm, prefer_critical: int | None) -> str | None: + """ + Return a '--split A,B' string the driver is known to accept, or None + if we couldn't find one. + """ + found = _find_working_split(sm, prefer_critical=prefer_critical) + if found is None: + return None + long_count, critical_count, _granularity = found + return f"--split {long_count},{critical_count}" + + +def parse_split(arg: str | None, device: Device) -> Tuple[int, int]: + """ + Parse the --split "A,B" CLI argument and validate it against the device. + + Returns (long_count, critical_count). + """ + sm = device.resources.sm + total = sm.sm_count + min_part = sm.min_partition_size + + if arg is None: + # Auto: reserve a small aligned slice for the critical kernel and + # hand the rest (also aligned) to the long-running kernel. We + # can't trust `min_partition_size` alone: on some GPUs (e.g. + # 188-SM Blackwell) the driver requires stricter alignment than + # it reports. Escalate the granularity until the driver accepts + # a pair. + prefer_critical = max(min_part, min(16, total // 8)) + found = _find_working_split(sm, prefer_critical=prefer_critical) + if found is None: + print( + "Error: could not find an SM split that the driver accepts " + f"on this device (total SMs={total}, " + f"min_partition_size={min_part})." + ) + print( + " The driver enforces architecture-specific alignment " + "rules beyond min_partition_size; try passing an explicit " + "--split." + ) + sys.exit(1) + long_count, critical_count, granularity = found + if granularity > min_part: + print( + f"Note: driver required stricter alignment than " + f"min_partition_size={min_part}; selected split uses " + f"granularity={granularity} SMs." + ) + return long_count, critical_count + + # User-provided split. + try: + parts = [int(x.strip()) for x in arg.split(",")] + except ValueError: + print(f"Error: --split must look like 'A,B', got: {arg!r}") + sys.exit(1) + if len(parts) != 2: + print(f"Error: --split must contain exactly two comma-separated integers, got: {arg!r}") + sys.exit(1) + long_count, critical_count = parts + + errors = [] + if long_count <= 0 or critical_count <= 0: + errors.append("both partition sizes must be positive") + if long_count % min_part != 0 or critical_count % min_part != 0: + errors.append(f"each size must be a multiple of min_partition_size={min_part}") + if long_count + critical_count > total: + errors.append(f"sum {long_count + critical_count} exceeds device total of {total} SMs") + + if errors: + print("Error: invalid --split value:") + for e in errors: + print(f" - {e}") + suggestion = _format_suggestion(sm, prefer_critical=critical_count if critical_count > 0 else None) + if suggestion is not None: + print(f"Tip: a driver-accepted split on this device is {suggestion}") + sys.exit(1) + + # Confirm the driver itself accepts the split. The well-known alignment + # checks above are necessary but not sufficient on every architecture. + try: + groups, _ = sm.split( + SMResourceOptions(count=(long_count, critical_count)), + dry_run=True, + ) + except Exception as e: + print(f"Error: driver rejected the requested split: {e}") + print( + " The sample's own alignment checks are not exhaustive on " + "every architecture; the driver enforces additional hardware " + "constraints (for example TPC/partition-grid alignment)." + ) + suggestion = _format_suggestion(sm, prefer_critical=critical_count) + if suggestion is not None: + print(f"Tip: a driver-accepted split on this device is {suggestion}") + sys.exit(1) + + actual = tuple(g.sm_count for g in groups) + if actual != (long_count, critical_count): + print(f"Error: driver adjusted the requested split to {actual}.") + suggestion = _format_suggestion(sm, prefer_critical=critical_count) + if suggestion is not None: + print(f"Tip: a driver-accepted split on this device is {suggestion}") + else: + print(" Pick a different --split, or omit it for the auto default.") + sys.exit(1) + + return long_count, critical_count + + +def compile_kernels(device: Device): + options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + program = Program(KERNEL_SRC, code_type="c++", options=options) + module = program.compile( + "cubin", + name_expressions=("delay_kernel", "critical_kernel"), + ) + return module.get_kernel("delay_kernel"), module.get_kernel("critical_kernel") + + +def microseconds_to_cycles(device: Device, microseconds: float) -> int: + """ + Convert microseconds to SM clock cycles, using the reported GPU clock rate. + clock_rate is in kHz, so 1 us = clock_rate_kHz / 1000 cycles. + """ + clock_khz = device.properties.clock_rate + return int(microseconds * clock_khz / 1000.0) + + +def _run_one( + device: Device, + name: str, + long_stream, + critical_stream, + long_sm_count: int, + critical_sm_count: int, + delay_kernel, + critical_kernel, + delay_cycles: int, + delay_blocks: int, + critical_out_ptr: int, + critical_n: int, + critical_iters: int, + launch_gap_s: float, +) -> ScenarioResult: + """ + Launch the delay kernel on `long_stream`, wait `launch_gap_s` on the host, + launch the critical kernel on `critical_stream`, and time both with events. + """ + + # Create events with timing enabled. + opts = EventOptions(timing_enabled=True) + e_long_start = device.create_event(opts) + e_long_end = device.create_event(opts) + e_crit_start = device.create_event(opts) + e_crit_end = device.create_event(opts) + + # 1024 threads/block ensures at most one delay block is resident per SM + # on current architectures, so grid size directly controls the number of + # waves: delay_blocks / sm_count_visible_to_stream. + delay_block = 1024 + delay_cfg = LaunchConfig(grid=delay_blocks, block=delay_block) + critical_block = 256 + critical_grid = (critical_n + critical_block - 1) // critical_block + critical_cfg = LaunchConfig(grid=critical_grid, block=critical_block) + + # Start of timed region + long_stream.record(e_long_start) + launch(long_stream, delay_cfg, delay_kernel, np.uint64(delay_cycles)) + long_stream.record(e_long_end) + + time.sleep(launch_gap_s) + + critical_stream.record(e_crit_start) + launch( + critical_stream, + critical_cfg, + critical_kernel, + critical_out_ptr, + np.int32(critical_n), + np.int32(critical_iters), + ) + critical_stream.record(e_crit_end) + + # Sync both streams so every event has completed and is measurable. + long_stream.sync() + critical_stream.sync() + # End of timed region + + return ScenarioResult( + name=name, + long_ms=e_long_end - e_long_start, + critical_total_ms=e_crit_end - e_crit_start, + critical_offset_ms=e_crit_start - e_long_start, + long_sm_count=long_sm_count, + critical_sm_count=critical_sm_count, + ) + + +def run_critical_alone( + device: Device, + critical_kernel, + critical_n: int, + critical_iters: int, +) -> ScenarioResult: + """ + Critical kernel alone on the primary context, no competing work. + Establishes the pure compute time with every SM on the device available. + """ + stream = device.create_stream() + out = device.allocate(critical_n * 4, stream=stream) + total_sm = device.resources.sm.sm_count + try: + opts = EventOptions(timing_enabled=True) + e_start = device.create_event(opts) + e_end = device.create_event(opts) + block = 256 + grid = (critical_n + block - 1) // block + cfg = LaunchConfig(grid=grid, block=block) + + stream.record(e_start) + launch( + stream, + cfg, + critical_kernel, + int(out.handle), + np.int32(critical_n), + np.int32(critical_iters), + ) + stream.record(e_end) + stream.sync() + + return ScenarioResult( + name="crit alone (primary ctx)", + critical_total_ms=e_end - e_start, + critical_sm_count=total_sm, + ) + finally: + out.close() + + +def run_baseline( + device: Device, + delay_kernel, + critical_kernel, + delay_cycles: int, + delay_blocks: int, + critical_n: int, + critical_iters: int, + launch_gap_s: float, +) -> ScenarioResult: + """Both kernels on the primary context, two non-blocking streams.""" + long_stream = device.create_stream() + critical_stream = device.create_stream() + out = device.allocate(critical_n * 4, stream=critical_stream) + total_sm = device.resources.sm.sm_count + try: + return _run_one( + device, + name="baseline (primary ctx)", + long_stream=long_stream, + critical_stream=critical_stream, + long_sm_count=total_sm, + critical_sm_count=total_sm, + delay_kernel=delay_kernel, + critical_kernel=critical_kernel, + delay_cycles=delay_cycles, + delay_blocks=delay_blocks, + critical_out_ptr=int(out.handle), + critical_n=critical_n, + critical_iters=critical_iters, + launch_gap_s=launch_gap_s, + ) + finally: + out.close() + + +def run_green_context( + device: Device, + split: Tuple[int, int], + delay_kernel, + critical_kernel, + delay_cycles: int, + delay_blocks: int, + critical_n: int, + critical_iters: int, + launch_gap_s: float, +) -> ScenarioResult: + """Each kernel on its own green context, with disjoint SM partitions.""" + long_count, critical_count = split + sm = device.resources.sm + groups, _remainder = sm.split(SMResourceOptions(count=(long_count, critical_count))) + assert len(groups) == 2 + long_group, critical_group = groups + + # Create the large ctx last so it's closed first: order matters only for + # ensuring we never try to close a ctx that's currently the thread's + # active ctx. + ctx_long = device.create_context(ContextOptions(resources=[long_group])) + ctx_crit = None + out = None + try: + ctx_crit = device.create_context(ContextOptions(resources=[critical_group])) + + long_stream = ctx_long.create_stream() + critical_stream = ctx_crit.create_stream() + out = device.allocate(critical_n * 4, stream=critical_stream) + + return _run_one( + device, + name=f"green ctx ({long_count}+{critical_count} SMs)", + long_stream=long_stream, + critical_stream=critical_stream, + long_sm_count=ctx_long.resources.sm.sm_count, + critical_sm_count=ctx_crit.resources.sm.sm_count, + delay_kernel=delay_kernel, + critical_kernel=critical_kernel, + delay_cycles=delay_cycles, + delay_blocks=delay_blocks, + critical_out_ptr=int(out.handle), + critical_n=critical_n, + critical_iters=critical_iters, + launch_gap_s=launch_gap_s, + ) + finally: + if out is not None: + out.close() + # Streams must be released before their owning ctx; letting them go out + # of scope here is sufficient since no references escape this frame. + if ctx_crit is not None: + ctx_crit.close() + ctx_long.close() + + +def _fmt_ms(value: float | None, width: int) -> str: + if value is None: + return f"{'-':>{width}}" + return f"{value:>{width}.3f}" + + +def print_results(results: List[ScenarioResult]) -> None: + print() + header = f"{'scenario':<32}{'SMs (long/crit)':>20}{'long (ms)':>14}{'crit total (ms)':>18}{'crit offset (ms)':>19}" + print(header) + print("-" * len(header)) + for r in results: + long_sm = "-" if r.long_sm_count is None else str(r.long_sm_count) + sms = f"{long_sm}/{r.critical_sm_count}" + print( + f"{r.name:<32}{sms:>20}" + f"{_fmt_ms(r.long_ms, 14)}{_fmt_ms(r.critical_total_ms, 18)}" + f"{_fmt_ms(r.critical_offset_ms, 19)}" + ) + print() + print("long (ms) : wall time of the delay kernel") + print("crit total (ms) : launch-to-complete wall time of the critical kernel") + print("crit offset (ms) : when the critical stream started, relative to the long stream start") + + +def report_speedup( + alone: ScenarioResult, + baseline: ScenarioResult, + green: ScenarioResult, +) -> None: + """ + Print three headline numbers that put the raw scenario timings in context: + """ + if baseline.critical_total_ms <= 0 or alone.critical_total_ms <= 0: + return + latency_speedup = baseline.critical_total_ms / max(green.critical_total_ms, 1e-9) + compute_cost = green.critical_total_ms / alone.critical_total_ms + wait_ms = max(0.0, baseline.critical_total_ms - alone.critical_total_ms) + print() + print(f"Critical-kernel latency speedup (baseline vs green ctx): {latency_speedup:.2f}x") + print(f"Green-ctx compute cost vs unconstrained (crit alone): {compute_cost:.2f}x") + print(f"Baseline time spent waiting for SMs (not computing): ~{wait_ms:.2f} ms") + + +def main(): + parser = argparse.ArgumentParser( + description="Green Context sample using CUDA Core API", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device ID (default: 0)") + parser.add_argument( + "--split", + type=str, + default=None, + help="SM split as 'LONG,CRITICAL', e.g. '112,16'. Default: auto.", + ) + parser.add_argument( + "--delay-us", + type=int, + default=2000, + help=("Per-block busy-wait duration of the delay kernel, in microseconds (default: 2000)"), + ) + parser.add_argument( + "--delay-waves", + type=int, + default=16, + help=( + "Number of waves of the delay kernel on the long partition. " + "Drives the default --delay-blocks (default: 16)." + ), + ) + parser.add_argument( + "--delay-blocks", + type=int, + default=None, + help=( + "Number of blocks launched for the delay kernel. " + "Overrides --delay-waves if set. " + "Default: --delay-waves * device SM count." + ), + ) + parser.add_argument( + "--critical-n", + type=int, + default=1 << 22, + help="Work size of the critical kernel (default: 4194304)", + ) + parser.add_argument( + "--critical-iters", + type=int, + default=1024, + help=( + "Iterations of the inner math loop inside the critical kernel. " + "Higher values make the critical kernel's compute time more " + "substantial (default: 1024)." + ), + ) + parser.add_argument( + "--launch-gap-ms", + type=float, + default=1.0, + help=("Host delay between launching the long and critical kernels, in ms (default: 1.0)"), + ) + args = parser.parse_args() + + try: + device = Device(args.device) + device.set_current() + except Exception as e: + print(f"Error: failed to initialize CUDA device {args.device}: {e}") + return 1 + + print_sm_topology(device) + + long_count, critical_count = parse_split(args.split, device) + print(f"SM split (long/critical): {long_count} / {critical_count}") + + sm_count = device.resources.sm.sm_count + delay_blocks = args.delay_blocks or args.delay_waves * sm_count + delay_cycles = microseconds_to_cycles(device, args.delay_us) + launch_gap_s = max(0.0, args.launch_gap_ms / 1000.0) + + # Rough estimate of the long kernel's duration on the full device. Mostly + # informational; the real value is reported after the run. + est_long_ms = (delay_blocks / sm_count) * (args.delay_us / 1000.0) + + print("Workload parameters:") + print(f" delay kernel: {delay_blocks} blocks, {args.delay_us} us/block (~{est_long_ms:.1f} ms on {sm_count} SMs)") + print(f" critical kernel: {args.critical_n} elements, {args.critical_iters} inner iterations") + print(f" host launch gap: {args.launch_gap_ms} ms") + + print() + print("Compiling kernels ...") + delay_k, crit_k = compile_kernels(device) + + try: + print("Running reference scenario (critical kernel alone) ...") + alone = run_critical_alone( + device, + crit_k, + args.critical_n, + args.critical_iters, + ) + + print("Running baseline scenario (primary context) ...") + baseline = run_baseline( + device, + delay_k, + crit_k, + delay_cycles, + delay_blocks, + args.critical_n, + args.critical_iters, + launch_gap_s, + ) + + print("Running green context scenario ...") + green = run_green_context( + device, + (long_count, critical_count), + delay_k, + crit_k, + delay_cycles, + delay_blocks, + args.critical_n, + args.critical_iters, + launch_gap_s, + ) + except Exception as e: + print(f"Error: scenario failed: {e}") + import traceback + + traceback.print_exc() + return 1 + + print_results([alone, baseline, green]) + report_speedup(alone, baseline, green) + + print("\nDone") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/greenContext/requirements.txt b/samples/greenContext/requirements.txt new file mode 100644 index 00000000000..e25bb158237 --- /dev/null +++ b/samples/greenContext/requirements.txt @@ -0,0 +1,3 @@ +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 diff --git a/samples/ipcMemoryPool/README.md b/samples/ipcMemoryPool/README.md new file mode 100644 index 00000000000..cfecb531681 --- /dev/null +++ b/samples/ipcMemoryPool/README.md @@ -0,0 +1,140 @@ +# ipcMemoryPool (Python) + +## Description + +This sample demonstrates how to share GPU memory between Python +processes using CUDA Inter-Process Communication (IPC) and +`cuda.core`'s IPC-enabled memory pools. + +By default each process has its own CUDA virtual address space and +cannot see allocations made by another process. With an IPC-enabled +`DeviceMemoryResource` the parent allocates once, and the child +process maps that same physical GPU memory into its own address space +so both read and write the same bytes. The sample performs a +round-trip test: + +1. Parent creates an IPC-enabled `DeviceMemoryResource` and allocates + a `Buffer`. +2. Parent fills the buffer with a known pattern. +3. Parent sends the `Buffer` to a child process through an + `multiprocessing.Queue`. cuda.core's pickle reducers re-create the + memory resource and map the buffer in the child. +4. Child verifies the parent's pattern, writes a new pattern, and + signals completion. +5. Parent verifies the child's writes. + +## What You'll Learn + +- Enabling IPC on a `DeviceMemoryResource` with `ipc_enabled=True` +- Sending `Buffer` objects across process boundaries via `mp.Queue` +- How cuda.core's pickle reducers rebuild the MR and map the buffer + in the receiving process +- Why `multiprocessing` must use the `"spawn"` start method with CUDA +- Detecting IPC support at runtime (POSIX file-descriptor handle + type, memory-pool support, Linux-only) + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - IPC-enabled memory resources and buffer reducers +- `cupy` - zero-copy views over the shared device memory via DLPack +- `multiprocessing` - standard library process management + +## Key APIs + +### From `cuda.core` + +- `DeviceMemoryResource(device, options=DeviceMemoryResourceOptions(ipc_enabled=True))` - create an IPC-enabled memory pool +- `DeviceMemoryResourceOptions(max_size=..., ipc_enabled=True)` - configure the underlying pool +- `mr.allocate(nbytes)` - allocate a `Buffer` from the IPC pool +- `Buffer.is_mapped` - True when the buffer is usable in the current process +- `Device.properties.memory_pools_supported` - runtime feature check +- `Device.properties.handle_type_posix_file_descriptor_supported` - runtime feature check + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Device that supports CUDA memory pools and POSIX file-descriptor IPC handles (the sample detects and reports this at startup) +- Minimum GPU memory: 512 MB + +### Software + +- Linux x86_64 (POSIX file-descriptor IPC handles are not available on Windows or macOS) +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/4_DistributedComputing/ipcMemoryPool +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/4_DistributedComputing/ipcMemoryPool +python ipcMemoryPool.py +``` + +### With custom parameters + +```bash +# Larger shared buffer +python ipcMemoryPool.py --elements 65536 + +# Use a specific GPU +python ipcMemoryPool.py --device 1 +``` + +On platforms or devices that do not support CUDA IPC, the sample +prints a diagnostic and exits cleanly with status 0. + +## Expected Output + +``` +Device: +Compute Capability: + +Created IPC-enabled DeviceMemoryResource (is_ipc_enabled=True) +Parent wrote pattern (first 5 values): [100. 101. 102. 103. 104.] +Parent sent buffer to child pid=; waiting... +[child pid=] received buffer: is_mapped=True, size=4096 +Parent sees child's pattern (first 5 values): [-0. -1. -2. -3. -4.] +IPC round-trip: OK +``` + +**Note:** Device name, compute capability, and child PID will vary +based on your system. + +## Files + +- `ipcMemoryPool.py` - Python implementation using `cuda.core` IPC memory pools +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` memory API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#memory) +- Upstream `cuda.core` IPC tests: [`test_memory_ipc.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/tests/memory_ipc/test_memory_ipc.py) +- [CUDA IPC programming guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#interprocess-communication) diff --git a/samples/ipcMemoryPool/ipcMemoryPool.py b/samples/ipcMemoryPool/ipcMemoryPool.py new file mode 100644 index 00000000000..f0df564bcc2 --- /dev/null +++ b/samples/ipcMemoryPool/ipcMemoryPool.py @@ -0,0 +1,214 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=1.24.0"] +# /// + +""" +IPC Memory Pool with cuda.core + +Share GPU memory between Python processes using CUDA Inter-Process +Communication (IPC) and cuda.core's IPC-enabled memory pools. By default +each worker process has its own CUDA virtual address space and cannot see +allocations made by another process. With an IPC-enabled +``DeviceMemoryResource`` the parent can allocate once, and the child +process can map that same physical GPU memory into its own address space +so both read and write the same bytes. + +The sample does a round-trip test: + + 1. Parent creates an IPC-enabled ``DeviceMemoryResource`` and allocates + a ``Buffer``. + 2. Parent fills the buffer with a known pattern. + 3. Parent sends the ``Buffer`` to a child process through an + ``mp.Queue`` - cuda.core's pickle reducers take care of re-creating + the memory resource and mapping the buffer in the child. + 4. Child verifies the parent's pattern, writes a new pattern, and + signals completion. + 5. Parent verifies the child's writes. + +IPC requires Linux (POSIX file-descriptor handles) and device support for +memory pools. On unsupported platforms the sample prints a diagnostic and +exits cleanly. +""" + +import multiprocessing as mp +import platform +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import ( + Device, + DeviceMemoryResource, + DeviceMemoryResourceOptions, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +CHILD_TIMEOUT_SEC = 30 + + +def check_ipc_support(device) -> bool: + """Return True if this device/platform supports CUDA IPC memory pools.""" + if platform.system() != "Linux": + print(f"IPC via POSIX file descriptors is only supported on Linux (detected {platform.system()}).") + return False + if not device.properties.memory_pools_supported: + print("Device does not support CUDA memory pools.") + return False + if not device.properties.handle_type_posix_file_descriptor_supported: + print("Device/platform does not support POSIX-fd IPC handles.") + return False + return True + + +def child_worker(q_in, q_out, n_elements, parent_seed, child_seed): + """Runs in a separate process. Verifies and modifies the shared buffer.""" + device = Device(0) + device.set_current() + pid = mp.current_process().pid + + # The Buffer (and its MR) are reconstructed and mapped in this process + # when the queued object is unpickled. Both ``is_mapped`` flags are + # True here. + buffer = q_in.get(timeout=CHILD_TIMEOUT_SEC) + print(f"[child pid={pid}] received buffer: is_mapped={buffer.is_mapped}, size={buffer.size}") + + # Build a zero-copy CuPy view of the shared device memory. + arr = cp.from_dlpack(buffer).view(dtype=cp.float32) + + # Verify the parent's pattern. + expected_parent = cp.arange(n_elements, dtype=cp.float32) + float(parent_seed) + if not cp.allclose(arr, expected_parent): + print("[child] ERROR: parent's pattern did not match expectation") + buffer.close() + q_out.put("fail") + return + + # Write a new pattern for the parent to verify. + arr[:] = cp.arange(n_elements, dtype=cp.float32) * float(child_seed) + device.sync() + + buffer.close() + q_out.put("done") + + +def main() -> int: + import argparse + + parser = argparse.ArgumentParser(description="Share a GPU buffer between two processes via CUDA IPC") + parser.add_argument( + "--elements", + type=int, + default=1024, + help="Number of float32 elements in the shared buffer (default: 1024)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + # CUDA is incompatible with the ``fork`` start method because forked + # children inherit a corrupt CUDA state. Always use ``spawn``. + mp.set_start_method("spawn", force=True) + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + + if not check_ipc_support(device): + print("\nCUDA IPC is not available on this system; exiting cleanly.") + return 0 + + N = args.elements + nbytes = N * np.dtype(np.float32).itemsize + parent_seed = 100 + child_seed = -1.0 + + # Create an IPC-enabled memory pool. Buffers allocated from this MR + # are picklable and can be shared across processes. + mr = DeviceMemoryResource( + device, + options=DeviceMemoryResourceOptions( + max_size=max(nbytes * 4, 1 << 20), + ipc_enabled=True, + ), + ) + print(f"Created IPC-enabled DeviceMemoryResource (is_ipc_enabled={mr.is_ipc_enabled})") + + buffer = mr.allocate(nbytes, stream=device.default_stream) + try: + # Fill the buffer with a known pattern from the parent side. + arr = cp.from_dlpack(buffer).view(dtype=cp.float32) + arr[:] = cp.arange(N, dtype=cp.float32) + float(parent_seed) + device.sync() + print(f"Parent wrote pattern (first 5 values): {arr[:5].get()}") + + # Launch the child process and hand the buffer over. + q_to_child = mp.Queue() + q_from_child = mp.Queue() + child = mp.Process( + target=child_worker, + args=(q_to_child, q_from_child, N, parent_seed, child_seed), + ) + child.start() + q_to_child.put(buffer) + print(f"Parent sent buffer to child pid={child.pid}; waiting...") + + msg = q_from_child.get(timeout=CHILD_TIMEOUT_SEC) + child.join(timeout=CHILD_TIMEOUT_SEC) + + if msg != "done" or child.exitcode != 0: + print(f"Child failed: msg={msg!r}, exitcode={child.exitcode}") + return 1 + + # Verify the child's writes are visible from the parent. + device.sync() + got = arr[:5].get() + expected = (np.arange(N, dtype=np.float32) * child_seed)[:5] + print(f"Parent sees child's pattern (first 5 values): {got}") + if np.allclose(got, expected): + print("IPC round-trip: OK") + return 0 + print(f"IPC round-trip: FAILED (expected {expected})") + return 1 + finally: + buffer.close() + mr.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/ipcMemoryPool/requirements.txt b/samples/ipcMemoryPool/requirements.txt new file mode 100644 index 00000000000..c33f5dd8d9f --- /dev/null +++ b/samples/ipcMemoryPool/requirements.txt @@ -0,0 +1,4 @@ +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=1.24.0 diff --git a/samples/jitLtoLinking/README.md b/samples/jitLtoLinking/README.md new file mode 100644 index 00000000000..8f7dc7aa4c6 --- /dev/null +++ b/samples/jitLtoLinking/README.md @@ -0,0 +1,133 @@ +# JIT Compilation and Link-Time Optimization (Python) + +## Description + +This sample demonstrates how to build a kernel out of two independently +compiled translation units and link them at runtime with +`cuda.core.Linker`. This is the pattern a library would use to accept +user-supplied device code as a plug-in without recompiling its own +kernels from scratch. + +The sample runs the same program in two linking modes: + +1. **PTX linking** - each module is compiled with + `ProgramOptions(relocatable_device_code=True)` down to PTX, and the + `Linker` emits a final cubin. The two modules stay independently + compiled (no cross-module inlining). +2. **Link-Time Optimization (LTO)** - each module is compiled with + `ProgramOptions(link_time_optimization=True)` down to LTO IR, and the + `Linker` is configured with `LinkerOptions(link_time_optimization=True)` + so the optimizer runs again across both modules, typically matching + the code generation of a single-source build. + +The "main" kernel `apply_transform` calls a `user_transform` device +function that lives in a separate source string, and the results of both +linking modes are verified against a NumPy reference. + +## What You'll Learn + +- Compiling multiple `Program` objects into PTX or LTO IR +- Linking independent object codes into a single cubin with `Linker` +- Choosing between `relocatable_device_code` and `link_time_optimization` +- How a library's main kernel can call into user-supplied device code +- When to prefer LTO over plain PTX linking + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Pythonic access to CUDA runtime, programs, and the JIT linker +- `cupy` - input and output buffers on the GPU +- `numpy` - reference computation on the host + +## Key APIs + +### From `cuda.core` + +- `ProgramOptions(relocatable_device_code=True)` + `Program.compile("ptx")` - produce relocatable PTX +- `ProgramOptions(link_time_optimization=True)` + `Program.compile("ltoir")` - produce LTO IR +- `Linker(*object_codes, options=LinkerOptions(...))` - create a JIT linker over multiple object codes +- `LinkerOptions(link_time_optimization=True)` - opt into LTO during linking +- `Linker.link("cubin")` - produce a loadable module +- `ObjectCode.get_kernel(name)` - fetch a kernel from the linked module + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/jitLtoLinking +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/jitLtoLinking +python jitLtoLinking.py +``` + +### With custom parameters + +```bash +# Larger element count +python jitLtoLinking.py --elements 1048576 + +# Use a specific GPU +python jitLtoLinking.py --device 1 +``` + +## Expected Output + +``` +Device: +Compute Capability: + +[1] PTX linking (no LTO) + [ptx] result verified against NumPy reference + +[2] LTO linking (link-time optimization) + [lto] result verified against NumPy reference + +Both PTX and LTO linked kernels produced matching results. Done +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `jitLtoLinking.py` - Python implementation using `cuda.core.Linker` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` compilation API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda-compilation-toolchain) +- Upstream `cuda.core` example: [`jit_lto_fractal.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/jit_lto_fractal.py) +- [NVIDIA nvJitLink documentation](https://docs.nvidia.com/cuda/nvjitlink/index.html) diff --git a/samples/jitLtoLinking/jitLtoLinking.py b/samples/jitLtoLinking/jitLtoLinking.py new file mode 100644 index 00000000000..b5455107579 --- /dev/null +++ b/samples/jitLtoLinking/jitLtoLinking.py @@ -0,0 +1,222 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +JIT Compilation and Link-Time Optimization with cuda.core + +Real-world GPU code is rarely a single source string. Libraries ship a +"main" kernel that is compiled once, then link in user-supplied device +functions at runtime to customize behavior without recompiling the whole +program. + +cuda.core exposes this pattern through ``Program`` (NVRTC compilation) +and ``Linker`` (JIT linking of multiple object codes). Two modes are +shown here: + + * **PTX linking**: compile each translation unit with + ``relocatable_device_code=True`` to PTX and link to a CUBIN. + The two modules remain independently compiled: no cross-module + inlining. + + * **LTO (Link-Time Optimization)**: compile each translation unit + with ``link_time_optimization=True`` to LTO IR, then link with + ``LinkerOptions(link_time_optimization=True)``. The linker reruns + the optimizer across both modules and can inline the device function + into the main kernel, typically matching a single-source build. + +The same kernel math runs in both modes and is verified against a +NumPy reference. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import ( + Device, + LaunchConfig, + Linker, + LinkerOptions, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# -------------------------------------------------------------------------- +# Module A: the "library" main kernel. It forwards each element through a +# user-supplied device function (resolved at link time) and writes the result. +# -------------------------------------------------------------------------- +MAIN_SRC = r""" +// Forward declare the user-supplied hook. Its definition lives in a separate +// translation unit and is resolved by the Linker at runtime. +extern "C" __device__ float user_transform(float x); + +extern "C" __global__ +void apply_transform(const float* __restrict__ in, + float* __restrict__ out, + size_t N) +{ + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride) { + out[i] = user_transform(in[i]); + } +} +""" + +# -------------------------------------------------------------------------- +# Module B: the user-supplied "plug-in" device function. A different +# implementation of ``user_transform`` here produces different results without +# rebuilding MAIN_SRC. +# -------------------------------------------------------------------------- +USER_SRC = r""" +extern "C" __device__ +float user_transform(float x) +{ + // A deliberately non-trivial expression so LTO has something to inline / + // optimize across the module boundary. + float y = x * x + 3.0f * x - 1.0f; + return y > 0.0f ? y : 0.0f; +} +""" + + +def host_reference(x: np.ndarray) -> np.ndarray: + y = x * x + 3.0 * x - 1.0 + return np.where(y > 0.0, y, 0.0).astype(np.float32) + + +def link_ptx(device): + """Compile both modules to PTX and link them into a cubin (no LTO).""" + prog_opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}", relocatable_device_code=True) + main_obj = Program(MAIN_SRC, "c++", options=prog_opts).compile("ptx") + user_obj = Program(USER_SRC, "c++", options=prog_opts).compile("ptx") + + linker = Linker(main_obj, user_obj, options=LinkerOptions(arch=f"sm_{device.arch}")) + return linker.link("cubin") + + +def link_lto(device): + """Compile both modules to LTO IR and link with LTO enabled.""" + prog_opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}", link_time_optimization=True) + main_obj = Program(MAIN_SRC, "c++", options=prog_opts).compile("ltoir") + user_obj = Program(USER_SRC, "c++", options=prog_opts).compile("ltoir") + + linker_opts = LinkerOptions(arch=f"sm_{device.arch}", link_time_optimization=True) + linker = Linker(main_obj, user_obj, options=linker_opts) + return linker.link("cubin") + + +def run_one_mode(mode, module, stream, d_in, d_out, size, expected): + kernel = module.get_kernel("apply_transform") + config = LaunchConfig(grid=(size + 255) // 256, block=256) + launch( + stream, + config, + kernel, + d_in.data.ptr, + d_out.data.ptr, + np.uint64(size), + ) + stream.sync() + actual = cp.asnumpy(d_out) + if not np.allclose(actual, expected, rtol=1e-5, atol=1e-5): + max_err = np.max(np.abs(actual - expected)) + print(f" [{mode}] verification FAILED (max_err={max_err})") + return False + print(f" [{mode}] result verified against NumPy reference") + return True + + +def main() -> int: + import argparse + + parser = argparse.ArgumentParser(description="JIT + LTO linking of two device modules with cuda.core") + parser.add_argument( + "--elements", + type=int, + default=1 << 16, + help="Number of float32 elements (default: 65536)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + + stream = device.create_stream() + cp.cuda.Stream.from_external(stream).use() + + try: + N = args.elements + rng = np.random.default_rng(seed=0) + host_in = rng.standard_normal(N).astype(np.float32) + expected = host_reference(host_in) + + d_in = cp.asarray(host_in) + d_out = cp.empty(N, dtype=cp.float32) + device.sync() + + print("\n[1] PTX linking (no LTO)") + ptx_module = link_ptx(device) + ok_ptx = run_one_mode("ptx", ptx_module, stream, d_in, d_out, N, expected) + + d_out.fill(0) + device.sync() + + print("\n[2] LTO linking (link-time optimization)") + lto_module = link_lto(device) + ok_lto = run_one_mode("lto", lto_module, stream, d_in, d_out, N, expected) + + print() + if ok_ptx and ok_lto: + print("Both PTX and LTO linked kernels produced matching results. Done") + return 0 + return 1 + finally: + stream.close() + cp.cuda.Stream.null.use() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/jitLtoLinking/requirements.txt b/samples/jitLtoLinking/requirements.txt new file mode 100644 index 00000000000..3b328a39b0c --- /dev/null +++ b/samples/jitLtoLinking/requirements.txt @@ -0,0 +1,5 @@ +# JIT + LTO Linking Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/kernelNsysProfile/README.md b/samples/kernelNsysProfile/README.md new file mode 100644 index 00000000000..2979fe8d7a0 --- /dev/null +++ b/samples/kernelNsysProfile/README.md @@ -0,0 +1,72 @@ +# Sample: Kernel Nsys Profiling - CUDA C++ Kernel Profiling with cuda.core (Python) + +## Description + +This sample demonstrates how to profile custom CUDA C++ kernels compiled and launched with `cuda.core` using NVIDIA Nsight Systems. It implements three GPU operations (vector addition, SAXPY, vector transform) as custom kernels and shows how to instrument code with NVTX markers for profiling analysis. + +## What you will learn + +- How to write and compile CUDA C++ kernels with `cuda.core.Program` +- How to launch kernels with `LaunchConfig` and manage CUDA streams +- How to use NVTX markers (`nvtx.annotate()`) to annotate code sections +- How to profile kernels with Nsight Systems and analyze performance +- Modern CUDA Python workflow with `cuda.core.Device` and proper resource cleanup + +## Requirements + +- NVIDIA GPU with Compute Capability 7.0+ +- CUDA Toolkit 13.0+ +- Python 3.10+ +- Packages: `numpy`, `cuda-python`, `cuda-core`, `cupy-cuda13x`, `nvtx` (see `requirements.txt`; NumPy >=2.3.2) + +**Install:** +```bash +pip install -r requirements.txt +``` + +## How to run + +```bash +python kernelNsysProfile.py +python kernelNsysProfile.py --array-size 10000000 # Custom size +``` + +## Nsys Profiling + +**Basic profile:** +```bash +nsys profile -o gpu_profile python kernelNsysProfile.py +nsys-ui gpu_profile.nsys-rep # View results +``` + +The program uses color-coded NVTX markers: +- **Purple**: Phase 2 (cuda.core Custom Kernels - main focus) +- **Yellow/Blue/Green**: Other phases +- **Cyan**: Nested operations + +Focus on Phase 2 to analyze kernel execution times, launch overhead, and GPU utilization. + +**For detailed Nsys usage and analysis techniques, see the [NVIDIA Nsight Systems documentation](https://docs.nvidia.com/nsight-systems/).** + +## Troubleshooting + +**Missing packages:** +```bash +pip install -r requirements.txt +``` + +**Out of memory:** +```bash +python kernelNsysProfile.py -n 10000000 # Reduce array size +``` + +**Nsys not found:** +```bash +export PATH=/usr/local/cuda/bin:$PATH +``` + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [NVIDIA Nsight Systems Documentation](https://docs.nvidia.com/nsight-systems/) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/kernelNsysProfile/kernelNsysProfile.py b/samples/kernelNsysProfile/kernelNsysProfile.py new file mode 100644 index 00000000000..99a68d19fa3 --- /dev/null +++ b/samples/kernelNsysProfile/kernelNsysProfile.py @@ -0,0 +1,323 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "nvtx"] +# /// + +""" +Kernel Nsys Profiling Sample - CUDA C++ Kernel Profiling with cuda.core + +This sample demonstrates how to profile custom CUDA C++ kernels compiled and +launched with cuda.core using NVIDIA Nsight Systems. + +The sample implements three common GPU operations as custom CUDA C++ kernels: +- Vector addition: c = a + b +- SAXPY: y = alpha * x + y +- Vector transform: sqrt(x*x + 1) + sin(x) + +Use Nsight Systems to analyze: +- Custom kernel execution times +- Kernel launch patterns and overhead +- GPU utilization and memory access patterns +- NVTX markers for structured profiling + +Workflow: +- Phase 1: Create GPU arrays +- Phase 2: Compile and execute cuda.core custom kernels (profiling focus) +- Phase 3: Verify correctness with CuPy reference implementation +- Phase 4: Validate results +""" + +import argparse +import sys +from pathlib import Path + +try: + import cupy as cp + import numpy as np + import nvtx + + from cuda.core import Device, LaunchConfig, launch +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +# CUDA C++ kernel definitions +# For larger projects, separating kernels into a separate file is also valid. +KERNELS_CODE = """ +template +__global__ void vector_add(const T* a, const T* b, T* c, size_t N) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { + c[i] = a[i] + b[i]; + } +} + +template +__global__ void saxpy(const T alpha, const T* x, T* y, size_t N) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { + y[i] = alpha * x[i] + y[i]; + } +} + +template +__global__ void vector_transform(const T* a, T* b, size_t N) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { + T val = a[i]; + b[i] = sqrt(val * val + T(1.0)) + sin(val); + } +} +""" + + +def get_cuda_core_kernels(device): + """ + Compile cuda.core kernels and return them. + + Args: + device: cuda.core.Device object + + Returns: + dict: Dictionary of compiled kernels + """ + from cuda.core import Program, ProgramOptions + + # Compile all kernels at once + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(KERNELS_CODE, code_type="c++", options=program_options) + mod = prog.compile( + "cubin", + name_expressions=( + "vector_add", + "saxpy", + "vector_transform", + ), + ) + + # Extract individual kernels + return { + "vector_add": mod.get_kernel("vector_add"), + "saxpy": mod.get_kernel("saxpy"), + "vector_transform": mod.get_kernel("vector_transform"), + } + + +def run(size): + """Main execution function""" + + # ================================================================= + # Device Initialization using cuda.core + # ================================================================= + with nvtx.annotate("Device Initialization", color="green"): + try: + # Create device object (defaults to device 0) + dev = Device() + dev.set_current() + + print() + print(f"Device: {dev.name}") + print(f"Compute Capability: sm_{dev.arch}") + print() + + # Synchronize device + dev.sync() + + except Exception as e: + print("ERROR: CUDA initialization failed!") + print(f"Error: {e}") + sys.exit(1) + + print("Profiling cuda.core Custom Kernels") + print(f"Array size: {size:,}\n") + + # Constant for SAXPY operation + alpha = 2.5 + + # Initialize random seed + rng = cp.random.default_rng(42) + + # ================================================================= + # Phase 1: Create GPU Arrays with CuPy + # ================================================================= + with nvtx.annotate("Create GPU Arrays", color="yellow"): + a_gpu = rng.standard_normal(size, dtype=cp.float32) + b_gpu = rng.standard_normal(size, dtype=cp.float32) + dev.sync() + + print("Phase 1: Created arrays on GPU with CuPy") + print(f" Array shape: {a_gpu.shape}") + print(f" Array dtype: {a_gpu.dtype}") + print(f" Array a - Mean: {float(cp.mean(a_gpu)):.4f}, Std: {float(cp.std(a_gpu)):.4f}") + print(f" Array b - Mean: {float(cp.mean(b_gpu)):.4f}, Std: {float(cp.std(b_gpu)):.4f}\n") + + # ================================================================= + # Phase 2: cuda.core Custom Kernels on GPU + # ================================================================= + with nvtx.annotate("cuda.core Custom Kernels", color="purple"): + print("Phase 2: cuda.core custom CUDA C++ kernels on GPU") + + # Create a stream for cuda.core operations + stream = dev.create_stream() + try: + with nvtx.annotate("Compile Kernels", color="cyan"): + kernels_dict = get_cuda_core_kernels(dev) + stream.sync() + print("Compiled custom CUDA C++ kernels") + + # Prepare launch configuration + # Grid-stride loops in kernels handle any grid size robustly + block = 256 + grid = (size + block - 1) // block + config = LaunchConfig(grid=grid, block=block) + + # Execute cuda.core vector_add kernel + with nvtx.annotate("Vector Add (cuda.core)", color="cyan"): + c_cuda = cp.empty_like(a_gpu) + launch( + stream, + config, + kernels_dict["vector_add"], + a_gpu.data.ptr, + b_gpu.data.ptr, + c_cuda.data.ptr, + cp.uint64(size), + ) + stream.sync() + + # Execute cuda.core SAXPY kernel + with nvtx.annotate("SAXPY (cuda.core)", color="cyan"): + y_cuda = b_gpu.copy() + launch( + stream, + config, + kernels_dict["saxpy"], + np.float32(alpha), + a_gpu.data.ptr, + y_cuda.data.ptr, + cp.uint64(size), + ) + stream.sync() + + # Execute cuda.core vector_transform kernel + with nvtx.annotate("Vector Transform (cuda.core)", color="cyan"): + transform_cuda = cp.empty_like(a_gpu) + launch( + stream, + config, + kernels_dict["vector_transform"], + a_gpu.data.ptr, + transform_cuda.data.ptr, + cp.uint64(size), + ) + stream.sync() + + print("Vector Addition (custom kernel)") + print("SAXPY (custom kernel)") + print("Vector Transform (custom kernel)\n") + finally: + stream.close() + + # ================================================================= + # Phase 3: Generate Reference Results with CuPy (for verification) + # ================================================================= + with nvtx.annotate("Generate Reference Results", color="blue"): + print("Phase 3: Generate reference results for verification") + + with nvtx.annotate("Vector Add (Reference)", color="cyan"): + c_cupy = a_gpu + b_gpu + dev.sync() + + with nvtx.annotate("SAXPY (Reference)", color="cyan"): + y_cupy = alpha * a_gpu + b_gpu + dev.sync() + + with nvtx.annotate("Vector Transform (Reference)", color="cyan"): + transform_cupy = cp.sqrt(a_gpu * a_gpu + 1.0) + cp.sin(a_gpu) + dev.sync() + + print("Reference results generated\n") + + # ================================================================= + # Phase 4: Verify Kernel Correctness + # ================================================================= + with nvtx.annotate("Verification", color="green"): + print("Phase 4: Verify kernel correctness") + + # Verify custom kernels against reference results + # Use relaxed tolerances for single-precision float comparisons + # Small differences can occur due to instruction ordering and + # compiler optimizations + print(" Validating cuda.core kernels:") + + print(" Vector Add: ", end="") + vec_add_match = verify_array_result(c_cuda, c_cupy, rtol=1e-5, atol=1e-6) + + print(" SAXPY: ", end="") + saxpy_match = verify_array_result(y_cuda, y_cupy, rtol=1e-5, atol=1e-6) + + print(" Transform: ", end="") + transform_match = verify_array_result(transform_cuda, transform_cupy, rtol=1e-5, atol=1e-6) + + all_pass = vec_add_match and saxpy_match and transform_match + + if not all_pass: + print("\n ERROR: Kernel verification failed!") + return 1 + print() + + # Final synchronization + dev.sync() + print("The sample is complete PASSED!") + + +def main(): + parser = argparse.ArgumentParser( + description="Kernel Nsys Profiling - Profile custom CUDA C++ kernels with cuda.core" + ) + parser.add_argument( + "-n", + "--array-size", + type=int, + default=50000, + metavar="N", + help="Array size (default: 50,000)", + ) + + args = parser.parse_args() + run(size=args.array_size) + + +if __name__ == "__main__": + main() diff --git a/samples/kernelNsysProfile/requirements.txt b/samples/kernelNsysProfile/requirements.txt new file mode 100644 index 00000000000..e86d7bbf31f --- /dev/null +++ b/samples/kernelNsysProfile/requirements.txt @@ -0,0 +1,7 @@ +# Nsight System Kernels Profiling Sample - Requirements + +numpy>=2.3.2 +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +nvtx diff --git a/samples/launchConfigTuning/README.md b/samples/launchConfigTuning/README.md new file mode 100644 index 00000000000..6870f1d7e9c --- /dev/null +++ b/samples/launchConfigTuning/README.md @@ -0,0 +1,193 @@ +# Sample: Launch Configuration Tuning (Python) + +## Description + +Benchmark different CUDA kernel launch configurations to find the optimal block-size setting using `cuda.core` APIs. This sample demonstrates **performance tuning** by measuring execution time across various thread block sizes. + +## What You'll Learn + +- Compiling CUDA kernels at runtime with `cuda.core.Program` +- Launching kernels with different `LaunchConfig` settings +- Benchmarking kernel performance with precise timing +- Understanding how thread block size affects performance +- Tuning for memory-bound vs compute-bound kernels + +## Key Concepts + +### Launch Configuration with cuda.core + +```python +# Configure kernel launch with specific thread block size +config = LaunchConfig( + grid=(grid_size,), + block=(block_size,), + shmem_size=shared_memory_bytes +) + +# Launch kernel +launch(stream, config, kernel, *args) +stream.sync() +``` + +### Thread Block Sizing + +Thread block size significantly impacts performance due to: + +| Factor | Impact | +|--------|--------| +| **Occupancy** | More active warps can hide memory latency | +| **Registers** | More threads/block = fewer registers/thread | +| **Shared Memory** | Divided among blocks on each SM | +| **Warp Efficiency** | Block size should be multiple of 32 | + +### Benchmarking Approach + +```python +# Use CUDA events for accurate GPU timing (not CPU wall-clock) +start_event = device.create_event(options=EventOptions(enable_timing=True)) +end_event = device.create_event(options=EventOptions(enable_timing=True)) + +stream.record(start_event) +for _ in range(n_iterations): + launch(stream, config, kernel, *args) +stream.record(end_event) +end_event.sync() +elapsed_ms = (end_event - start_event) / n_iterations +``` + +## Key APIs + +### From `cuda.core`: + +- `Device` - CUDA device management +- `Program` - Runtime kernel compilation (NVRTC) +- `ProgramOptions` - Compilation options (architecture target) +- `LaunchConfig` - Kernel launch configuration (grid/block dimensions) +- `launch` - Execute compiled kernel (accepts Buffer objects directly) +- `EventOptions` - GPU timing with CUDA events +- `ManagedMemoryResource` - Device-preferred unified memory +- `ManagedMemoryResourceOptions` - Set preferred_location for representative benchmarks + +### From `numpy`: + +- `np.from_dlpack()` - Zero-copy view of GPU buffers via DLPack + +### Benchmarked Kernels: + +- **vector_add** - Simple memory-bound kernel (C = A + B) - low sensitivity to block size +- **reduce_sum** - Shared memory reduction - high sensitivity to block size + +## Requirements + +### Hardware: + +- NVIDIA GPU with CUDA support +- Minimum GPU memory: 512 MB + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See `requirements.txt` for Python packages + +### Platform Support: + +The benchmark loops in this sample read kernel results back from +`ManagedMemoryResource` allocations between launches, which requires the +device property `concurrent_managed_access=True`. This is only supported on +Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) the property +is `False`, so the sample exits early with a waive message and exit code +`2`. + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python launchConfigTuning.py +``` + +## Expected Output + +``` +============================================================ +Launch Configuration Tuning (cuda.core) +Finding the Best Block Size for Your Kernel +============================================================ + +Device: +Compute Capability: X.X + +Compiling CUDA kernels with cuda.core.Program... + Target architecture: sm_XX + [OK] vector_add kernel compiled + [OK] reduce_sum kernel compiled + +============================================================ +VECTOR ADDITION - Launch Configuration Tuning +============================================================ + +Problem size: 10,000,000 elements +Kernel: vector_add (C = A + B) + +Testing thread configurations: [32, 64, 128, 256, 512, 1024] +------------------------------------------------------------ +Block Size: 32 | Blocks: 312500 | Time: X.XXXX ± X.XXXX ms +Block Size: 64 | Blocks: 156250 | Time: X.XXXX ± X.XXXX ms +... +------------------------------------------------------------ + +[OK] OPTIMAL: block_size=XXX (X.XXXX ms) +[FAIL] WORST: block_size=XXX (X.XXXX ms) + Speedup: X.XXx + +[OK] Results verified correct! + +... + +============================================================ +SAMPLE COMPLETE +============================================================ + +Key Takeaway: The optimal thread configuration depends on your +specific kernel characteristics. Always benchmark to find the best! +``` + +## Tuning Guidelines + +### Start Here +- **128-256 threads/block** is a good starting point for most kernels +- Always use **multiples of 32** (warp size) + +### Memory-Bound Kernels +- Less sensitive to thread configuration +- Focus on memory access patterns +- Higher thread counts help hide latency + +### Compute-Bound Kernels +- More sensitive to thread configuration +- Watch for register pressure at high thread counts +- Profile with Nsight Compute + +### Reduction Kernels +- Block size affects shared memory usage +- Power-of-2 sizes simplify reduction logic +- Often 256-512 threads works well + +## Files + +- `launchConfigTuning.py` - Python implementation using cuda.core +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [cuda.core.LaunchConfig](https://nvidia.github.io/cuda-python/cuda-core/latest/generated/cuda.core.LaunchConfig.html) +- [CUDA Occupancy Calculator](https://docs.nvidia.com/cuda/cuda-occupancy-calculator/) +- [CUDA Best Practices Guide - Execution Configuration](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#execution-configuration-optimizations) +- [Nsight Compute Profiler](https://developer.nvidia.com/nsight-compute) diff --git a/samples/launchConfigTuning/launchConfigTuning.py b/samples/launchConfigTuning/launchConfigTuning.py new file mode 100644 index 00000000000..bbd6d30dca9 --- /dev/null +++ b/samples/launchConfigTuning/launchConfigTuning.py @@ -0,0 +1,387 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2"] +# /// + +""" +Launch Configuration Tuning + +Demonstrates how to find the optimal threads-per-block configuration for CUDA +kernels using cuda.core APIs. Benchmarks different thread layouts to answer: +"What is the best threads-per-block for my kernel?" +""" + +import sys + +try: + import numpy as np + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + ManagedMemoryResource, + ManagedMemoryResourceOptions, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# ============================================================================= +# CUDA Kernel Source Code +# ============================================================================= + +# Vector Addition Kernel - Simple memory-bound kernel (grid-stride loop) +VECTOR_ADD_KERNEL = r""" +extern "C" __global__ +void vector_add(const float* __restrict__ a, + const float* __restrict__ b, + float* __restrict__ c, + int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + for (int i = idx; i < n; i += stride) { + c[i] = a[i] + b[i]; + } +} +""" + +# Reduction Kernel - Sensitive to block size due to shared memory (grid-stride load) +REDUCTION_KERNEL = r""" +extern "C" __global__ +void reduce_sum(const float* __restrict__ input, + float* __restrict__ partial_sums, + int n) { + extern __shared__ float sdata[]; + + unsigned int tid = threadIdx.x; + unsigned int stride = blockDim.x * gridDim.x; + + // Load data into shared memory (grid-stride loop) + float sum = 0.0f; + for (unsigned int i = blockIdx.x * blockDim.x + tid; i < n; i += stride) { + sum += input[i]; + } + sdata[tid] = sum; + __syncthreads(); + + // Perform reduction in shared memory + for (unsigned int s = blockDim.x / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata[tid] += sdata[tid + s]; + } + __syncthreads(); + } + + // Write result for this block + if (tid == 0) { + partial_sums[blockIdx.x] = sdata[0]; + } +} +""" + + +# ============================================================================= +# Utility Functions +# ============================================================================= + + +def compile_kernel(device, kernel_code, kernel_name): + """Compile a CUDA kernel using cuda.core.Program.""" + arch = f"sm_{device.arch}" + options = ProgramOptions(arch=arch) + program = Program(kernel_code, code_type="c++", options=options) + compiled = program.compile(target_type="cubin") + return compiled.get_kernel(kernel_name) + + +def benchmark_kernel_1d( + device, + stream, + kernel, + args, + n_elements, + block_size, + n_iterations=100, + shared_mem_bytes=0, +): + """ + Benchmark a 1D kernel with given threads-per-block configuration. + Uses CUDA events for accurate GPU timing. + + Returns timing statistics as a dictionary. + """ + grid_size = (n_elements + block_size - 1) // block_size + + config = LaunchConfig(grid=(grid_size,), block=(block_size,), shmem_size=shared_mem_bytes) + + # Warm-up run + launch(stream, config, kernel, *args) + stream.sync() + + # Timed runs with CUDA events + event_opts = EventOptions(timing_enabled=True) + start_event = device.create_event(options=event_opts) + end_event = device.create_event(options=event_opts) + + stream.record(start_event) + for _ in range(n_iterations): + launch(stream, config, kernel, *args) + stream.record(end_event) + end_event.sync() + + elapsed_ms = (end_event - start_event) / n_iterations + + return { + "block_size": block_size, + "grid_size": grid_size, + "mean_time_ms": elapsed_ms, + "std_time_ms": 0.0, # Single measurement with events + } + + +def print_gpu_info(device): + """Print GPU information relevant to launch configuration.""" + print(f"\nDevice: {device.name}") + cc = device.compute_capability + print(f"Compute Capability: {cc.major}.{cc.minor}") + + +def allocate_managed_array(mr, stream, n_elements, dtype=np.float32): + """Allocate device-preferred unified memory and return buffer with numpy view.""" + n_bytes = n_elements * np.dtype(dtype).itemsize + buffer = mr.allocate(n_bytes, stream=stream) + stream.sync() + + # Zero-copy numpy view via DLPack (holds reference to buffer) + np_view = np.from_dlpack(buffer).view(dtype).reshape(n_elements) + return buffer, np_view + + +# ============================================================================= +# Benchmark Demonstrations +# ============================================================================= + + +def demo_vector_add_tuning(device, stream, mr, kernel): + """Demonstrate launch configuration tuning for vector addition.""" + print("\n" + "=" * 60) + print("VECTOR ADDITION - Launch Configuration Tuning") + print("=" * 60) + + N = 10_000_000 # 10 million elements + print(f"\nProblem size: {N:,} elements") + print("Kernel: vector_add (C = A + B)") + + # Allocate device-preferred unified memory via cuda.core + d_a, np_a = allocate_managed_array(mr, stream, N) + d_b, np_b = allocate_managed_array(mr, stream, N) + d_c, np_c = allocate_managed_array(mr, stream, N) + try: + # Initialize data via numpy views + np_a[:] = np.random.rand(N).astype(np.float32) + np_b[:] = np.random.rand(N).astype(np.float32) + stream.sync() + + # Thread configurations to test (multiples of warp size = 32) + thread_configs = [32, 64, 128, 256, 512, 1024] + + print(f"\nTesting thread configurations: {thread_configs}") + print("-" * 60) + + results = [] + for tpb in thread_configs: + result = benchmark_kernel_1d( + device, + stream, + kernel, + (d_a, d_b, d_c, np.int32(N)), + N, + tpb, + n_iterations=100, + ) + results.append(result) + print(f"Block Size: {tpb:4d} | Blocks: {result['grid_size']:6d} | Time: {result['mean_time_ms']:.4f} ms") + + # Find optimal and worst configurations + best = min(results, key=lambda x: x["mean_time_ms"]) + worst = max(results, key=lambda x: x["mean_time_ms"]) + + print("-" * 60) + print(f"\n[OK] OPTIMAL: block_size={best['block_size']} ({best['mean_time_ms']:.4f} ms)") + print(f"[FAIL] WORST: block_size={worst['block_size']} ({worst['mean_time_ms']:.4f} ms)") + print(f" Speedup: {worst['mean_time_ms'] / best['mean_time_ms']:.2f}x") + + # Verify result + stream.sync() + expected = np_a + np_b + if np.allclose(np_c, expected): + print("\n[OK] Results verified correct!") + + return results + finally: + d_a.close() + d_b.close() + d_c.close() + + +def demo_reduction_tuning(device, stream, mr, kernel): + """Demonstrate launch config tuning for reduction (shared memory).""" + print("\n" + "=" * 60) + print("REDUCTION - Launch Configuration Tuning") + print("=" * 60) + + N = 16_777_216 # 16M elements (power of 2) + + print(f"\nProblem size: {N:,} elements") + print("Kernel: reduce_sum (parallel reduction)") + print("Note: Reduction uses shared memory - more sensitive to block size!") + + # Allocate device-preferred unified memory via cuda.core + d_input, np_input = allocate_managed_array(mr, stream, N) + try: + np_input[:] = np.random.rand(N).astype(np.float32) + stream.sync() + + thread_configs = [32, 64, 128, 256, 512, 1024] + + print(f"\nTesting thread configurations: {thread_configs}") + print("-" * 60) + + results = [] + for tpb in thread_configs: + # Allocate partial sums array + n_blocks = (N + tpb - 1) // tpb + d_partial, _ = allocate_managed_array(mr, stream, n_blocks) + try: + # Shared memory size = block_size * sizeof(float) + shared_mem_bytes = tpb * 4 + + result = benchmark_kernel_1d( + device, + stream, + kernel, + (d_input, d_partial, np.int32(N)), + N, + tpb, + n_iterations=50, + shared_mem_bytes=shared_mem_bytes, + ) + results.append(result) + print( + f"Block Size: {tpb:4d} | Blocks: {result['grid_size']:6d} | Time: {result['mean_time_ms']:.4f} ms" + ) + finally: + d_partial.close() + + best = min(results, key=lambda x: x["mean_time_ms"]) + worst = max(results, key=lambda x: x["mean_time_ms"]) + + print("-" * 60) + print(f"\n[OK] OPTIMAL: block_size={best['block_size']}") + print(f" Speedup over worst: {worst['mean_time_ms'] / best['mean_time_ms']:.2f}x") + + return results + finally: + d_input.close() + + +# ============================================================================= +# Main +# ============================================================================= + + +def main(): + """ + Complete demonstration of CUDA launch configuration tuning. + + This sample shows: + 1. Device initialization with cuda.core.Device + 2. Kernel compilation with cuda.core.Program + 3. Benchmarking different thread block configurations + 4. Finding optimal threads-per-block for various kernel types + """ + if sys.platform == "win32": + print( + "This sample relies on ManagedMemoryResource with concurrent host " + "access, which is not supported on Windows " + "(concurrent_managed_access=False). Waiving this sample." + ) + sys.exit(2) + + print("=" * 60) + print("Launch Configuration Tuning (cuda.core)") + print("Finding the Best Block Size for Your Kernel") + print("=" * 60) + + # Initialize CUDA device + device = Device(0) + device.set_current() + + # Print GPU information + print_gpu_info(device) + + # Create stream and device-preferred memory resource + stream = device.create_stream() + mr_options = ManagedMemoryResourceOptions(preferred_location=device.device_id) + mr = ManagedMemoryResource(mr_options) + + try: + # Compile kernels + print("\nCompiling CUDA kernels with cuda.core.Program...") + arch = f"sm_{device.arch}" + print(f" Target architecture: {arch}") + + vec_add_kernel = compile_kernel(device, VECTOR_ADD_KERNEL, "vector_add") + print(" [OK] vector_add kernel compiled") + + reduction_kernel = compile_kernel(device, REDUCTION_KERNEL, "reduce_sum") + print(" [OK] reduce_sum kernel compiled") + + # Run demonstrations + demo_vector_add_tuning(device, stream, mr, vec_add_kernel) + demo_reduction_tuning(device, stream, mr, reduction_kernel) + + print("\n" + "=" * 60) + print("SAMPLE COMPLETE") + print("=" * 60) + print("\nKey Takeaway: The optimal thread configuration depends on your") + print("specific kernel characteristics. Always benchmark to find the best!") + print() + finally: + stream.close() + + +if __name__ == "__main__": + main() diff --git a/samples/launchConfigTuning/requirements.txt b/samples/launchConfigTuning/requirements.txt new file mode 100644 index 00000000000..c9685b2f67a --- /dev/null +++ b/samples/launchConfigTuning/requirements.txt @@ -0,0 +1,6 @@ +# Launch Configuration Tuning Sample Requirements +# Requires Python 3.10+, CUDA Toolkit 13.0+ + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 diff --git a/samples/matrixMulSharedMem/README.md b/samples/matrixMulSharedMem/README.md new file mode 100644 index 00000000000..67c0df69751 --- /dev/null +++ b/samples/matrixMulSharedMem/README.md @@ -0,0 +1,183 @@ +# Matrix Multiplication with Shared Memory (GEMM) + +> **Known issue — version-pinned sample.** Unlike the other samples in this +> repository, this sample is pinned to `cuda-core==0.7.0` and +> `nvmath-python[cu13]==0.9.0`. The reason is that nvmath-python 0.9.0 +> still uses `cuda-core`'s pre-1.0 API name `EventOptions(enable_timing=...)` +> in its own internals, which `cuda-core>=1.0` no longer accepts. +> +> If you install this sample's `requirements.txt` into the same environment +> as the other samples, pip will downgrade `cuda-core` and the other +> samples (which use the 1.0 API) will stop working. The recommended +> workflow is one of: +> +> - Install this sample's requirements in a **dedicated virtual +> environment**, or +> - Re-run the other samples' `pip install -r requirements.txt` afterwards +> to upgrade `cuda-core` back to 1.0. +> +> This sample will be re-aligned with the rest of the repository +> (`cuda-core>=1.0.0`) once nvmath-python ships a release that targets +> cuda-core's 1.0 naming audit. + +Demonstrates efficient matrix multiplication using nvmath-python APIs and custom CUDA kernels with tiling, shared memory, and loop unrolling. + +## Overview + +- Uses nvmath.linalg.advanced.Matmul for high-performance GEMM via cuBLASLt +- Compares with custom CUDA kernel using tiling and shared memory +- Shows how tiling reduces global memory bandwidth requirements +- Demonstrates shared memory for data reuse within thread blocks +- Uses loop unrolling to improve instruction-level parallelism + +## What You'll Learn + +- How to use nvmath stateful API for optimized matrix multiplication +- How to tile matrix operations for better cache locality +- Using shared memory to reduce redundant global memory accesses +- Loop unrolling techniques for GPU kernels +- Benchmarking and comparing kernel performance + +## Key Libraries + +- `nvmath-python` - NVIDIA math library with cuBLASLt access +- `cuda.core` - Modern CUDA Python API for custom kernel compilation +- `cupy` - GPU array library for Python + +## Key APIs + +### From `nvmath.linalg.advanced`: + +- `Matmul()` - Stateful matrix multiplication with planning and execution phases +- `MatmulComputeType` - Compute type options for mixed-precision + +### From `cuda.core`: + +- `Device()` - CUDA device management and properties +- `Program()` - Runtime kernel compilation (NVRTC) +- `LaunchConfig()` - Kernel launch configuration (grid/block dimensions) +- `launch()` - Kernel execution on a stream +- `Stream.record_event()` / `Event.elapsed_time()` - GPU timing + +## Requirements + +### Hardware: + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 256 MB (for 1024×1024 matrices) + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See requirements.txt for package dependencies + +## Installation + +```bash +cd cuda-samples/python/2_CoreConcepts/matrixMulSharedMem +python -m venv venv +source venv/bin/activate +pip install -r requirements.txt +``` + +## How to Run + +```bash +python matrixMulSharedMem.py +``` + +## Expected Output + +``` +====================================================================== +Matrix Multiplication with Shared Memory (GEMM) +Using nvmath and cuda.core APIs +====================================================================== + +Device: NVIDIA GeForce RTX 4090 +Compute Capability: sm_89 + +Custom kernel compiled [OK] + +Matrix dimensions: A(1024x1024) × B(1024x1024) = C(1024x1024) +Custom kernel tile size: 16x16 + +---------------------------------------------------------------------- +NVMATH MATMUL (cuBLASLt) +---------------------------------------------------------------------- +Using nvmath.linalg.advanced.Matmul stateful API +Average time: X.XXX ms +Performance: XXXX.XX GFLOPS + +---------------------------------------------------------------------- +CUSTOM KERNEL (Tiled + Shared Memory + Loop Unrolling) +---------------------------------------------------------------------- +Grid: (64, 64), Block: (16, 16) +Average time: X.XXX ms +Performance: XXX.XX GFLOPS + +---------------------------------------------------------------------- +VERIFICATION +---------------------------------------------------------------------- +nvmath : PASSED (max error: X.XXe-XX) +Custom kernel : PASSED (max error: X.XXe-XX) + +====================================================================== +PERFORMANCE SUMMARY +====================================================================== +Implementation Time (ms) GFLOPS +---------------------------------------------------------------------- +nvmath (cuBLASLt) X.XXX XXXX.XX +Custom (shared mem + unroll) X.XXX XXX.XX +``` + +## Tiling Concept + +``` + Matrix A (M×K) Matrix B (K×N) Matrix C (M×N) + ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ + │ T00 │ T01 │...│ │ T00 │ T01 │...│ │ │ │ │ + ├─────┼─────┼───┤ ├─────┼─────┼───┤ ├─────┼─────┼───┤ + │ T10 │ T11 │...│ × │ T10 │ T11 │...│ = │ │ Cij │ │ + ├─────┼─────┼───┤ ├─────┼─────┼───┤ ├─────┼─────┼───┤ + │ ... │ ... │...│ │ ... │ ... │...│ │ │ │ │ + └───────────────┘ └───────────────┘ └───────────────┘ + + Cij = Σ (A_tile_row × B_tile_col) for all tiles along K +``` + +## nvmath Stateful API + +```python +import nvmath.linalg.advanced as nvmath_advanced + +# Create matrices (CuPy arrays) +A = cp.random.rand(m, k).astype(cp.float32) +B = cp.random.rand(k, n).astype(cp.float32) + +# Use stateful API for fine-grained control +with nvmath_advanced.Matmul(A, B) as mm: + mm.plan() # Find optimal algorithm + C = mm.execute() # Execute computation +``` + +## Memory Access Optimization (Custom Kernel) + +| Implementation | Global Reads per C element | Reduction | +|---------------|---------------------------|-----------| +| Naive | 2 × K | (baseline)| +| Tiled (16×16) | 2 × K / 16 | 16× | + +## Files + +- `matrixMulSharedMem.py` - Python implementation comparing nvmath vs custom kernel +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [nvmath-python Documentation](https://docs.nvidia.com/cuda/nvmath-python/) +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [cuda.core API Guide](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/matrixMulSharedMem/matrixMulSharedMem.py b/samples/matrixMulSharedMem/matrixMulSharedMem.py new file mode 100644 index 00000000000..6086a7aaf12 --- /dev/null +++ b/samples/matrixMulSharedMem/matrixMulSharedMem.py @@ -0,0 +1,253 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core==0.7.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2", "nvmath-python[cu13]==0.9.0"] +# /// + +""" +Matrix Multiplication with Shared Memory (GEMM) + +Demonstrates efficient matrix multiplication using: +- nvmath.linalg.advanced.Matmul for high-performance GEMM via cuBLASLt +- Custom CUDA kernel with tiling, shared memory, and loop unrolling + +Uses cuda.core APIs with CuPy arrays via Stream.from_external. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + import nvmath.linalg.advanced as nvmath_advanced + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Install with: pip install -r requirements.txt") + sys.exit(1) + + +TILE_SIZE: int = 16 + +MATMUL_KERNEL: str = r""" +#define TILE_SIZE 16 + +extern "C" __global__ +void matmul_shared(const float* A, const float* B, float* C, + int M, int N, int K) { + __shared__ float As[TILE_SIZE][TILE_SIZE]; + __shared__ float Bs[TILE_SIZE][TILE_SIZE]; + + int bx = blockIdx.x, by = blockIdx.y; + int tx = threadIdx.x, ty = threadIdx.y; + int row = by * TILE_SIZE + ty; + int col = bx * TILE_SIZE + tx; + + float sum = 0.0f; + int numTiles = (K + TILE_SIZE - 1) / TILE_SIZE; + + for (int t = 0; t < numTiles; t++) { + int aCol = t * TILE_SIZE + tx; + int bRow = t * TILE_SIZE + ty; + + As[ty][tx] = (row < M && aCol < K) ? A[row * K + aCol] : 0.0f; + Bs[ty][tx] = (bRow < K && col < N) ? B[bRow * N + col] : 0.0f; + __syncthreads(); + + #pragma unroll + for (int k = 0; k < TILE_SIZE; k += 4) { + sum += As[ty][k] * Bs[k][tx]; + sum += As[ty][k + 1] * Bs[k + 1][tx]; + sum += As[ty][k + 2] * Bs[k + 2][tx]; + sum += As[ty][k + 3] * Bs[k + 3][tx]; + } + __syncthreads(); + } + + if (row < M && col < N) { + C[row * N + col] = sum; + } +} +""" + + +def run_matmul_benchmark( + m: int = 1024, + n: int = 1024, + k: int = 1024, + device_id: int = 0, + num_iterations: int = 10, +) -> bool: + """Run matrix multiplication benchmark comparing nvmath vs custom kernel.""" + print("=" * 60) + print("Matrix Multiplication with Shared Memory (GEMM)") + print("=" * 60) + + # Initialize device and stream + device = Device(device_id) + device.set_current() + stream = device.create_stream() + print(f"\nDevice: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + + # Make CuPy use our cuda.core stream + cp.cuda.Stream.from_external(stream).use() + + # Compile custom kernel + arch = f"sm_{device.arch}" + program = Program(MATMUL_KERNEL, code_type="c++", options=ProgramOptions(arch=arch)) + kernel = program.compile(target_type="cubin").get_kernel("matmul_shared") + print("Custom kernel compiled [OK]") + + # Setup + print(f"\nMatrix: A({m}x{k}) × B({k}x{n}) = C({m}x{n})") + total_ops = 2 * m * n * k + # NOTE: this sample is pinned to cuda-core==0.7.0 (see requirements.txt) + # because nvmath-python 0.9.0 still uses cuda-core's pre-1.0 API name + # `enable_timing`. Once nvmath ships a release compatible with cuda-core + # 1.0, bump the pins in requirements.txt and rename this kwarg to + # `timing_enabled` to match the rest of the samples. + event_opts = EventOptions(enable_timing=True) + + # Allocate matrices + rng = cp.random.default_rng(42) + d_A = rng.random((m, k), dtype=cp.float32) + d_B = rng.random((k, n), dtype=cp.float32) + d_C_custom = cp.zeros((m, n), dtype=cp.float32) + + success = True + try: + # ------------------------------------------------------------------------- + # nvmath GEMM (cuBLASLt) + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("NVMATH (cuBLASLt) - plan once, execute many") + print("-" * 60) + + with nvmath_advanced.Matmul(d_A, d_B, stream=int(stream.handle)) as mm: + mm.plan() + d_C_nvmath = mm.execute() + stream.sync() + + start = stream.record(options=event_opts) + for _ in range(num_iterations): + d_C_nvmath = mm.execute() + end = stream.record(options=event_opts) + end.sync() + + nvmath_ms = (end - start) / num_iterations + nvmath_gflops = (total_ops / 1e9) / (nvmath_ms / 1e3) + print(f"Time: {nvmath_ms:.3f} ms | {nvmath_gflops:.2f} GFLOPS") + + # ------------------------------------------------------------------------- + # Custom kernel (tiled + shared memory + unroll) + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("CUSTOM KERNEL (tiled + shared memory + unroll)") + print("-" * 60) + + block = (TILE_SIZE, TILE_SIZE) + grid = ((n + TILE_SIZE - 1) // TILE_SIZE, (m + TILE_SIZE - 1) // TILE_SIZE) + config = LaunchConfig(grid=grid, block=block) + + launch( + stream, + config, + kernel, + d_A.data.ptr, + d_B.data.ptr, + d_C_custom.data.ptr, + np.int32(m), + np.int32(n), + np.int32(k), + ) + stream.sync() + + start = stream.record(options=event_opts) + for _ in range(num_iterations): + launch( + stream, + config, + kernel, + d_A.data.ptr, + d_B.data.ptr, + d_C_custom.data.ptr, + np.int32(m), + np.int32(n), + np.int32(k), + ) + end = stream.record(options=event_opts) + end.sync() + + custom_ms = (end - start) / num_iterations + custom_gflops = (total_ops / 1e9) / (custom_ms / 1e3) + print(f"Time: {custom_ms:.3f} ms | {custom_gflops:.2f} GFLOPS") + + # ------------------------------------------------------------------------- + # Verification + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("VERIFICATION") + print("-" * 60) + + d_C_ref = d_A @ d_B + + # Host-side verification: cp.allclose triggers NVRTC failure on sm_120 + # (ldexp_cexp undefined). Use asnumpy + np.allclose instead. + ref_host = cp.asnumpy(d_C_ref) + for name, d_C in [("nvmath", d_C_nvmath), ("custom", d_C_custom)]: + print(f"{name}: ", end="") + passed = np.allclose(cp.asnumpy(d_C), ref_host, rtol=1e-4, atol=1e-4) + print("Test PASSED" if passed else "Test FAILED") + success = success and passed + + return success + finally: + cp.cuda.Stream.null.use() + stream.close() + + +def main() -> bool: + """Entry point. Returns True if benchmark passed.""" + return run_matmul_benchmark() + + +if __name__ == "__main__": + success = main() + if not success: + sys.exit(1) diff --git a/samples/matrixMulSharedMem/requirements.txt b/samples/matrixMulSharedMem/requirements.txt new file mode 100644 index 00000000000..0b397174cd2 --- /dev/null +++ b/samples/matrixMulSharedMem/requirements.txt @@ -0,0 +1,20 @@ +# Matrix Multiplication with Shared Memory (GEMM) Requirements +# +# IMPORTANT: this sample pins older versions of cuda-core and nvmath-python +# on purpose. nvmath-python 0.9.0 (the current CUDA-13 release at the time +# of CTK 13.3) calls cuda-core's pre-1.0 API name `EventOptions(enable_timing=...)` +# in its own internals. With cuda-core 1.0+ that kwarg was renamed to +# `timing_enabled` and the old name is rejected, so any cuda-core>=1.0 + +# nvmath-python 0.9.0 combination raises a TypeError at runtime. +# +# Until nvmath-python ships a release that targets the cuda-core 1.0 naming +# audit, this sample requires the older cuda-core 0.7 line. Installing this +# requirements.txt into the same environment as the other samples will +# downgrade cuda-core; use a dedicated venv for this sample, or reinstall +# the other samples' requirements afterwards to upgrade cuda-core back. + +cuda-python>=13.0.0 +cuda-core==0.7.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 +nvmath-python[cu13]==0.9.0 diff --git a/samples/memoryResources/README.md b/samples/memoryResources/README.md new file mode 100644 index 00000000000..6d6d6a94564 --- /dev/null +++ b/samples/memoryResources/README.md @@ -0,0 +1,151 @@ +# Sample: Memory Resources and Buffers (Python) + +## Description + +This sample demonstrates the `cuda.core` memory management model: a +`MemoryResource` owns a pool of memory and hands out `Buffer` objects that +can be passed to kernels, copied between resources with +`Buffer.copy_to()`, and viewed as NumPy or CuPy arrays through DLPack. The +script exercises three common resources side-by-side: + +1. **`DeviceMemoryResource`** - device-local GPU memory. Every `Device` + exposes a default pool via `Device.memory_resource`, and applications + can create additional pools explicitly. +2. **`PinnedMemoryResource`** - page-locked host memory, used here as the + input and output staging buffers around a GPU kernel (the canonical + pinned-H2D / compute / pinned-D2H pattern). +3. **`ManagedMemoryResource`** - unified memory that the driver migrates + between host and device on demand; host views see the GPU's writes + without an explicit copy. + +The same `scale_and_bias` kernel runs on each resource and every result is +verified on the host. + +## What You'll Learn + +- Creating and using `DeviceMemoryResource`, `PinnedMemoryResource`, and + `ManagedMemoryResource` +- Allocating `Buffer` objects from a resource with a bound stream +- Copying between buffers across resources with `Buffer.copy_to()` +- Taking zero-copy NumPy or CuPy views of a `Buffer` via DLPack +- Releasing buffers with stream-ordered `close(stream)` semantics + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Pythonic access to CUDA runtime, programs, and memory resources +- `cupy` - GPU array views of device buffers +- `numpy` - host array views of pinned and managed buffers + +## Key APIs + +### From `cuda.core` + +- `Device.memory_resource` - default memory pool attached to a device +- `DeviceMemoryResource`, `PinnedMemoryResource`, `ManagedMemoryResource` - allocate buffers of the corresponding memory kind +- `MemoryResource.allocate(nbytes, stream=...)` - returns a `Buffer` +- `Buffer.copy_to(dst_buffer, stream=...)` - async, stream-ordered copy +- `Buffer.close(stream)` - stream-ordered deallocation +- `Buffer` supports `__dlpack__` for zero-copy views + +### From CuPy and NumPy + +- `cp.from_dlpack()` / `np.from_dlpack()` - zero-copy array view of a `Buffer` + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Managed memory support (most discrete GPUs) + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +### Platform Support + +The `ManagedMemoryResource` demo in this sample exercises **concurrent host +access** to managed allocations while the GPU is active, which requires the +device property `concurrent_managed_access=True`. This is only supported on +Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) the property +is `False`, so the sample exits early with a waive message and exit code +`2`. The `DeviceMemoryResource` + `PinnedMemoryResource` demos in this +sample would still work on Windows on their own, but to keep the sample +self-contained the entire script waives when concurrent managed access is +unavailable. + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/memoryResources +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/memoryResources +python memoryResources.py +``` + +### With custom parameters + +```bash +# Larger buffer size +python memoryResources.py --elements 1048576 + +# Use a specific GPU +python memoryResources.py --device 1 +``` + +## Expected Output + +``` +Device: +Compute Capability: + +[1] DeviceMemoryResource + PinnedMemoryResource (staging) + Pinned staging, device kernel, and copy_to verified + +[2] ManagedMemoryResource (unified memory) + GPU writes observed directly through the host-visible mapping + +[3] Explicit DeviceMemoryResource + Explicit DeviceMemoryResource allocation verified + +All memory resource demos passed. +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `memoryResources.py` - Python implementation using `cuda.core` memory resources +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` memory API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#memory-management) +- Upstream `cuda.core` example: [`memory_ops.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/memory_ops.py) +- Upstream `cuda.core` example: [`memory_pool_resources.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/memory_pool_resources.py) diff --git a/samples/memoryResources/memoryResources.py b/samples/memoryResources/memoryResources.py new file mode 100644 index 00000000000..3680f7c9e02 --- /dev/null +++ b/samples/memoryResources/memoryResources.py @@ -0,0 +1,257 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Memory management with cuda.core: Buffers and Memory Resources + +Demonstrates the Memory Resource / Buffer abstraction in cuda.core: + + * ``DeviceMemoryResource`` - GPU-only memory (device pool) + * ``PinnedMemoryResource`` - page-locked host memory accessible by the GPU + * ``ManagedMemoryResource`` - unified memory that migrates between + host and device on demand + +Each resource hands out ``Buffer`` objects that can be: + * passed to kernels as pointers + * copied between each other with ``buffer.copy_to(...)`` + * viewed as NumPy or CuPy arrays via DLPack (``__dlpack__``) + +The kernel below performs a fused scale + bias on both a device buffer +and a pinned buffer, then we copy the result across resources to confirm +each pathway works end-to-end. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import ( + Device, + DeviceMemoryResource, + LaunchConfig, + ManagedMemoryResource, + PinnedMemoryResource, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +SCALE_BIAS_KERNEL = r""" +extern "C" __global__ +void scale_and_bias(float* data, size_t N, float scale, float bias) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + const unsigned int stride = blockDim.x * gridDim.x; + for (size_t i = tid; i < N; i += stride) { + data[i] = data[i] * scale + bias; + } +} +""" + + +def demo_device_and_pinned(device, stream, kernel, size): + """Use pinned host memory as a staging area for a device-side kernel. + + Canonical H2D / compute / D2H pattern: + host (pinned) -> device -> launch -> device -> host (pinned) + """ + print("\n[1] DeviceMemoryResource + PinnedMemoryResource (staging)") + dtype = np.float32 + nbytes = size * dtype().itemsize + + # The device's built-in memory resource is a good default for GPU memory. + device_mr = device.memory_resource + pinned_mr = PinnedMemoryResource() + + pinned_in = pinned_mr.allocate(nbytes, stream=stream) + pinned_out = pinned_mr.allocate(nbytes, stream=stream) + device_buffer = device_mr.allocate(nbytes, stream=stream) + try: + # Wrap each Buffer as a typed array via DLPack (no copies). + pinned_in_view = np.from_dlpack(pinned_in).view(dtype=dtype) + pinned_out_view = np.from_dlpack(pinned_out).view(dtype=dtype) + + # Initialize host-side input. + pinned_in_view[:] = np.arange(size, dtype=dtype) + original = pinned_in_view.copy() + + # Stage H2D: pinned -> device. + pinned_in.copy_to(device_buffer, stream=stream) + + # Launch kernel on the device buffer. + config = LaunchConfig(grid=(size + 255) // 256, block=256) + launch( + stream, + config, + kernel, + device_buffer, + np.uint64(size), + np.float32(3.0), + np.float32(-0.5), + ) + + # Stage D2H: device -> pinned. + device_buffer.copy_to(pinned_out, stream=stream) + stream.sync() + + expected = original * 3.0 - 0.5 + assert np.allclose(pinned_out_view, expected), "H2D -> kernel -> D2H mismatch" + print(" Pinned staging, device kernel, and copy_to verified") + finally: + device_buffer.close(stream) + pinned_out.close(stream) + pinned_in.close(stream) + + +def demo_managed(device, stream, kernel, size): + """Allocate a managed (unified) buffer; kernel writes are visible on host.""" + print("\n[2] ManagedMemoryResource (unified memory)") + dtype = np.float32 + nbytes = size * dtype().itemsize + + managed_mr = ManagedMemoryResource() + managed_buffer = managed_mr.allocate(nbytes, stream=stream) + try: + managed_view = np.from_dlpack(managed_buffer).view(dtype=dtype) + + managed_view[:] = np.arange(size, dtype=dtype) + original = managed_view.copy() + # Before launching, make sure host writes have reached the GPU. + device.sync() + + config = LaunchConfig(grid=(size + 255) // 256, block=256) + launch( + stream, + config, + kernel, + managed_buffer, + np.uint64(size), + np.float32(0.5), + np.float32(10.0), + ) + stream.sync() + + # No explicit copy: the same numpy view observes the GPU's writes. + assert np.allclose(managed_view, original * 0.5 + 10.0), "Managed memory result mismatch" + print(" GPU writes observed directly through the host-visible mapping") + finally: + managed_buffer.close(stream) + + +def demo_explicit_device_pool(device, stream, kernel, size): + """Allocate from a user-created DeviceMemoryResource with default options.""" + print("\n[3] Explicit DeviceMemoryResource") + dtype = np.float32 + nbytes = size * dtype().itemsize + + # Explicitly create a pool tied to this device. Use .close() to tear it down. + explicit_mr = DeviceMemoryResource(device) + buffer = explicit_mr.allocate(nbytes, stream=stream) + try: + view = cp.from_dlpack(buffer).view(dtype=cp.float32) + view[:] = cp.arange(size, dtype=cp.float32) + device.sync() + + config = LaunchConfig(grid=(size + 255) // 256, block=256) + launch( + stream, + config, + kernel, + buffer, + np.uint64(size), + np.float32(1.0), + np.float32(100.0), + ) + stream.sync() + + expected = cp.arange(size, dtype=cp.float32) + 100.0 + assert cp.allclose(view, expected), "Explicit device pool result mismatch" + print(" Explicit DeviceMemoryResource allocation verified") + finally: + buffer.close(stream) + explicit_mr.close() + + +def main(): + import argparse + + parser = argparse.ArgumentParser(description="Demonstrate cuda.core memory resources (Buffer + MR)") + parser.add_argument( + "--elements", + type=int, + default=1 << 16, + help="Number of float32 elements per buffer (default: 65536)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + if sys.platform == "win32": + print( + "This sample relies on ManagedMemoryResource with concurrent host " + "access, which is not supported on Windows " + "(concurrent_managed_access=False). Waiving this sample." + ) + sys.exit(2) + + device = Device(args.device) + device.set_current() + print_gpu_info(device) + + stream = device.create_stream() + + try: + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + program = Program(SCALE_BIAS_KERNEL, code_type="c++", options=program_options) + module = program.compile("cubin") + kernel = module.get_kernel("scale_and_bias") + + demo_device_and_pinned(device, stream, kernel, args.elements) + demo_managed(device, stream, kernel, args.elements) + demo_explicit_device_pool(device, stream, kernel, args.elements) + + print("\nDone") + return 0 + finally: + stream.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/memoryResources/requirements.txt b/samples/memoryResources/requirements.txt new file mode 100644 index 00000000000..641e4e20c71 --- /dev/null +++ b/samples/memoryResources/requirements.txt @@ -0,0 +1,5 @@ +# Memory Resources Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/multiGPUGradientAverage/README.md b/samples/multiGPUGradientAverage/README.md new file mode 100644 index 00000000000..c6cfa8594c0 --- /dev/null +++ b/samples/multiGPUGradientAverage/README.md @@ -0,0 +1,128 @@ +# Sample: multiGPUGradientAverage (Python) + +## Description + +This sample demonstrates gradient averaging across multiple GPUs using MPI and cuda.core. Each GPU computes local gradients, which are synchronized (averaged) across all GPUs using MPI Allreduce with host-staging (GPU → CPU → MPI → CPU → GPU) for maximum compatibility. + +## What you will learn + +- How to initialize MPI for multi-process GPU communication +- How to map MPI ranks to CUDA devices consistently +- How to integrate cuda.core streams with CuPy using `Stream.from_external` +- How to compile and launch custom CUDA kernels using cuda.core +- How to use cuda.core Event for GPU timing measurements +- How to use MPI Allreduce with host-staging for universal compatibility + +## Prerequisites + +- Python 3.10+ +- CUDA Toolkit 13.0+ +- Standard MPI implementation (OpenMPI, MPICH, or Intel MPI) +- Multiple NVIDIA GPUs (tested with 2+ GPUs) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## Running + +**IMPORTANT:** This sample **MUST** be launched by an MPI runtime with at +least 2 processes. On Linux/macOS this is typically `mpirun`; on Windows with +Microsoft MPI the launcher is `mpiexec` (and the flag for process count is +`-n`). Either form is accepted by most MPI stacks. + +Linux / macOS (OpenMPI, MPICH, Intel MPI): + +```bash +# Single node (2 GPUs) +mpirun -np 2 python multiGPUGradientAverage.py --size 10000 + +# Single node (4 GPUs) +mpirun -np 4 python multiGPUGradientAverage.py --size 10000 + +# With specific GPUs +CUDA_VISIBLE_DEVICES=0,2 mpirun -np 2 python multiGPUGradientAverage.py +``` + +Windows (Microsoft MPI — `mpiexec` is installed under +`C:\Program Files\Microsoft MPI\Bin\` and is not on PATH by default): + +```powershell +& "C:\Program Files\Microsoft MPI\Bin\mpiexec.exe" -n 2 ` + python multiGPUGradientAverage.py --size 10000 +``` + +## Sample Output + +``` +[Rank 0] World size = 4 + +====================================================================== +Multi-GPU Gradient Average Demo +====================================================================== +Number of MPI ranks (GPUs): 4 +Gradient vector length per GPU: 10000 +Device: NVIDIA GeForce RTX 4090 +Computation: gradients computed on GPU via cuda.core. +Communication: gradients averaged via MPI_Allreduce on host (CPU) buffers. +====================================================================== + +Sample averaged gradient values (rank 0): + avg_grad[0] = 1.500000 + avg_grad[5000] = 6.500000 + avg_grad[9999] = 11.499000 + +Expected values: + expected[0] = 1.500000 + expected[5000] = 6.500000 + expected[9999] = 11.499000 + +Verifying gradient averaging correctness... +[PASS] Gradient averaging is correct. +[PASS] Gradient averaging is correct on all ranks. + +Performance: + Kernel time (GPU only): 0.123 ms + MPI communication time (host-staging, end-to-end): 0.456 ms + Total time: 0.579 ms + +====================================================================== +Demo complete. +====================================================================== +``` + +## Key Technical Details + +The sample uses cuda.core streams and makes CuPy use them via `Stream.from_external`: + +```python +stream = device.create_stream() +cp.cuda.Stream.from_external(stream).use() +``` + +GPU timing is measured using cuda.core Event: + +```python +from cuda.core import EventOptions +timing_options = EventOptions(enable_timing=True) +start_event = stream.record(options=timing_options) +# ... GPU work ... +end_event = stream.record(options=timing_options) +end_event.sync() +kernel_time = end_event - start_event # Returns milliseconds +``` + +The host-staging pattern transfers data GPU → CPU → MPI → CPU → GPU for universal MPI compatibility without requiring CUDA-aware MPI. + +## Troubleshooting + +**Error: "This sample requires at least 2 MPI processes!"** + +Solution: +- Linux / macOS: `mpirun -np 2 python multiGPUGradientAverage.py` +- Windows (Microsoft MPI): `& "C:\Program Files\Microsoft MPI\Bin\mpiexec.exe" -n 2 python multiGPUGradientAverage.py` + (or `mpiexec -n 2 ...` after adding `C:\Program Files\Microsoft MPI\Bin\` to `PATH`). + +See the **Running** section above for fully-formed examples. diff --git a/samples/multiGPUGradientAverage/multiGPUGradientAverage.py b/samples/multiGPUGradientAverage/multiGPUGradientAverage.py new file mode 100644 index 00000000000..612ca80a2bf --- /dev/null +++ b/samples/multiGPUGradientAverage/multiGPUGradientAverage.py @@ -0,0 +1,402 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["mpi4py>=3.1.4", "cupy-cuda13x>=14.0.0", "cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +""" +Multi-GPU Gradient Average using MPI and cuda.core (Host-staging Allreduce) + +Question: How do I synchronize gradients across GPUs? + +Answer: +Each GPU (each MPI rank) computes local gradients on device via CUDA. +Gradients are then averaged across ranks via an MPI Allreduce over host +(CPU) buffers, following the classic data-parallel training pattern. + +This sample shows how to: +- Initialize MPI for multi-process GPU workloads +- Map MPI ranks to GPUs +- Use cuda.core for kernel compilation and execution +- Integrate cuda.core with CuPy using the stream protocol +- Perform gradient averaging with MPI Allreduce (using host staging) +- Use cuda.core Event for GPU timing measurements +- Verify correctness of distributed gradient synchronization + +Key concepts: Allreduce, NCCL collectives (conceptually), distributed training + +Note: +- All gradient computation and validation happen on GPUs. +- MPI Allreduce is executed on CPU (host) buffers via a simple + GPU -> CPU -> MPI -> CPU -> GPU staging pattern so that the sample + works on any MPI stack, without requiring CUDA-aware MPI. +- In production deep learning frameworks (e.g., PyTorch DDP), NCCL + usually implements the GPU Allreduce directly; the communication + pattern and semantics are the same as demonstrated here. +""" + +import sys +from pathlib import Path + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +try: + import cupy as cp + from mpi4py import MPI + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + system, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install: pip install mpi4py cupy-cuda12x cuda-python cuda-core") + sys.exit(1) + + +# ============================================================================ +# CUDA device selection and stream management +# ============================================================================ + + +def init_device(rank: int): + """ + Initialize CUDA device and stream for this MPI rank. + + For a simple single-node run, we map rank % num_gpus to a device id. + This covers both the common case (world_size == num_gpus) and the case + where multiple ranks share a GPU. + + Returns + ------- + tuple[Device, Stream] + CUDA device object and stream object. + """ + num_gpus = system.get_num_devices() + if num_gpus == 0: + raise RuntimeError("No CUDA devices available") + + dev_id = rank % num_gpus # simple mapping: rank -> GPU in round-robin + + try: + device = Device(dev_id) + except (RuntimeError, ValueError) as e: + if rank == 0: + print(f"Warning: Cannot assign GPU {dev_id}, using GPU 0. Error: {e}") + device = Device(0) + + device.set_current() + # Align CuPy with cuda.core's chosen device ID + cp.cuda.Device(device.device_id).use() + + # Create cuda.core stream and make CuPy use it + stream = device.create_stream() + cp.cuda.Stream.from_external(stream).use() + + return device, stream + + +# ============================================================================ +# CUDA kernel definition and compilation +# ============================================================================ + +# Tiny CUDA kernel to initialize local "gradients" +# Uses grid-stride loop to handle arrays larger than grid size +INIT_KERNEL = r""" +extern "C" __global__ +void init_grad_kernel(float* grad, int n, int rank) +{ + // Grid-stride loop: each thread processes multiple elements + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = gridDim.x * blockDim.x; + for (size_t i = tid; i < n; i += stride) { + // Gradient value depends on MPI rank so we can verify reduction: + // grad_i = rank + 0.001 * i + grad[i] = rank + 0.001f * i; + } +} +""" + +_kernel_cache = {} + + +def get_init_kernel(device: Device): + """Compile (or retrieve cached) init_grad_kernel for this device.""" + key = device.pci_bus_id + if key not in _kernel_cache: + opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(INIT_KERNEL, code_type="c++", options=opts) + mod = prog.compile("cubin") + _kernel_cache[key] = mod.get_kernel("init_grad_kernel") + return _kernel_cache[key] + + +# ============================================================================ +# Local gradient computation on each GPU +# ============================================================================ + + +def compute_local_gradients(num_elements: int, device: Device, stream: object, rank: int) -> cp.ndarray: + """ + Compute a local "gradient" vector on the current GPU. + + For demo purposes, we initialize: + grad[i] = rank + 0.001 * i + + Parameters + ---------- + num_elements : int + Length of gradient vector. + device : Device + CUDA device object. + stream : Stream + CUDA stream object (created at device initialization). + rank : int + MPI rank ID. + + Returns + ------- + cupy.ndarray + Gradient vector on GPU. + """ + # Create gradient array (CuPy uses the stream set at device initialization) + grad = cp.empty(num_elements, dtype=cp.float32) + + # Use a CUDA kernel compiled with cuda.core to fill the array + kernel = get_init_kernel(device) + + threads_per_block = 256 + blocks_per_grid = (num_elements + threads_per_block - 1) // threads_per_block + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + + # Launch kernel using cuda.core stream + launch(stream, config, kernel, grad.data.ptr, num_elements, rank) + + return grad + + +# ============================================================================ +# MPI Allreduce to average gradients (host-staging) +# ============================================================================ + + +def average_gradients(local_grad: cp.ndarray, comm: object, world_size: int) -> cp.ndarray: + """ + Average gradients across all MPI ranks using host-staging Allreduce. + + Steps: + 1. Copy local gradients from GPU to CPU (NumPy). + 2. Perform MPI_Allreduce on host buffers. + 3. Divide by world_size to obtain the average. + 4. Copy the averaged gradients back to GPU. + + This pattern is environment-agnostic and works on any MPI stack. + """ + assert local_grad.dtype == cp.float32 + + # GPU -> CPU + local_host = local_grad.get() # NumPy array on host + avg_host = local_host.copy() + + # Allreduce on host buffers + comm.Allreduce(local_host, avg_host, op=MPI.SUM) + + # Average + avg_host /= world_size + + # CPU -> GPU + avg_grad = cp.asarray(avg_host) + + return avg_grad + + +# ============================================================================ +# Testing and verification +# ============================================================================ + + +def main(): + """Demo: Multi-GPU gradient averaging with MPI (host-staging Allreduce).""" + import argparse + + # Initialize MPI + comm = MPI.COMM_WORLD + world_size = comm.Get_size() + rank = comm.Get_rank() + + parser = argparse.ArgumentParser( + description=("Multi-GPU Gradient Average with mpi4py + cuda.core (host-staging Allreduce)") + ) + parser.add_argument( + "--size", + type=int, + default=1024, + help="Number of gradient elements per GPU (default: 1024)", + ) + args = parser.parse_args() + + num_elements = args.size + + # Initialize device and stream + device = None + stream = None + try: + device, stream = init_device(rank) + + if rank == 0: + print(f"[Rank 0] World size = {world_size}") + comm.Barrier() + + # Validate world size + if world_size < 2: + if rank == 0: + print("=" * 70) + print("ERROR: This sample requires at least 2 MPI processes!") + print("=" * 70) + print("\nPlease run with mpirun:") + print(" mpirun -np 2 python multiGPUGradientAverage.py") + print(" mpirun -np 4 python multiGPUGradientAverage.py --size 10000") + print("\nFor multi-GPU systems:") + print(" mpirun -np N python multiGPUGradientAverage.py") + print(" (where N = number of GPUs)") + print("=" * 70) + sys.exit(1) + + # Validate input + if num_elements <= 0: + if rank == 0: + print("Error: --size must be positive") + sys.exit(1) + + if rank == 0: + print("\n" + "=" * 70) + print("Multi-GPU Gradient Average Demo") + print("=" * 70) + print(f"Number of MPI ranks (GPUs): {world_size}") + print(f"Gradient vector length per GPU: {num_elements}") + print(f"Device: {device.name}") + print("Computation: gradients computed on GPU via cuda.core.") + print("Communication: gradients averaged via MPI_Allreduce on host (CPU) buffers.") + print("=" * 70) + + # Step 1: Compute local gradients on each GPU + # Use cuda.core Event for GPU timing measurements + timing_options = EventOptions(timing_enabled=True) + start_event = stream.record(options=timing_options) + + local_grad = compute_local_gradients(num_elements, device, stream, rank) + + # Record end event and synchronize to ensure timing is complete + end_event = stream.record(options=timing_options) + end_event.sync() + + # Calculate elapsed time: Event subtraction returns milliseconds + kernel_time = end_event - start_event + + # Step 2: Average gradients across all ranks (host-staging Allreduce) + # Use CPU timing for MPI communication (host-staging includes GPU↔CPU transfers) + import time + + comm_start = time.time() + avg_grad = average_gradients(local_grad, comm, world_size) + comm_time = (time.time() - comm_start) * 1000 # Convert to ms + + # Step 3: Sanity check on rank 0 + # For each element i: + # local_grad_r[i] = r + 0.001 * i, r = 0..world_size-1 + # Sum over ranks: + # sum[i] = sum_r r + 0.001 * i * world_size + # Average: + # avg[i] = (0 + ... + (world_size-1))/world_size + 0.001 * i + # = (world_size - 1)/2 + 0.001 * i + # + # We verify this formula. + + expected_base = (world_size - 1) / 2.0 + i0 = 0 + i1 = num_elements // 2 + i2 = num_elements - 1 + + # Copy a few sample elements back to host for printing on rank 0 + if rank == 0: + avg_host_samples = avg_grad[[i0, i1, i2]].get() + print("\nSample averaged gradient values (rank 0):") + print(f" avg_grad[{i0}] = {avg_host_samples[0]:.6f}") + print(f" avg_grad[{i1}] = {avg_host_samples[1]:.6f}") + print(f" avg_grad[{i2}] = {avg_host_samples[2]:.6f}") + + expected0 = expected_base + 0.001 * i0 + expected1 = expected_base + 0.001 * i1 + expected2 = expected_base + 0.001 * i2 + print("\nExpected values:") + print(f" expected[{i0}] = {expected0:.6f}") + print(f" expected[{i1}] = {expected1:.6f}") + print(f" expected[{i2}] = {expected2:.6f}") + + # All ranks perform a full-array correctness check on GPU + expected_full = expected_base + 0.001 * cp.arange(num_elements, dtype=cp.float32) + + # Use utility function to verify results + if rank == 0: + print("\nVerifying gradient averaging correctness...") + ok = verify_array_result(avg_grad, expected_full, rtol=1e-5, atol=1e-8, verbose=(rank == 0)) + + # Ensure all ranks agree on correctness + ok_all = comm.allreduce(ok, op=MPI.LAND) + + if rank == 0: + if ok_all: + print("[PASS] Gradient averaging is correct on all ranks.") + else: + print("[FAIL] Gradient averaging mismatch detected on one or more ranks.") + + print("\nPerformance:") + print(f" Kernel time (GPU only): {kernel_time:.3f} ms") + print(f" MPI communication time (host-staging, end-to-end): {comm_time:.3f} ms") + print(f" Total time: {kernel_time + comm_time:.3f} ms") + + print("\n" + "=" * 70) + print("Demo complete.") + print("=" * 70) + + return 0 if ok_all else 1 + finally: + # Clean up stream resources + if stream is not None: + stream.close() + cp.cuda.Stream.null.use() # Reset CuPy's current stream to the null stream + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/multiGPUGradientAverage/requirements.txt b/samples/multiGPUGradientAverage/requirements.txt new file mode 100644 index 00000000000..7ff01293945 --- /dev/null +++ b/samples/multiGPUGradientAverage/requirements.txt @@ -0,0 +1,21 @@ +# Multi-GPU Gradient Average Sample Requirements + +# MPI Python bindings for distributed communication +mpi4py>=3.1.4 + +# GPU array library (NumPy-compatible arrays on CUDA) +# Use cupy-cuda11x, cupy-cuda12x, or cupy-cuda13x depending on your CUDA version +cupy-cuda13x>=14.0.0 + +# CUDA Python bindings (low-level CUDA driver API) +cuda-python>=13.0.0 + +# cuda.core - Modern Python interface for CUDA +# Provides Program, LaunchConfig, Device, and launch APIs +cuda-core>=1.0.0 + +# Note: This sample uses host-staging for MPI communication +# Standard MPI installation is sufficient (no CUDA-aware MPI required) +# Install MPI using system package manager: +# Ubuntu/Debian: sudo apt-get install openmpi-bin libopenmpi-dev +# Or build from source: https://www.open-mpi.org/software/ompi/ diff --git a/samples/numpyVsCupy/README.md b/samples/numpyVsCupy/README.md new file mode 100644 index 00000000000..28a42848b72 --- /dev/null +++ b/samples/numpyVsCupy/README.md @@ -0,0 +1,73 @@ +# Sample: Numpy vs. Cupy (Python) + +## Description + +This sample demonstrates performance comparison between NumPy (CPU) and CuPy (GPU) for matrix multiplication operations. It benchmarks the execution time of matrix dot products on both CPU and GPU, showing the performance benefits of GPU acceleration for numerical computations. + +## What you will learn + +- How to set up and use CuPy for GPU-accelerated numerical computations. +- How to benchmark NumPy vs CuPy performance for matrix operations. +- How to transfer data between CPU (NumPy) and GPU (CuPy) memory using `cp.asarray()`. +- How to use CUDA device management with the cuda-core library. +- How to validate computational results between CPU and GPU implementations using `np.testing.assert_allclose()`. +- How to handle GPU warmup to avoid first-run overhead in benchmarking. +- How to create and manage explicit CUDA streams with `device.create_stream()`. +- How to properly cleanup streams with `stream.close()` in try/finally blocks. +- How to access GPU device information (name, compute capability). +- How to create timing context managers for performance measurement using CUDA events. + +## Key libraries + +- `numpy` +- `cupy` +- `cuda-core` + +## Key APIs + +**From cuda.core:** +- `Device()` – Get CUDA device object for specific GPU +- `device.create_stream()` – Create explicit CUDA stream +- `stream.close()` – Close and cleanup stream resources + +## Requirements +1. **NVIDIA Graphics Card** with CUDA support +2. **CUDA Drivers** installed on your system +3. **CUDA Toolkit** installed on your system +4. **Python 3.12 or newer** + +**Install packages:** +```bash +pip install -r requirements.txt +``` + +## How to run + +Basic usage: +```bash +# Pre-steps: +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH +# Run from the Python directory: +cd /path/to/numpyVsCupy/Python +python -m 1_GettingStarted.numpyVsCupy.numpyVsCupy +``` + +With custom parameters: +```bash +python -m 1_GettingStarted.numpyVsCupy.numpyVsCupy --n_size 5000 +``` + +### Command line arguments + +- `--n_size`, `-n`: Size of the matrix (n * n) for benchmarking (default: 4096) + +## Expected Output +``` +Validation PASSED: NumPy and CuPy results match within tolerance +Demo completed successfully! +``` + +## Files +- `numpyVsCupy.py` – Python implementation +- `README.md` – This file +- `requirements.txt` – Required packages diff --git a/samples/numpyVsCupy/numpyVsCupy.py b/samples/numpyVsCupy/numpyVsCupy.py new file mode 100644 index 00000000000..06e4204503a --- /dev/null +++ b/samples/numpyVsCupy/numpyVsCupy.py @@ -0,0 +1,141 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +import argparse +import contextlib +import sys +import time +from pathlib import Path + +try: + import cupy as cp + import numpy as np + + from cuda.core import Device, EventOptions +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + + +@contextlib.contextmanager +def timer(message): + """CPU timing context manager.""" + start = time.time() + yield + end = time.time() + print(f"{message}: {(end - start):.6f} seconds") + + +@contextlib.contextmanager +def gpu_timer(message, stream): + """GPU timing context manager using cuda.core CUDA events.""" + event_options = EventOptions(timing_enabled=True) + start_event = stream.record(options=event_options) + yield + end_event = stream.record(options=event_options) + end_event.sync() + + elapsed_time_ms = end_event - start_event # Returns milliseconds + elapsed_time_s = elapsed_time_ms / 1000.0 # Convert to seconds + print(f"{message}: {elapsed_time_s:.6f} seconds") + + +def warmup(): + # Pre-runs a simple GPU operation to avoid first-run overhead in benchmarking. + print("Warmup...") + a_cp = cp.ones((16, 16)) + b_cp = cp.ones((16, 16)) + result_cp = cp.dot(a_cp, b_cp) + return result_cp + + +def run(n): + # Benchmarks NumPy vs. CuPy matrix multiplication for n x n random arrays. + # Prints timing results. + + device = Device() # Use device 0 explicitly + device.set_current() + major, minor = device.compute_capability + print() + print(f"Device Name: {device.name}, SM: {major}.{minor}") + print() + + # Create explicit stream + stream = device.create_stream() + + try: + # Warm up GPU before measuring + warmup() + stream.sync() + + # Generate random matrices on CPU + a_np = np.random.rand(n, n) + b_np = np.random.rand(n, n) + + # NumPy dot product (CPU) + with timer(f"NumPy dot of {n}*{n} arrays"): + result_np = np.dot(a_np, b_np) + + # Transfer NumPy arrays to GPU (using events for timing) + with gpu_timer("Transfer arrays to GPU", stream): + a_cp = cp.asarray(a_np) + b_cp = cp.asarray(b_np) + + # CuPy dot product (GPU) - using events for accurate GPU timing + with gpu_timer(f"CuPy dot of {n}*{n} arrays", stream): + result_cp = cp.dot(a_cp, b_cp) + + print() + # Result validation + if not verify_array_result(result_np, result_cp.get()): + print("Validation FAILED: NumPy and CuPy results do not match within tolerance") + sys.exit(1) + + print("Validation PASSED: NumPy and CuPy results match within tolerance") + finally: + stream.close() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--n_size", "-n", default=4096, type=int, help="Size of the matrix(n * n).") + args = parser.parse_args() + run(args.n_size) + print("Demo completed successfully!") + + +if __name__ == "__main__": + main() diff --git a/samples/numpyVsCupy/requirements.txt b/samples/numpyVsCupy/requirements.txt new file mode 100644 index 00000000000..c895afaa1b7 --- /dev/null +++ b/samples/numpyVsCupy/requirements.txt @@ -0,0 +1,7 @@ +# Numpy vs. Cupy - Requirements +# Install with: pip install -r requirements.txt + +numpy>=2.3.2 +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/pageRank/README.md b/samples/pageRank/README.md new file mode 100644 index 00000000000..3be6964c688 --- /dev/null +++ b/samples/pageRank/README.md @@ -0,0 +1,184 @@ +# Sample: PageRank Algorithm (Python) + +> **Known issue — version-pinned sample.** Unlike the other samples in this +> repository, this sample is pinned to `cuda-core<1.0.0`. The reason is that +> `cudf-cu13` transitively requires `numba-cuda<0.29.0`, and every +> `numba-cuda` release in that range pins `cuda-core<1.0.0`. Installing this +> sample's `requirements.txt` into a shared environment will downgrade +> `cuda-core` and break the other samples (which use the 1.0 API). +> +> The recommended workflow is one of: +> +> - Install this sample's requirements in a **dedicated virtual +> environment**, or +> - Re-run the other samples' `pip install -r requirements.txt` afterwards +> to upgrade `cuda-core` back to 1.0. +> +> This sample will be re-aligned with the rest of the repository +> (`cuda-core>=1.0.0`) once `cudf-cu13` ships a release that lifts its +> `numba-cuda` upper bound. + +## Description + +Demonstrates GPU-accelerated PageRank computation for graph analysis using RAPIDS cuGraph, with cuda.core for device, stream, and GPU timing. This sample focuses on cuda.core integration with high-level libraries (cuGraph/cuDF); for custom kernel programming (Program, LaunchConfig, launch), see the blockwiseSum sample. + +## What You'll Learn + +- Graph representation using cuDF DataFrames for edge lists +- GPU-optimized PageRank via RAPIDS cuGraph library +- Performance comparison between cuGraph GPU and CPU reference implementation +- cuda.core device/stream management and GPU timing + +## Key Libraries + +- `cugraph` - RAPIDS GPU-accelerated graph analytics +- `cudf` - RAPIDS GPU DataFrame library +- `cuda.core` - Device, stream, and event APIs for GPU timing +- `cupy` - GPU array library (Stream.from_external for cuDF/cuGraph) +- `numpy` - CPU reference implementation + +## Key APIs + +### From cuda.core: + +- `Device(0)` - Create device, `device.set_current()`, `device.create_stream()` +- `EventOptions(enable_timing=True)` - GPU timing via `stream.record()` +- `cp.cuda.Stream.from_external(stream).use()` - Make cuDF/cuGraph use cuda.core stream + +### From cuGraph: + +- `cugraph.Graph(directed=True)` - Create directed graph structure +- `Graph.from_cudf_edgelist()` - Build graph from edge list DataFrame +- `cugraph.pagerank()` - GPU-accelerated PageRank algorithm + +### From cuDF: + +- `cudf.DataFrame()` - GPU DataFrame for edge lists + +## Requirements + +### Hardware: + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 512 MB (for 10K node graph) + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See requirements.txt for package dependencies + +### Platform Support: + +This sample depends on RAPIDS (`cugraph-cu13`, `cudf-cu13`, `dask-cuda`), +which is currently published only as **Linux (manylinux) wheels** on +`pypi.nvidia.com` — no Windows wheels exist. On Windows the sample exits +early with a waive message and exit code `2` instead of attempting an +install that cannot succeed. + +## Installation + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/pageRank +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +``` + +## How to Run + +```bash +python pageRank.py +``` + +## Algorithm + +The PageRank formula iteratively computes node importance: + +``` +PR(v) = (1-d)/N + d * Σ PR(u)/out_degree(u) +``` + +Where: +- `d` = damping factor (typically 0.85) +- `N` = total number of nodes +- Sum is over all nodes `u` that link to `v` + +## Expected Output + +``` +============================================================ +PageRank Algorithm (using RAPIDS cuGraph) +============================================================ + +Device: NVIDIA GeForce RTX ... +Compute Capability: sm_XX + +Graph Parameters: + Nodes: 10,000 + Avg edges/node: 15 + Total edges: ~150,000 + Avg in-degree: 14.9 + +------------------------------------------------------------ +GPU PageRank (RAPIDS cuGraph) +------------------------------------------------------------ +Time: X.XXX ms + +Top 5 nodes by PageRank: + 1. Node XXXXX: 0.XXXXXX + ... + +------------------------------------------------------------ +CPU PageRank (Reference) +------------------------------------------------------------ +Time: XXXX.XXX ms +Iterations: XX + +------------------------------------------------------------ +PERFORMANCE SUMMARY +------------------------------------------------------------ +GPU (cuGraph): X.XXX ms +CPU (Reference): XXXX.XXX ms +Speedup: XXXX.Xx + +------------------------------------------------------------ +VERIFICATION +------------------------------------------------------------ +GPU vs CPU PageRank scores: Test PASSED + +PageRank Properties: + Sum of scores: 1.000000 (should be ~1.0) + Sum check: ✓ + +Done +``` + +## Files + +- `pageRank.py` - Python implementation using RAPIDS cuGraph +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## Why cuGraph? + +RAPIDS cuGraph provides production-grade, GPU-accelerated graph analytics: + +- **Highly optimized** - Uses advanced GPU parallelization techniques +- **Scalable** - Handles graphs with billions of edges +- **Easy to use** - Simple Python API similar to NetworkX +- **Integrated** - Works seamlessly with cuDF, cuML, and other RAPIDS libraries + +## Applications + +- Web page ranking (original Google PageRank) +- Social network influence analysis +- Citation network analysis +- Recommendation systems +- Fraud detection in financial networks + +## See Also + +- [RAPIDS cuGraph Documentation](https://docs.rapids.ai/api/cugraph/stable/) +- [cuGraph GitHub Repository](https://github.com/rapidsai/cugraph) +- [RAPIDS Installation Guide](https://rapids.ai/start.html) diff --git a/samples/pageRank/pageRank.py b/samples/pageRank/pageRank.py new file mode 100644 index 00000000000..b587ec2710b --- /dev/null +++ b/samples/pageRank/pageRank.py @@ -0,0 +1,364 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core<1.0.0", "cugraph-cu13>=26.0.0", "cudf-cu13>=26.0.0", "dask-cuda>=26.4.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +PageRank Algorithm + +Demonstrates GPU-accelerated PageRank computation for graph analysis: +- Graph representation using edge lists and cuDF DataFrames +- GPU-optimized PageRank via RAPIDS cuGraph library +- Performance comparison: cuGraph GPU vs CPU reference + +Uses RAPIDS cuGraph for production-grade graph analytics on GPU. + +PageRank Algorithm: + PR(v) = (1-d)/N + d * sum(PR(u)/out_degree(u)) for all u linking to v + where d = damping factor (typically 0.85), N = number of nodes +""" + +import sys +import time +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import print_gpu_info, verify_array_result + +if sys.platform == "win32": + print( + "This sample depends on RAPIDS (cugraph-cu13 / cudf-cu13), which is " + "currently published only as Linux (manylinux) wheels on " + "pypi.nvidia.com. Waiving this sample on Windows." + ) + sys.exit(2) + +try: + import cudf + import cugraph + import cupy as cp + import numpy as np + + from cuda.core import Device, EventOptions, Stream +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Install with: pip install -r requirements.txt") + sys.exit(1) + + +def generate_random_graph( + num_nodes: int, + avg_edges_per_node: int = 10, + seed: int = 42, +) -> tuple[np.ndarray, np.ndarray, np.ndarray]: + """ + Generate a random directed graph as edge list. + + Parameters + ---------- + num_nodes : int + Number of nodes in the graph + avg_edges_per_node : int + Average number of outgoing edges per node + seed : int + Random seed for reproducibility + + Returns + ------- + tuple[np.ndarray, np.ndarray, np.ndarray] + (sources, destinations, out_degree) arrays + """ + rng = np.random.default_rng(seed) + + sources_list: list[int] = [] + destinations_list: list[int] = [] + out_degree = np.zeros(num_nodes, dtype=np.int32) + + for src in range(num_nodes): + # Random number of outgoing edges (Poisson distribution) + n_edges = max(1, rng.poisson(avg_edges_per_node)) + n_edges = min(n_edges, num_nodes - 1) + # Random destinations (no self-loops); rejection sampling avoids O(N²) memory + dests: set[int] = set() + while len(dests) < n_edges: + d = int(rng.integers(0, num_nodes)) + if d != src: + dests.add(d) + dests = np.array(list(dests), dtype=np.int32) + for dst in dests: + sources_list.append(src) + destinations_list.append(dst) + out_degree[src] = len(dests) + + sources = np.array(sources_list, dtype=np.int32) + destinations = np.array(destinations_list, dtype=np.int32) + + return sources, destinations, out_degree + + +def pagerank_cpu( + sources: np.ndarray, + destinations: np.ndarray, + out_degree: np.ndarray, + num_nodes: int, + damping: float = 0.85, + max_iterations: int = 100, + tolerance: float = 1e-6, +) -> tuple[np.ndarray, int]: + """ + Compute PageRank on CPU using iterative method. + + Parameters + ---------- + sources : np.ndarray + Source nodes of edges + destinations : np.ndarray + Destination nodes of edges + out_degree : np.ndarray + Outgoing degree for each node + num_nodes : int + Number of nodes + damping : float + Damping factor (default: 0.85) + max_iterations : int + Maximum iterations + tolerance : float + Convergence tolerance + + Returns + ------- + tuple[np.ndarray, int] + (PageRank scores, iterations until convergence) + """ + # Build incoming edges list for each node + incoming: list[list[int]] = [[] for _ in range(num_nodes)] + for src, dst in zip(sources, destinations): + incoming[dst].append(src) + + # Initialize PageRank uniformly + pr = np.ones(num_nodes, dtype=np.float32) / num_nodes + pr_new = np.zeros(num_nodes, dtype=np.float32) + + base_score = (1.0 - damping) / num_nodes + + for iteration in range(max_iterations): + # Handle dangling nodes (nodes with no outgoing edges) + dangling_sum = np.sum(pr[out_degree == 0]) + dangling_contrib = damping * dangling_sum / num_nodes + + for v in range(num_nodes): + # Sum contributions from incoming neighbors + incoming_sum = 0.0 + for u in incoming[v]: + if out_degree[u] > 0: + incoming_sum += pr[u] / out_degree[u] + + pr_new[v] = base_score + damping * incoming_sum + dangling_contrib + + # Check convergence + diff = np.sum(np.abs(pr_new - pr)) + pr, pr_new = pr_new, pr + + if diff < tolerance: + return pr, iteration + 1 + + return pr, max_iterations + + +def run_pagerank_benchmark( + num_nodes: int = 10000, + avg_edges: int = 15, + max_iterations: int = 100, +) -> bool: + """ + Run PageRank benchmark comparing cuGraph GPU and CPU performance. + + Parameters + ---------- + num_nodes : int + Number of nodes in the graph + avg_edges : int + Average edges per node + max_iterations : int + Maximum PageRank iterations + + Returns + ------- + bool + True if benchmark succeeded + """ + print("=" * 60) + print("PageRank Algorithm (using RAPIDS cuGraph)") + print("=" * 60) + + # Initialize cuda.core device and stream + device = Device(0) + device.set_current() + stream: Stream = device.create_stream() + print() + print_gpu_info(device) + + # RAPIDS cuGraph wheels currently don't ship kernel binaries for + # every CUDA architecture. Skip cleanly on architectures known to + # be unsupported instead of failing deep inside cuGraph with a + # cryptic cudaErrorNoKernelImageForDevice. Remove an arch from this + # set once the matching cuGraph release ships kernels for it. + _CUGRAPH_UNSUPPORTED_ARCHES = {"110"} # sm_110 = Thor / Tegra + if device.arch in _CUGRAPH_UNSUPPORTED_ARCHES: + print(f"RAPIDS cuGraph does not yet ship kernels for sm_{device.arch}, waiving this sample.") + stream.close() + sys.exit(2) + + # Make CuPy/cuDF use our cuda.core stream + cp.cuda.Stream.from_external(stream).use() + + # Generate random graph + print("\nGraph Parameters:") + print(f" Nodes: {num_nodes:,}") + print(f" Avg edges/node: {avg_edges}") + + sources, destinations, out_degree = generate_random_graph(num_nodes, avg_edges, seed=42) + + total_edges = len(sources) + print(f" Total edges: {total_edges:,}") + print(f" Avg in-degree: {total_edges / num_nodes:.1f}") + + # ------------------------------------------------------------------------- + # GPU PageRank (cuGraph) + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("GPU PageRank (RAPIDS cuGraph)") + print("-" * 60) + + # Create cuGraph graph from edge list with store_transposed for optimal perf + gdf = cudf.DataFrame( + { + "src": sources, + "dst": destinations, + } + ) + G = cugraph.Graph(directed=True) + G.from_cudf_edgelist(gdf, source="src", destination="dst", store_transposed=True) + + event_opts = EventOptions(enable_timing=True) + + try: + # Warmup + _ = cugraph.pagerank(G, alpha=0.85, max_iter=100, tol=1e-5) + stream.sync() + + # Timed run using cuda.core events + start = stream.record(options=event_opts) + pr_result = cugraph.pagerank(G, alpha=0.85, max_iter=max_iterations, tol=1e-6) + end = stream.record(options=event_opts) + end.sync() + + gpu_time_ms = end - start + print(f"Time: {gpu_time_ms:.3f} ms") + + # Extract results sorted by vertex ID (to numpy for verification) + pr_df = pr_result.sort_values("vertex").reset_index(drop=True) + pr_gpu = pr_df["pagerank"].to_numpy() + + # Show top PageRank nodes + top_k = 5 + top_df = pr_result.nlargest(top_k, "pagerank") + print(f"\nTop {top_k} nodes by PageRank:") + for i, row in enumerate(top_df.to_pandas().itertuples()): + print(f" {i + 1}. Node {row.vertex:5d}: {row.pagerank:.6f}") + + # ------------------------------------------------------------------------- + # CPU PageRank + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("CPU PageRank (Reference)") + print("-" * 60) + + cpu_start = time.perf_counter() + pr_cpu, cpu_iters = pagerank_cpu(sources, destinations, out_degree, num_nodes, max_iterations=max_iterations) + cpu_end = time.perf_counter() + + cpu_time_ms = (cpu_end - cpu_start) * 1000 + print(f"Time: {cpu_time_ms:.3f} ms") + print(f"Iterations: {cpu_iters}") + + # ------------------------------------------------------------------------- + # Performance Summary + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("PERFORMANCE SUMMARY") + print("-" * 60) + speedup = cpu_time_ms / gpu_time_ms + print(f"GPU (cuGraph): {gpu_time_ms:.3f} ms") + print(f"CPU (Reference): {cpu_time_ms:.3f} ms") + print(f"Speedup: {speedup:.1f}x") + + # ------------------------------------------------------------------------- + # Verification + # ------------------------------------------------------------------------- + print("\n" + "-" * 60) + print("VERIFICATION") + print("-" * 60) + + # Compare GPU and CPU results (cuGraph and CPU ref may converge differently) + print("GPU vs CPU PageRank scores: ", end="") + success = verify_array_result(pr_gpu, pr_cpu, rtol=1e-2, atol=1e-4, verbose=True) + + # Verify PageRank properties + print("\nPageRank Properties:") + pr_sum = float(np.sum(pr_gpu)) + print(f" Sum of scores: {pr_sum:.6f} (should be ~1.0)") + + pr_min = float(np.min(pr_gpu)) + pr_max = float(np.max(pr_gpu)) + print(f" Min score: {pr_min:.6f}") + print(f" Max score: {pr_max:.6f}") + + # Check that sum is approximately 1 + sum_ok = abs(pr_sum - 1.0) < 0.01 + print(f" Sum check: {'✓' if sum_ok else '✗'}") + + success = success and sum_ok + return success + finally: + cp.cuda.Stream.null.use() + stream.close() + + +def main() -> None: + """Entry point.""" + success = run_pagerank_benchmark() + if success: + print("\nDone") + else: + print("\nBenchmark completed with errors") + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/pageRank/requirements.txt b/samples/pageRank/requirements.txt new file mode 100644 index 00000000000..fafc9dae18f --- /dev/null +++ b/samples/pageRank/requirements.txt @@ -0,0 +1,11 @@ +# PageRank Requirements (RAPIDS cuGraph) + +cuda-python>=13.0.0 +# cudf-cu13 transitively pins numba-cuda<0.29.0 which requires cuda-core<1.0.0 +cuda-core<1.0.0 +cugraph-cu13>=26.0.0 +cudf-cu13>=26.0.0 +# dask-cuda <26.4 incorrectly pins cuda-core==0.3.*; require the fixed release +dask-cuda>=26.4.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/parallelHistogram/README.md b/samples/parallelHistogram/README.md new file mode 100644 index 00000000000..2820102d599 --- /dev/null +++ b/samples/parallelHistogram/README.md @@ -0,0 +1,117 @@ +# Sample: Parallel Histogram with Atomics (Python) + +## Description + +Compute histograms on the GPU using atomic operations to handle concurrent updates from multiple threads. This sample demonstrates the modern **cuda.core API** for kernel compilation and launch, comparing two approaches: + +1. **Global Atomics** - All threads atomically update a single global histogram +2. **Privatized Histograms** - Each block uses shared memory, then merges to global + +## What You'll Learn + +- Compiling CUDA C kernels with `cuda.core.Program` +- Configuring kernel launches with `cuda.core.LaunchConfig` +- Launching kernels with `cuda.core.launch()` +- Using **atomic operations** (`atomicAdd`) for thread-safe updates +- Optimizing with **shared memory privatization** +- GPU timing with `cuda.core` Events + +## Key Concepts + +### Atomic Operations + +When multiple threads update the same histogram bin, a race condition occurs. Atomic operations ensure thread-safe updates: + +```cuda +atomicAdd(&histogram[data[i]], 1); // Thread-safe increment +``` + +### Global vs Privatized Atomics + +| Approach | Pros | Cons | +|----------|------|------| +| Global | Simple | High contention on popular bins | +| Privatized | Significantly faster | Extra shared memory, synchronization | + +## Key APIs + +### From `cuda.core`: + +- `Device` - Device management and context +- `Program` - Compile CUDA C source code +- `ProgramOptions` - Set architecture, optimization flags +- `LaunchConfig` - Configure grid and block dimensions +- `launch()` - Launch compiled kernel +- `Stream` - Async stream management +- `EventOptions` - Configure events for GPU timing +- `stream.record()` - Record events for timing + +### From `cupy`: + +- `cp.random.randint()` - Generate random data directly on GPU +- `cp.zeros()` - Allocate zeroed GPU arrays + +### CUDA Atomic Functions (in kernel): + +- `atomicAdd()` - Thread-safe addition + +## Requirements + +### Hardware: +- NVIDIA GPU with CUDA support + +### Software: +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- See `requirements.txt` for Python packages + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python parallelHistogram.py +``` + +## Expected Output + +``` +============================================================ +Parallel Histogram with Atomics (cuda.core) +============================================================ + +Device: +Compute Capability: ComputeCapability(major=X, minor=Y) + +Compiling CUDA kernels with cuda.core.Program... + Compiled for architecture: sm_XY + +Generating 10,000,000 random values on GPU... + +Verifying correctness... + Global atomics: PASSED + Privatized atomics: PASSED + +Benchmarking (100 iterations)... + Global atomics: X.XXX ms + Privatized atomics: X.XXX ms + Speedup: XXx + +Test PASSED +``` + +## Files + +- `parallelHistogram.py` - Main sample using cuda.core +- `README.md` - This file +- `requirements.txt` - Dependencies + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CUDA Atomic Functions](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#atomic-functions) +- [CUDA Shared Memory](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#shared-memory) diff --git a/samples/parallelHistogram/parallelHistogram.py b/samples/parallelHistogram/parallelHistogram.py new file mode 100644 index 00000000000..7931ce20b16 --- /dev/null +++ b/samples/parallelHistogram/parallelHistogram.py @@ -0,0 +1,240 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Parallel Histogram with Atomics using cuda.core + +This sample demonstrates GPU histogram computation using atomic operations, +showcasing the modern cuda.core API for: +- Kernel compilation (Program, ProgramOptions) +- Kernel launch configuration (LaunchConfig) +- Stream management (Stream) +- Event timing (EventOptions) + +Two histogram approaches are compared: +1. Global Atomics - All threads atomically update global memory +2. Privatized Histograms - Shared memory reduces global atomic contention +""" + +import sys + +try: + import cupy as cp + import numpy as np + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install: pip install -r requirements.txt") + sys.exit(1) + + +NUM_BINS = 256 + +# CUDA C source code for both histogram kernels +HISTOGRAM_KERNELS = r""" +// Global Atomics - simple but high contention on popular bins +extern "C" __global__ +void histogram_global(const unsigned char* data, unsigned int* histogram, int n) { + int idx = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + for (int i = idx; i < n; i += stride) { + atomicAdd(&histogram[data[i]], 1); + } +} + +// Privatized - uses shared memory to reduce global atomic contention +extern "C" __global__ +void histogram_privatized(const unsigned char* data, unsigned int* histogram, int n) { + __shared__ unsigned int local_hist[256]; + + int tid = threadIdx.x; + int idx = blockIdx.x * blockDim.x + threadIdx.x; + int stride = blockDim.x * gridDim.x; + + // Initialize shared memory + for (int i = tid; i < 256; i += blockDim.x) + local_hist[i] = 0; + __syncthreads(); + + // Accumulate into shared memory (fast) + for (int i = idx; i < n; i += stride) + atomicAdd(&local_hist[data[i]], 1); + __syncthreads(); + + // Merge to global (fewer atomics) + for (int i = tid; i < 256; i += blockDim.x) + if (local_hist[i] > 0) + atomicAdd(&histogram[i], local_hist[i]); +} +""" + + +def main(): + print("=" * 60) + print("Parallel Histogram with Atomics (cuda.core)") + print("=" * 60) + + # Initialize device using cuda.core + device = Device(0) + device.set_current() + print(f"\nDevice: {device.name}") + print(f"Compute Capability: {device.compute_capability}") + + # Create stream using cuda.core + stream = device.create_stream() + + # Make CuPy use the same stream for correct ordering (avoids null-stream sync) + cp.cuda.Stream.from_external(stream).use() + + try: + _run_histogram(device, stream) + finally: + cp.cuda.Stream.null.use() # Restore CuPy to default stream before closing + stream.close() + + +def _run_histogram(device, stream): + """Run histogram computation and benchmarking.""" + # Compile CUDA kernels using cuda.core.Program + print("\nCompiling CUDA kernels with cuda.core.Program...") + arch = f"sm_{device.arch}" + options = ProgramOptions(arch=arch) + program = Program(HISTOGRAM_KERNELS, code_type="c++", options=options) + object_code = program.compile("cubin") + + kernel_global = object_code.get_kernel("histogram_global") + kernel_privatized = object_code.get_kernel("histogram_privatized") + print(f" Compiled for architecture: {arch}") + + # Generate test data directly on GPU (more efficient than CPU->GPU copy) + n = 10_000_000 + print(f"\nGenerating {n:,} random values on GPU...") + data_gpu = cp.random.randint(0, 256, size=n, dtype=cp.uint8) + hist_gpu = cp.zeros(NUM_BINS, dtype=cp.uint32) + + # Compute reference histogram on CPU for verification + data_cpu = cp.asnumpy(data_gpu) + hist_cpu, _ = np.histogram(data_cpu, bins=NUM_BINS, range=(0, 256)) + hist_cpu = hist_cpu.astype(np.uint32) + + # Configure kernel launch using cuda.core.LaunchConfig + block_size = 256 + grid_size = min((n + block_size - 1) // block_size, 1024) + config = LaunchConfig(grid=(grid_size,), block=(block_size,)) + + print("\nVerifying correctness...") + + # Ensure CuPy allocations complete before kernel launch on our stream + stream.sync() + + # Launch global atomics kernel (hist_gpu is already zeros from cp.zeros) + launch(stream, config, kernel_global, data_gpu.data.ptr, hist_gpu.data.ptr, np.int32(n)) + stream.sync() + + hist_global = cp.asnumpy(hist_gpu) + global_ok = np.array_equal(hist_cpu, hist_global) + print(f" Global atomics: {'PASSED' if global_ok else 'FAILED'}") + + # Reset histogram and launch privatized kernel (fill on same stream) + hist_gpu.fill(0) + launch( + stream, + config, + kernel_privatized, + data_gpu.data.ptr, + hist_gpu.data.ptr, + np.int32(n), + ) + stream.sync() + + hist_privatized = cp.asnumpy(hist_gpu) + privatized_ok = np.array_equal(hist_cpu, hist_privatized) + print(f" Privatized atomics: {'PASSED' if privatized_ok else 'FAILED'}") + + if not (global_ok and privatized_ok): + sys.exit(1) + + # Benchmark using cuda.core Events (explicit Event objects recorded on stream) + print("\nBenchmarking (100 iterations)...") + num_iterations = 100 + event_opts = EventOptions(timing_enabled=True) + start_event = device.create_event(options=event_opts) + end_event = device.create_event(options=event_opts) + + # Benchmark global atomics + stream.record(start_event) + for _ in range(num_iterations): + hist_gpu.fill(0) + launch( + stream, + config, + kernel_global, + data_gpu.data.ptr, + hist_gpu.data.ptr, + np.int32(n), + ) + stream.record(end_event) + end_event.sync() + time_global = (end_event - start_event) / num_iterations + + # Benchmark privatized + stream.record(start_event) + for _ in range(num_iterations): + hist_gpu.fill(0) + launch( + stream, + config, + kernel_privatized, + data_gpu.data.ptr, + hist_gpu.data.ptr, + np.int32(n), + ) + stream.record(end_event) + end_event.sync() + time_privatized = (end_event - start_event) / num_iterations + + print(f" Global atomics: {time_global:.3f} ms") + print(f" Privatized atomics: {time_privatized:.3f} ms") + print(f" Speedup: {time_global / time_privatized:.1f}x") + + print("\nTest PASSED") + + +if __name__ == "__main__": + main() diff --git a/samples/parallelHistogram/requirements.txt b/samples/parallelHistogram/requirements.txt new file mode 100644 index 00000000000..7f6d06ebac9 --- /dev/null +++ b/samples/parallelHistogram/requirements.txt @@ -0,0 +1,7 @@ +# Parallel Histogram with Atomics Sample Requirements +# Requires Python 3.10+, CUDA Toolkit 13.0+ + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 +cupy-cuda13x>=14.0.0 diff --git a/samples/parallelReduction/README.md b/samples/parallelReduction/README.md new file mode 100644 index 00000000000..7ca010f245f --- /dev/null +++ b/samples/parallelReduction/README.md @@ -0,0 +1,119 @@ +# Sample: Parallel Reduction (Python) + +## Description + +Efficiently sum a large array on GPU using parallel reduction. This sample demonstrates: +1. **Custom CUDA kernel** showing reduction tree pattern and synchronization +2. **cuda.compute.reduce_into()** for production-ready reduction + +## What You'll Learn + +- **Reduction tree pattern**: Divide-and-conquer parallel algorithm +- **Thread synchronization**: Using `__syncthreads()` for coordination +- **Avoiding warp divergence**: Sequential thread IDs vs strided IDs + +## Key Concepts + +### Reduction Tree Pattern + +Parallel reduction uses a tree-based approach where each iteration halves active elements: + +``` +Initial: [a0, a1, a2, a3, a4, a5, a6, a7] +Step 1: [a0+a4, a1+a5, a2+a6, a3+a7] threads 0-3 active +Step 2: [a0+a2+a4+a6, a1+a3+a5+a7] threads 0-1 active +Step 3: [sum of all] thread 0 only +``` + +This requires only `log2(N)` steps to reduce N elements. + +### Avoiding Warp Divergence + +```c +// Good: Sequential thread IDs (warps stay coherent) +if (tid < s) { + sdata[tid] += sdata[tid + s]; +} + +// Bad: Strided IDs (causes warp divergence) +if (tid % (2 * s) == 0) { // Don't do this! + sdata[tid] += sdata[tid + s]; +} +``` + +## Requirements + +### Hardware + +- NVIDIA GPU with CUDA support + +### Software + +- CUDA Toolkit 13.0+ +- Python 3.10+ +- `cuda-python` (13.0.0+) +- `cuda-core` (>=1.0.0) +- `cuda-cccl` (1.0.0+) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=2.3.2) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python parallelReduction.py +``` + +## Expected Output + +``` +====================================================================== +Parallel Reduction - Efficient GPU Array Summation +====================================================================== + +Device: +Compute Capability: + +Array size: 1,048,576 elements (4.2 MB) +Expected sum: + +Compiling custom CUDA kernel... + +====================================================================== +PART 1: Custom Kernel (Educational) +====================================================================== + +Reduction tree kernel: +Expected: +Error: +Time: ms + +====================================================================== +PART 2: cuda.compute.reduce_into() (Production) +====================================================================== + +cuda.compute result: +Expected: +Error: +Time: ms + +Test PASSED! +``` + +Note: Exact values vary due to random input data. `cuda.compute.reduce_into()` is typically faster than the custom kernel because it calls CUB's `DeviceReduce`, which uses highly tuned, architecture‑specific kernels and optimized memory access patterns. + +## Files + +- `parallelReduction.py` - Custom kernel + cuda.compute comparison +- `README.md` - This documentation +- `requirements.txt` - Python dependencies + +## See Also + +- [Mark Harris - Optimizing Parallel Reduction in CUDA](https://developer.download.nvidia.com/assets/cuda/files/reduction.pdf) +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) diff --git a/samples/parallelReduction/parallelReduction.py b/samples/parallelReduction/parallelReduction.py new file mode 100644 index 00000000000..32b0f19f1d7 --- /dev/null +++ b/samples/parallelReduction/parallelReduction.py @@ -0,0 +1,375 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cuda-cccl>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +Parallel Reduction using cuda.core and cuda.compute + +Demonstrates efficient parallel summation of large arrays on GPU: +1. Custom CUDA kernel showing reduction tree pattern and synchronization +2. cuda.compute.reduce_into() for production-ready reduction + +Key Concepts: +- Reduction tree pattern: Divide-and-conquer parallel algorithm +- Thread synchronization: Using __syncthreads() for coordination +- Sequential thread IDs: How to avoid warp divergence +- cuda.core Stream integration with CuPy via Stream.from_external +""" + +import math +import sys +from pathlib import Path + +# Add Utilities to path +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info, verify_array_result + + from cuda.compute import OpKind, reduce_into + from cuda.core import ( + Device, + Kernel, + LaunchConfig, + Program, + ProgramOptions, + Stream, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# ============================================================================= +# CUDA Kernel: Parallel Reduction (optimized - no warp divergence) +# ============================================================================= +REDUCTION_KERNEL: str = r""" +extern "C" __global__ +void reduce_sum(const float* __restrict__ input, + float* __restrict__ output, int n) { + /* + * Parallel reduction using grid-stride loop (canonical pattern) and + * sequential thread IDs for the reduction tree (avoids warp divergence). + * + * Grid-stride loop: each thread processes multiple elements + * for (i = tid; i < n; i += gridDim.x * blockDim.x) + * + * Reduction tree: sequential addressing keeps warps coherent. + */ + extern __shared__ float sdata[]; + + unsigned int tid = threadIdx.x; + unsigned int grid_stride = (unsigned int)gridDim.x * blockDim.x; + + float sum = 0.0f; + for (unsigned int i = blockIdx.x * blockDim.x + threadIdx.x; i < n; + i += grid_stride) { + sum += input[i]; + } + sdata[tid] = sum; + __syncthreads(); + + // Reduction in shared memory (sequential addressing - no divergence) + for (unsigned int s = blockDim.x / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata[tid] += sdata[tid + s]; + } + __syncthreads(); // Wait for all threads before next iteration + } + + // Thread 0 writes block result + if (tid == 0) { + output[blockIdx.x] = sdata[0]; + } +} +""" + + +def compile_kernel(device: Device) -> Kernel: + """Compile the reduction kernel for the given device.""" + arch = f"sm_{device.arch}" + options = ProgramOptions(arch=arch) + program = Program(REDUCTION_KERNEL, code_type="c++", options=options) + return program.compile(target_type="cubin").get_kernel("reduce_sum") + + +def reduction_stage_output_counts(n: int, block_size: int) -> list[int]: + """Lengths of intermediate arrays for each multi-launch reduction stage.""" + counts: list[int] = [] + while n > 1: + num_blocks = math.ceil(n / block_size) + counts.append(num_blocks) + n = num_blocks + return counts + + +def reduce_custom( + stream: Stream, + kernel: Kernel, + d_input: cp.ndarray, + block_size: int = 256, + sync: bool = True, + work_buffers: list[cp.ndarray] | None = None, +) -> float | cp.ndarray: + """ + Perform parallel reduction using custom CUDA kernel. + + Uses multiple kernel launches to reduce array to single value. + Each launch reduces by factor of block_size. + + When sync=True (default), syncs and returns the scalar result. + When sync=False, returns the 1-element array without syncing; + caller must sync before reading (avoids host overhead in benchmarks). + + work_buffers: optional list of device arrays, one per stage, with length + at least each stage's output count (from ``reduction_stage_output_counts``). + When provided, avoids per-call allocation (e.g. for benchmarking). + """ + n = len(d_input) + current = d_input + stage = 0 + + if work_buffers is not None: + expected_counts = reduction_stage_output_counts(n, block_size) + if len(work_buffers) != len(expected_counts): + msg = f"work_buffers length {len(work_buffers)} != {len(expected_counts)} stages" + raise ValueError(msg) + + while n > 1: + num_blocks = math.ceil(n / block_size) + if work_buffers is not None: + d_output = work_buffers[stage] + if d_output.size < num_blocks: + msg = f"work_buffers[{stage}] size {d_output.size} < {num_blocks}" + raise ValueError(msg) + if d_output.size != num_blocks: + d_output = d_output[:num_blocks] + else: + d_output = cp.empty(num_blocks, dtype=cp.float32) + + config = LaunchConfig( + grid=(num_blocks, 1, 1), + block=(block_size, 1, 1), + shmem_size=block_size * 4, # float = 4 bytes + ) + + launch( + stream, + config, + kernel, + current.data.ptr, + d_output.data.ptr, + np.int32(n), + ) + + current = d_output + n = num_blocks + stage += 1 + + if sync: + stream.sync() + return float(current[0]) + return current + + +def benchmark_custom( + stream: Stream, + kernel: Kernel, + d_input: cp.ndarray, + num_runs: int = 10, + block_size: int = 256, +) -> tuple[float, float]: + """Benchmark custom reduction kernel using cuda.core events.""" + stage_counts = reduction_stage_output_counts(len(d_input), block_size) + work_buffers = [cp.empty(c, dtype=cp.float32) for c in stage_counts] + + # Warmup run (with sync to get valid result) + _ = reduce_custom(stream, kernel, d_input, block_size=block_size, work_buffers=work_buffers) + + event_opts = {"timing_enabled": True} + start_event = stream.device.create_event(options=event_opts) + end_event = stream.device.create_event(options=event_opts) + + times: list[float] = [] + result = 0.0 + + for _ in range(num_runs): + stream.record(start_event) + d_result = reduce_custom( + stream, + kernel, + d_input, + block_size=block_size, + sync=False, + work_buffers=work_buffers, + ) + stream.record(end_event) + end_event.sync() + result = float(d_result[0]) + + times.append(end_event - start_event) + + return result, float(np.mean(times)) + + +def benchmark_cuda_compute( + stream: Stream, + d_input: cp.ndarray, + num_runs: int = 10, +) -> tuple[float, float]: + """Benchmark cuda.compute.reduce_into() using cuda.core events.""" + h_init = np.array([0.0], dtype=np.float32) + + # Warmup (includes JIT compilation) + d_warmup = cp.empty(1, dtype=cp.float32) + reduce_into( + d_in=d_input, + d_out=d_warmup, + op=OpKind.PLUS, + num_items=len(d_input), + h_init=h_init, + stream=stream, + ) + stream.sync() + + d_output = cp.empty(1, dtype=cp.float32) + event_opts = {"timing_enabled": True} + start_event = stream.device.create_event(options=event_opts) + end_event = stream.device.create_event(options=event_opts) + + times: list[float] = [] + result = 0.0 + + for _ in range(num_runs): + stream.record(start_event) + reduce_into( + d_in=d_input, + d_out=d_output, + op=OpKind.PLUS, + num_items=len(d_input), + h_init=h_init, + stream=stream, + ) + stream.record(end_event) + end_event.sync() + + result = float(d_output[0]) + times.append(end_event - start_event) + + return result, float(np.mean(times)) + + +def main() -> bool: + """Main function demonstrating parallel reduction.""" + print("=" * 70) + print("Parallel Reduction - Efficient GPU Array Summation") + print("=" * 70) + + device = Device(0) + device.set_current() + stream = device.create_stream() + cp_stream = cp.cuda.Stream.from_external(stream) + + print() + print_gpu_info(device) + + array_size = 1 << 20 # 1M elements + h_input = np.random.rand(array_size).astype(np.float32) + expected_sum = float(np.sum(h_input)) + + print(f"\nArray size: {array_size:,} elements ({array_size * 4 / 1e6:.1f} MB)") + print(f"Expected sum: {expected_sum:.6f}") + + print("\nCompiling custom CUDA kernel...") + kernel = compile_kernel(device) + + try: + with cp_stream: + d_input = cp.asarray(h_input) + + # ====================================================================== + # Part 1: Custom Kernel + # ====================================================================== + print("\n" + "=" * 70) + print("PART 1: Custom Kernel (Educational)") + print("=" * 70) + + result, time_ms = benchmark_custom(stream, kernel, d_input) + + print(f"\nReduction tree kernel: {result:>14.2f}") + print(f"Expected: {expected_sum:>14.2f}") + print(f"Time: {time_ms:>14.3f} ms") + + # ====================================================================== + # Part 2: cuda.compute (Production) + # ====================================================================== + print("\n" + "=" * 70) + print("PART 2: cuda.compute.reduce_into() (Production)") + print("=" * 70) + + result_cc, time_cc = benchmark_cuda_compute(stream, d_input) + + print(f"\ncuda.compute result: {result_cc:>14.2f}") + print(f"Expected: {expected_sum:>14.2f}") + print(f"Time: {time_cc:>14.3f} ms") + + # Verify both results using principled rtol/atol + with cp_stream: + d_expected = cp.array([expected_sum], dtype=cp.float32) + custom_ok = verify_array_result( + cp.array([result], dtype=cp.float32), + d_expected, + rtol=1e-5, + atol=1e-8, + verbose=False, + ) + compute_ok = verify_array_result( + cp.array([result_cc], dtype=cp.float32), + d_expected, + rtol=1e-5, + atol=1e-8, + verbose=False, + ) + if custom_ok and compute_ok: + print("\nTest PASSED!") + return True + else: + print("\nTest FAILED - Error too large!") + return False + finally: + stream.close() + + +if __name__ == "__main__": + sys.exit(0 if main() else 1) diff --git a/samples/parallelReduction/requirements.txt b/samples/parallelReduction/requirements.txt new file mode 100644 index 00000000000..a3acd886536 --- /dev/null +++ b/samples/parallelReduction/requirements.txt @@ -0,0 +1,7 @@ +# Parallel Reduction Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cuda-cccl>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/prefixSum/README.md b/samples/prefixSum/README.md new file mode 100644 index 00000000000..6542dbf36ec --- /dev/null +++ b/samples/prefixSum/README.md @@ -0,0 +1,83 @@ +# Prefix Sum (Scan) + +Demonstrates parallel prefix sum (scan) algorithms using cuda.compute with cuda.core stream management. + +## Overview + +- Inclusive scan: `output[i] = [init_value] + input[0] + input[1] + ... + input[i]` +- Exclusive scan: `output[i] = init_value + input[0] + input[1] + ... + input[i-1]` +- Uses cuda.compute APIs for optimized CUB-based implementations +- Uses cuda.core APIs for device and stream management +- Demonstrates CuPy integration via `Stream.from_external` + +## Requirements + +### Hardware + +- NVIDIA GPU with CUDA support + +### Software + +- CUDA Toolkit 13.0+ +- Python 3.10+ +- `cuda-python` (13.0.0+) +- `cuda-core` (>=1.0.0) +- `cuda-cccl` (1.0.0+) +- `cupy-cuda13x` (14.0.0+) +- `numpy` (>=2.3.2) + +## Usage + +```bash +# Create and activate virtual environment +python -m venv venv +source venv/bin/activate # Linux/macOS +# venv\Scripts\activate # Windows + +# Install dependencies +pip install -r requirements.txt + +# Run sample +python prefixSum.py +``` + +## Key Concepts + +| Scan Type | Formula | First Element | +|-----------|---------|---------------| +| Inclusive | `output[i] = [init_value] + Σ input[0..i]` | `[init_value] + input[0]` | +| Exclusive | `output[i] = init_value + Σ input[0..i-1]` | `init_value` (typically `0`, the identity for sum) | + +### Stream Management + +This sample demonstrates proper stream usage across libraries: + +```python +# Create stream with cuda.core +stream = device.create_stream() + +# Wrap for CuPy compatibility (cuda.core Stream implements the __cuda_stream__ protocol) +cp_stream = cp.cuda.Stream.from_external(stream) + +# Use with CuPy operations +with cp_stream: + d_input = cp.asarray(data) + d_output = cp.empty_like(d_input) + +# Pass to cuda.compute +inclusive_scan( + d_in=d_input, + d_out=d_output, + op=OpKind.PLUS, + init_value=None, + num_items=len(d_input), + stream=stream, +) +``` + +## Applications + +- Stream compaction +- Radix sort +- Histogram computation +- Polynomial evaluation diff --git a/samples/prefixSum/prefixSum.py b/samples/prefixSum/prefixSum.py new file mode 100644 index 00000000000..a1ba73e3b97 --- /dev/null +++ b/samples/prefixSum/prefixSum.py @@ -0,0 +1,202 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cuda-cccl>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +Prefix Sum (Scan) + +Demonstrates parallel prefix sum algorithms using cuda.compute: +- Inclusive scan: output[i] = [init_value] + input[0] + ... + input[i] +- Exclusive scan: output[i] = init_value + input[0] + ... + input[i-1] + +Uses cuda.compute APIs for optimized CUB-based scan operations. +Uses cuda.core APIs for device and stream management. +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info, verify_array_result + + from cuda.compute import OpKind, exclusive_scan, inclusive_scan + from cuda.core import Device, EventOptions +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def main() -> bool: + """Run prefix sum sample. Returns True if all tests passed.""" + print("=" * 60) + print("Prefix Sum (Scan) - Using cuda.compute") + print("=" * 60) + + device = Device(0) + device.set_current() + stream = device.create_stream() + cp_stream = cp.cuda.Stream.from_external(stream) + + ok = True + try: + print() + print_gpu_info(device) + + h_input = np.array([3, 1, 4, 1, 5, 9, 2, 6], dtype=np.int32) + init_value = np.array([0], dtype=np.int32) + + # ========================================================================= + # Inclusive Scan + # ========================================================================= + print("\n" + "-" * 60) + print("INCLUSIVE SCAN") + print("-" * 60) + print("Formula: output[i] = [init_value] + input[0] + input[1] + ... + input[i]") + + with cp_stream: + d_input = cp.asarray(h_input) + d_output = cp.empty_like(d_input) + + print(f"\nInput: {h_input.tolist()}") + + inclusive_scan( + d_in=d_input, + d_out=d_output, + op=OpKind.PLUS, + init_value=None, + num_items=len(h_input), + stream=stream, + ) + stream.sync() + print(f"Output: {cp.asnumpy(d_output).tolist()}") + + with cp_stream: + expected = cp.asarray(np.cumsum(h_input)) + ok &= verify_array_result(d_output, expected, rtol=0, atol=0) + + # ========================================================================= + # Exclusive Scan + # ========================================================================= + print("\n" + "-" * 60) + print("EXCLUSIVE SCAN") + print("-" * 60) + print("Formula: output[i] = init_value + input[0] + ... + input[i-1]") + + with cp_stream: + d_output = cp.empty_like(d_input) + + print(f"\nInput: {h_input.tolist()}") + + exclusive_scan( + d_in=d_input, + d_out=d_output, + op=OpKind.PLUS, + init_value=init_value, + num_items=len(h_input), + stream=stream, + ) + stream.sync() + print(f"Output: {cp.asnumpy(d_output).tolist()}") + + with cp_stream: + expected = cp.asarray(np.concatenate([init_value, np.cumsum(h_input)[:-1]])) + ok &= verify_array_result(d_output, expected, rtol=0, atol=0) + + # ========================================================================= + # Large Array Performance + # ========================================================================= + print("\n" + "-" * 60) + print("PERFORMANCE (10M elements)") + print("-" * 60) + + N = 10_000_000 + with cp_stream: + d_large_in = cp.ones(N, dtype=np.int32) + d_large_out = cp.empty_like(d_large_in) + + inclusive_scan( + d_in=d_large_in, + d_out=d_large_out, + op=OpKind.PLUS, + init_value=None, + num_items=N, + stream=stream, + ) + stream.sync() + + event_opts = EventOptions(timing_enabled=True) + start_event = device.create_event(options=event_opts) + end_event = device.create_event(options=event_opts) + + num_iterations = 10 + stream.record(start_event) + for _ in range(num_iterations): + inclusive_scan( + d_in=d_large_in, + d_out=d_large_out, + op=OpKind.PLUS, + init_value=None, + num_items=N, + stream=stream, + ) + stream.record(end_event) + end_event.sync() + elapsed_ms = (end_event - start_event) / num_iterations + + print(f"Inclusive scan: {elapsed_ms:.3f} ms") + print(f"Throughput: {N / elapsed_ms / 1e6:.1f} M elements/ms") + + # ========================================================================= + # Summary + # ========================================================================= + print("\n" + "=" * 60) + print("KEY CONCEPTS") + print("=" * 60) + print("• Inclusive: output[i] includes input[i]") + print("• Exclusive: output[i] excludes input[i], starts with init_value") + print("• cuda.compute provides CUB-based optimized implementations") + print("• cuda.core Stream integrates with CuPy via Stream.from_external") + print("• Applications: stream compaction, radix sort, histograms") + print("=" * 60) + return ok + finally: + cp.cuda.Stream.null.use() + stream.close() + + +if __name__ == "__main__": + success = main() + if not success: + sys.exit(1) diff --git a/samples/prefixSum/requirements.txt b/samples/prefixSum/requirements.txt new file mode 100644 index 00000000000..b05c5375317 --- /dev/null +++ b/samples/prefixSum/requirements.txt @@ -0,0 +1,8 @@ +# Prefix Sum Sample Requirements +# Requires Python 3.10+, CUDA Toolkit 13.0+ + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cuda-cccl>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/processCheckpoint/README.md b/samples/processCheckpoint/README.md new file mode 100644 index 00000000000..74c4f2c3086 --- /dev/null +++ b/samples/processCheckpoint/README.md @@ -0,0 +1,206 @@ +# processCheckpoint (Python) + +## Description + +This sample demonstrates how to use the **CUDA process checkpoint API** +via `cuda.core.checkpoint.Process` to suspend, capture, and restore the +CUDA state of a running Linux process. + +CUDA process checkpointing is the driver-level primitive that powers +CRIU + `cuda-checkpoint` integration. + +The sample: + +1. Allocates a GPU buffer and fills it with a deterministic pattern + via a small kernel. +2. Reads the buffer back to host and computes a SHA-256 hash. +3. Runs the full checkpoint lifecycle on its own process: + `lock → checkpoint → restore → unlock`. +4. Reads the buffer back again and verifies that the hash is + unchanged, proving that GPU memory contents survived the round + trip. + +The sample prints the CUDA process state after each step so the +full state machine is visible: + +``` + lock() checkpoint() restore() unlock() +running ---------> locked ------------> checkpointed -----------> locked ---------> running +``` + +## What You'll Learn + +- Creating a `cuda.core.checkpoint.Process` for the current process + by PID and observing its `.state` transitions. +- Running the full `lock → checkpoint → restore → unlock` cycle with + a lock timeout. +- The fact that `restore()` leaves the process in the `locked` state; + you must still call `unlock()` to return to `running`. +- Verifying that GPU memory is preserved across the checkpoint + round-trip by comparing SHA-256 hashes of the buffer before and + after. +- The rough cost of each step (checkpoint and restore dominate and + scale with the device-memory footprint being captured). + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) + - device management, memory allocation, kernel compilation and + launch, and the `checkpoint.Process` wrapper. +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) + - used directly for a pageable `cuMemcpyDtoH`. + +## Key APIs + +### From `cuda.core.checkpoint` + +- `checkpoint.Process(pid)` - create a handle to a CUDA process by + PID. Accepts `os.getpid()` for the self-checkpoint case shown + here. +- `Process.state` - one of `"running"`, `"locked"`, `"checkpointed"`, + or `"failed"`. +- `Process.lock(timeout_ms=…)` - block further CUDA API calls on the + process; completes already-submitted work. Always pass a non-zero + timeout to avoid deadlocks. +- `Process.checkpoint()` - copy device memory to host-side driver + allocations and release GPU resources. Process state becomes + `checkpointed`. +- `Process.restore(gpu_mapping=None)` - re-acquire GPU resources and + copy memory back to device. Leaves the process in the `locked` + state. +- `Process.unlock()` - return the process to `running`. +- `Process.restore_thread_id` - thread ID that `restore()` must be + called from in the target process (not used in the self-checkpoint + case here). + +### From `cuda.core` + +- `Device.set_current()` / `Device.memory_resource.allocate(...)` / + `Stream`, `LaunchConfig`, `Program`, `launch` - standard device, + compile, and launch primitives used to produce the buffer + contents. + +### From `cuda.bindings.driver` + +- `cuMemcpyDtoH(host_ptr, device_handle, nbytes)` - synchronous D2H + copy into a pageable host buffer. + +## Requirements + +### Hardware + +- Any NVIDIA GPU supported by CUDA process checkpointing. CUDA + checkpointing is currently limited to x86-64 Linux. + +### Software + +- Linux (the CUDA checkpoint API is Linux-only). +- NVIDIA driver with CUDA process checkpoint support. +- CUDA Toolkit 13.0 or newer. +- Python 3.10 or newer. +- `cuda-core >= 1.0.0`. + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/processCheckpoint +pip install -r requirements.txt +``` + +## How to Run + +### Basic usage + +```bash +python processCheckpoint.py +``` + +### Larger GPU footprint to see checkpoint time scale + +```bash +python processCheckpoint.py --buffer-mib 512 +``` + +### Use a specific GPU + +```bash +python processCheckpoint.py --device 1 +``` + +### All options + +``` +--device CUDA device ID (default: 0) +--buffer-mib GPU buffer size in MiB (default: 16) +--lock-timeout-ms Timeout passed to Process.lock in ms (default: 5000) +``` + +## Expected Output + +On an RTX 4090 with a 16 MiB buffer: + +``` +[Process Checkpoint Sample using CUDA Core API] +PID: 748330 +Device: NVIDIA GeForce RTX 4090 +Compute Capability: sm_89 +Buffer size: 16 MiB +Lock timeout: 5000 ms + +Compiling kernel ... +Writing deterministic pattern to GPU buffer ... +Buffer hash (before): b045f7975dc23352 + +Running checkpoint lifecycle on self ... + +step duration (ms) state after +-------------------------------------------------- +initial - running +lock 0.578 locked +checkpoint 268.369 checkpointed +restore 235.024 locked +unlock 1.648 running +-------------------------------------------------- +total 505.618 + +Buffer hash (before): b045f7975dc23352 +Buffer hash (after): b045f7975dc23352 + +PASS: GPU buffer contents survived checkpoint/restore. + +Done +``` + +**What to look for:** + +- The **four state transitions** are all observable: `running → +locked → checkpointed → locked → running`. Note that `restore()` + leaves the process in `locked`, not `running`. +- The **checkpoint and restore steps dominate** the wall-clock time + (hundreds of ms even for a small buffer) - they copy GPU memory to + and from driver-managed host allocations. Increasing + `--buffer-mib` visibly increases the checkpoint time. +- The `lock` and `unlock` steps are essentially free (sub-ms) - they + just flip the process state. +- The SHA-256 **hashes before and after match**, proving the GPU + memory contents survived the round trip. + +Exact timings vary with GPU model, driver version, system load, and +the size of the device memory footprint being captured. + +## Files + +- `processCheckpoint.py` - Python implementation using `cuda.core.checkpoint` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`NVIDIA/cuda-checkpoint`](https://github.com/NVIDIA/cuda-checkpoint) + - the CUDA checkpoint/restore utility, the CRIU plugin, and C + reference programs (`r570-features.c`, `r580-migration-api.c`). +- [Checkpointing CUDA Applications with CRIU](https://developer.nvidia.com/blog/checkpointing-cuda-applications-with-criu/) + - NVIDIA technical blog post on the broader CRIU workflow. diff --git a/samples/processCheckpoint/processCheckpoint.py b/samples/processCheckpoint/processCheckpoint.py new file mode 100644 index 00000000000..4bb19b10859 --- /dev/null +++ b/samples/processCheckpoint/processCheckpoint.py @@ -0,0 +1,263 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS `AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0,<13.3.0", "cuda-core>=1.0.0", "numpy>=2.3.2"] +# /// + +""" +Process Checkpointing Sample using CUDA Core API. + +The sample allocates a GPU buffer, fills it with a deterministic +pattern via a kernel, hashes the contents, runs the full +lock/checkpoint/restore/unlock cycle on its own PID, and re-hashes +the buffer afterwards to verify that the GPU memory contents +survived the round trip. +""" + +import argparse +import hashlib +import os +import sys +import time +from dataclasses import dataclass +from typing import List + +import numpy as np + +from cuda.bindings import driver as cudrv +from cuda.core import ( + Device, + LaunchConfig, + Program, + ProgramOptions, + checkpoint, + launch, +) + +# Small fill kernel: deterministic, non-trivial pattern so the before/after +# hashes would disagree on any bit flip. +KERNEL_SRC = r""" +extern "C" __global__ void fill_pattern(float *out, unsigned long long n) +{ + unsigned long long i = (unsigned long long)blockIdx.x * blockDim.x + threadIdx.x; + + if (i < n) { + float v = (float)(i & 0xFFFFu) * 1e-3f + 1.0f; + float u = (float)((i >> 16) & 0xFFFFu) * 1e-4f + 0.5f; + // A handful of dependent ops per element. Deterministic given i. + for (int k = 0; k < 8; ++k) { + v = v * 1.000001f + u; + u = u * 0.999999f + v * 1e-6f; + } + out[i] = v + u; + } +} +""" + + +@dataclass +class StepTiming: + label: str + duration_ms: float + state_after: str + + +def _cu_check(result) -> None: + err = result[0] + if int(err) != 0: + raise RuntimeError(f"CUDA driver call failed: {err}") + + +def compile_fill_kernel(device: Device): + options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + program = Program(KERNEL_SRC, code_type="c++", options=options) + module = program.compile("cubin", name_expressions=("fill_pattern",)) + return module.get_kernel("fill_pattern") + + +def hash_device_buffer(device_buffer, host: np.ndarray) -> str: + _cu_check( + cudrv.cuMemcpyDtoH( + host.ctypes.data, + device_buffer.handle, + host.nbytes, + ) + ) + return hashlib.sha256(host.tobytes()).hexdigest()[:16] + + +def _time_call(fn, *args, **kwargs) -> float: + t0 = time.monotonic() + fn(*args, **kwargs) + return (time.monotonic() - t0) * 1000.0 + + +def run_lifecycle(proc: checkpoint.Process, lock_timeout_ms: int) -> List[StepTiming]: + """ + Drive the full `lock -> checkpoint -> restore -> unlock` cycle on + `proc` and return per-step timings with the state observed after + each step. + + Note on state after `restore()`: the driver leaves the process in + the `locked` state. You must still call `unlock()` to return to + `running`. + """ + timings: List[StepTiming] = [StepTiming("initial", 0.0, proc.state)] + + ms = _time_call(proc.lock, timeout_ms=lock_timeout_ms) + timings.append(StepTiming("lock", ms, proc.state)) + + ms = _time_call(proc.checkpoint) + timings.append(StepTiming("checkpoint", ms, proc.state)) + + ms = _time_call(proc.restore) + timings.append(StepTiming("restore", ms, proc.state)) + + ms = _time_call(proc.unlock) + timings.append(StepTiming("unlock", ms, proc.state)) + + return timings + + +def print_timings(timings: List[StepTiming]) -> None: + print() + header = f"{'step':<14}{'duration (ms)':>18}{'state after':>18}" + print(header) + print("-" * len(header)) + total = 0.0 + for t in timings: + if t.label == "initial": + dur = "-" + else: + dur = f"{t.duration_ms:.3f}" + total += t.duration_ms + print(f"{t.label:<14}{dur:>18}{t.state_after:>18}") + print("-" * len(header)) + print(f"{'total':<14}{total:>18.3f}{'':>18}") + + +def main(): + parser = argparse.ArgumentParser( + description="CUDA process checkpoint sample using cuda.core", + formatter_class=argparse.RawDescriptionHelpFormatter, + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device ID (default: 0)") + parser.add_argument( + "--buffer-mib", + type=int, + default=16, + help="GPU buffer size in MiB (default: 16)", + ) + parser.add_argument( + "--lock-timeout-ms", + type=int, + default=5000, + help="Timeout passed to Process.lock in ms (default: 5000)", + ) + args = parser.parse_args() + + if sys.platform != "linux": + print("Error: CUDA process checkpointing is Linux-only.") + return 1 + + if args.buffer_mib <= 0: + print("Error: --buffer-mib must be positive") + return 1 + + print("[Process Checkpoint Sample using CUDA Core API]") + print(f"PID: {os.getpid()}") + + device = Device(args.device) + device.set_current() + print(f"Device: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + print(f"Buffer size: {args.buffer_mib} MiB") + print(f"Lock timeout: {args.lock_timeout_ms} ms") + + # CUDA process checkpointing relies on kernel-mode driver features + # that aren't shipped on integrated-GPU platforms (e.g. Tegra / + # Jetson / Thor). On those, Process.lock() can hang indefinitely + # instead of returning a clean "not supported" error. Skip cleanly + # rather than hanging. Remove this guard once integrated platforms + # gain checkpoint support. + if device.properties.integrated: + print( + f"CUDA process checkpointing is not supported on integrated GPUs (sm_{device.arch}), waiving this sample." + ) + return 2 + + print() + print("Compiling kernel ...") + fill_kernel = compile_fill_kernel(device) + + buffer_bytes = args.buffer_mib * 1024 * 1024 + n_elements = buffer_bytes // 4 # float32 + + stream = device.create_stream() + device_buffer = device.memory_resource.allocate(buffer_bytes, stream=stream) + try: + print("Writing deterministic pattern to GPU buffer ...") + block = 256 + grid = (n_elements + block - 1) // block + cfg = LaunchConfig(grid=grid, block=block) + launch(stream, cfg, fill_kernel, device_buffer, np.uint64(n_elements)) + stream.sync() + + host = np.empty(n_elements, dtype=np.float32) + + hash_before = hash_device_buffer(device_buffer, host) + print(f"Buffer hash (before): {hash_before}") + + print() + print("Running checkpoint lifecycle on self ...") + proc = checkpoint.Process(os.getpid()) + timings = run_lifecycle(proc, args.lock_timeout_ms) + print_timings(timings) + + hash_after = hash_device_buffer(device_buffer, host) + + print() + print(f"Buffer hash (before): {hash_before}") + print(f"Buffer hash (after): {hash_after}") + + if hash_before != hash_after: + print() + print("FAIL: GPU buffer contents changed across checkpoint/restore.") + return 1 + + print() + print("PASS: GPU buffer contents survived checkpoint/restore.") + finally: + device_buffer.close(stream) + + print() + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/processCheckpoint/requirements.txt b/samples/processCheckpoint/requirements.txt new file mode 100644 index 00000000000..a0605400b31 --- /dev/null +++ b/samples/processCheckpoint/requirements.txt @@ -0,0 +1,4 @@ +# cuda-bindings 13.3.0 drops the CUcheckpointRestoreArgs alias that cuda-core requires +cuda-python>=13.0.0,<13.3.0 +cuda-core>=1.0.0 +numpy>=2.3.2 diff --git a/samples/reduction/README.md b/samples/reduction/README.md new file mode 100644 index 00000000000..0f2a0056ea9 --- /dev/null +++ b/samples/reduction/README.md @@ -0,0 +1,137 @@ +# Sample: Fast Array Sum using Shared Memory (Python) + +## Description + +Two-stage parallel reduction: each GPU block sums its chunk in **shared memory** (tree reduction, two elements per thread), writes one partial sum per block; the host combines partial sums for the final result. + +**Stack:** `cuda-core` for `Device`, stream, events, `Program` / `launch()`. **CuPy** allocates device memory and copies; `launch()` takes device pointers as `ndarray.data.ptr` (Python `int`). Copies run on the same CUDA stream as the kernel via `cp.cuda.Stream.from_external(stream)` (cuda.core `Stream` implements the CUDA stream protocol) and `with cp_stream:`. + +## What you will learn + +- Shared-memory block reduction and sequential-addressing tree reduction +- `LaunchConfig` with dynamic shared memory and `launch()` with pointer arguments +- Aligning CuPy transfers with a `cuda.core` stream (`Stream.from_external`) +- GPU timing with `EventOptions` / `device.create_event()` + +## Key libraries + +| Library | Role | +|------------|------| +| `cuda-core`| Device, stream, events, compile, launch | +| `cupy` | `cp.empty`, `cp.asarray`, `cp.asnumpy`, `Stream.from_external` | +| `numpy` | Host data and CPU reference sum | + +## Key APIs (quick reference) + +- **cuda.core:** `Device`, `create_stream`, `Program` / `ProgramOptions`, `LaunchConfig`, `launch`, `EventOptions`, `create_event` +- **CuPy:** `cp.empty`, `cp.asarray`, `cp.cuda.Stream.from_external(stream)`, `with cp_stream:`, `cp.asnumpy` + +## Requirements + +- NVIDIA GPU, CUDA-capable driver; **CUDA Toolkit 13+** (for toolchain alignment with `cuda-core`) +- **Python 3.10+** + +```bash +pip install -r requirements.txt +``` + +## How to run + +```bash +python reduction.py +``` + +Defaults: 2²⁴ elements, 256 threads/block, `float`, 100 benchmark iterations. + +**Change data type** (selects `blockReduceKernel_int` / `_float` / `_double`): + +```bash +python reduction.py --type float # default; 32-bit float +python reduction.py --type double # 64-bit float +python reduction.py --type int # 32-bit integer (exact equality check) +``` + +Combine with other flags as needed, e.g. `python reduction.py --type int --n 1048576`. + +Other main flags: `--n`, `--threads`, `--iterations`. Full list: `python reduction.py --help`. + +## Output + +Example run (`python reduction.py`, defaults) on **Tesla T10**, compute capability **7.5**: + +``` +====================================================================== +Fast Array Sum using Shared Memory - Two-Stage Reduction +====================================================================== + +Demonstrates: Efficient parallel reduction using shared memory + +Device Information: + Name: Tesla T10 + Compute Capability: sm_7.5 + +Configuration: + Array size: 16,777,216 elements + Data type: float + Memory: 64.00 MB + Threads per block: 256 + +Two-Stage Reduction Strategy: + Stage 1: GPU block reduction + - Number of blocks: 32768 + - Elements per block: 512 + - Output: 32768 partial sums + Stage 2: CPU final reduction + - Combine 32768 partial sums -> 1 final result + +Compiling CUDA kernel... + Kernel 'blockReduceKernel_float' compiled successfully + +> Generating random input data... +> Computing reference result on CPU... + CPU time: 2.428208 seconds + +> Warming up GPU... + Warm-up completed + +> Benchmarking Stage 1 (GPU block reduction)... + Running 100 iterations... + +> Running Stage 2 (CPU final reduction)... + +====================================================================== +Performance Results +====================================================================== + +Stage 1 (GPU block reduction): + Average time: 0.338404 ms + Throughput: 198.31 GB/s + +Stage 2 (CPU final reduction): + Time: 0.078073 ms + (32768 partial sums) + +Total time: 0.416477 ms +Speedup vs CPU: 5830.35x + +> Validating results... + GPU result: 2147639808.00000000 + CPU result: 2147639929.62027407 +Test PASSED + +====================================================================== +Summary +====================================================================== +Key optimizations: + - Load 2 elements per thread: 8,388,608 global reads (50% savings) + - Shared memory for reduction: ~10-20x faster than global memory + - Parallel block outputs: 32768 independent writes +Result: 198.31 GB/s throughput +====================================================================== +Two-Stage Reduction completed successfully! +====================================================================== +``` + +## Files + +`reduction.py` · `requirements.txt` · `README.md` diff --git a/samples/reduction/reduction.py b/samples/reduction/reduction.py new file mode 100644 index 00000000000..5903bb8a4c6 --- /dev/null +++ b/samples/reduction/reduction.py @@ -0,0 +1,480 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-core>=1.0.0", "cuda-python>=13.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Fast Array Sum using Shared Memory - Two-Stage Reduction + +Demonstrates efficient parallel reduction using shared memory and +two-stage approach to avoid atomic operation bottlenecks. + +Key Features: +- Block-level reduction using shared memory +- Each thread loads 2 elements to reduce global memory traffic +- Sequential addressing tree reduction pattern +- No atomic operations - eliminates serialization bottleneck +- Device memory via CuPy; ``launch()`` takes pointers as ``ndarray.data.ptr`` +- CuPy uses ``cp.cuda.Stream.from_external(stream)``. +""" + +import argparse +import os +import sys +import time + +try: + import cupy as cp + import numpy as np + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install dependencies:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Import utilities +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "Utilities")) +from cuda_samples_utils import verify_array_result + +# Two-stage block reduction kernel +REDUCTION_KERNEL = """ +/* + * Block-level reduction kernel using shared memory + * + * Strategy: + * - Each block processes blockSize * 2 elements + * - Uses shared memory for fast intra-block reduction + * - Outputs one partial sum per block (no atomics) + * + * Key optimizations: + * - Load 2 elements per thread (reduces global memory traffic by 50%) + * - Tree reduction with sequential addressing (avoids divergence) + * - Shared memory instead of atomic operations (eliminates bottleneck) + * + * Note: This sample provides separate implementations for each data type + * for clarity. Production code typically uses templates with SharedMemory + * or reinterpret_cast to avoid duplication. See NVIDIA reduction guide for + * template-based approaches. + */ + +extern "C" __global__ void blockReduceKernel_int( + const int *__restrict__ input, + int *__restrict__ blockSums, + unsigned int n) +{ + extern __shared__ int sdata_int[]; + + unsigned int tid = threadIdx.x; + unsigned int blockSize = blockDim.x; + unsigned int gid = blockIdx.x * (blockSize * 2) + tid; + + // Load 2 elements per thread + int sum = 0; + if (gid < n) sum += input[gid]; + if (gid + blockSize < n) sum += input[gid + blockSize]; + + sdata_int[tid] = sum; + __syncthreads(); + + // Tree reduction with sequential addressing + for (unsigned int s = blockSize / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata_int[tid] += sdata_int[tid + s]; + } + __syncthreads(); + } + + // Write block result + if (tid == 0) { + blockSums[blockIdx.x] = sdata_int[0]; + } +} + +extern "C" __global__ void blockReduceKernel_float( + const float *__restrict__ input, + float *__restrict__ blockSums, + unsigned int n) +{ + extern __shared__ float sdata_float[]; + + unsigned int tid = threadIdx.x; + unsigned int blockSize = blockDim.x; + unsigned int gid = blockIdx.x * (blockSize * 2) + tid; + + // Load 2 elements per thread + float sum = 0.0f; + if (gid < n) sum += input[gid]; + if (gid + blockSize < n) sum += input[gid + blockSize]; + + sdata_float[tid] = sum; + __syncthreads(); + + // Tree reduction with sequential addressing + for (unsigned int s = blockSize / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata_float[tid] += sdata_float[tid + s]; + } + __syncthreads(); + } + + // Write block result + if (tid == 0) { + blockSums[blockIdx.x] = sdata_float[0]; + } +} + +extern "C" __global__ void blockReduceKernel_double( + const double *__restrict__ input, + double *__restrict__ blockSums, + unsigned int n) +{ + extern __shared__ double sdata_double[]; + + unsigned int tid = threadIdx.x; + unsigned int blockSize = blockDim.x; + unsigned int gid = blockIdx.x * (blockSize * 2) + tid; + + // Load 2 elements per thread + double sum = 0.0; + if (gid < n) sum += input[gid]; + if (gid + blockSize < n) sum += input[gid + blockSize]; + + sdata_double[tid] = sum; + __syncthreads(); + + // Tree reduction with sequential addressing + for (unsigned int s = blockSize / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata_double[tid] += sdata_double[tid + s]; + } + __syncthreads(); + } + + // Write block result + if (tid == 0) { + blockSums[blockIdx.x] = sdata_double[0]; + } +} +""" + + +def reduce_cpu(data): + """Compute sum using Kahan summation for numerical accuracy.""" + if len(data) == 0: + return 0 + + sum_val = float(data[0]) + c = 0.0 + + for i in range(1, len(data)): + y = float(data[i]) - c + t = sum_val + y + c = (t - sum_val) - y + sum_val = t + + return sum_val + + +def _validate_threads_per_block(threads_per_block): + if threads_per_block <= 0 or threads_per_block > 1024: + return "threads per block must be between 1 and 1024" + if (threads_per_block & (threads_per_block - 1)) != 0: + return "threads per block must be a power of 2 (required by the shared-memory tree reduction kernel)" + return None + + +def run(num_elements=1 << 24, threads_per_block=256, test_iterations=100, datatype="float"): + """Run two-stage reduction benchmark.""" + + print("\n" + "=" * 70) + print("Fast Array Sum using Shared Memory - Two-Stage Reduction") + print("=" * 70) + print("\nDemonstrates: Efficient parallel reduction using shared memory") + + # Map datatype + dtype_map = {"int": np.int32, "float": np.float32, "double": np.float64} + if datatype not in dtype_map: + print(f"Unknown datatype '{datatype}', using 'float'") + datatype = "float" + dtype = dtype_map[datatype] + itemsize = np.dtype(dtype).itemsize + + # Initialize device + device = Device() + device.set_current() + major, minor = device.compute_capability + + print("\nDevice Information:") + print(f" Name: {device.name}") + print(f" Compute Capability: sm_{major}.{minor}") + + # Configuration + print("\nConfiguration:") + print(f" Array size: {num_elements:,} elements") + print(f" Data type: {datatype}") + print(f" Memory: {num_elements * itemsize / (1024**2):.2f} MB") + print(f" Threads per block: {threads_per_block}") + + # Calculate number of blocks + # Each block processes threads_per_block * 2 elements + num_blocks = (num_elements + threads_per_block * 2 - 1) // (threads_per_block * 2) + + print("\nTwo-Stage Reduction Strategy:") + print(" Stage 1: GPU block reduction") + print(f" - Number of blocks: {num_blocks}") + print(f" - Elements per block: {threads_per_block * 2}") + print(f" - Output: {num_blocks} partial sums") + print(" Stage 2: CPU final reduction") + print(f" - Combine {num_blocks} partial sums -> 1 final result") + + # Compile kernel + print("\nCompiling CUDA kernel...") + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(REDUCTION_KERNEL, code_type="c++", options=program_options) + mod = prog.compile("cubin") + kernel_name = f"blockReduceKernel_{datatype}" + kernel = mod.get_kernel(kernel_name) + print(f" Kernel '{kernel_name}' compiled successfully") + + # Generate input data + print("\n> Generating random input data...") + rng = np.random.default_rng(42) + if datatype == "int": + h_input = rng.integers(0, 256, size=num_elements, dtype=dtype) + else: + h_input = (rng.random(num_elements) * 256).astype(dtype) + + # cuda.core stream for launch/events; CuPy copies use the same stream via + # Stream.from_external. + stream = device.create_stream() + cp_stream = cp.cuda.Stream.from_external(stream) + try: + d_blockSums = cp.empty(num_blocks, dtype=dtype) + with cp_stream: + d_input = cp.asarray(h_input, dtype=dtype) + stream.sync() + + # Compute CPU reference + print("> Computing reference result on CPU...") + cpu_start = time.perf_counter() + cpu_result = reduce_cpu(h_input) + cpu_time = time.perf_counter() - cpu_start + print(f" CPU time: {cpu_time:.6f} seconds") + + # Configure launch + shared_mem_bytes = threads_per_block * itemsize + config = LaunchConfig(grid=num_blocks, block=threads_per_block, shmem_size=shared_mem_bytes) + + # Warm-up + print("\n> Warming up GPU...") + launch( + stream, + config, + kernel, + d_input.data.ptr, + d_blockSums.data.ptr, + np.uint32(num_elements), + ) + stream.sync() + print(" Warm-up completed") + + # Benchmark Stage 1 (GPU) + print("\n> Benchmarking Stage 1 (GPU block reduction)...") + print(f" Running {test_iterations} iterations...") + + # cuda.core event elapsed time (end - start) is in milliseconds (CUDA API). + stage1_times_ms = [] + event_options = EventOptions(timing_enabled=True) + start_event = stream.device.create_event(options=event_options) + end_event = stream.device.create_event(options=event_options) + for _ in range(test_iterations): + stream.record(start_event) + launch( + stream, + config, + kernel, + d_input.data.ptr, + d_blockSums.data.ptr, + np.uint32(num_elements), + ) + stream.record(end_event) + end_event.sync() + stage1_times_ms.append(float(end_event - start_event)) + + avg_stage1_ms = np.mean(stage1_times_ms) + avg_stage1_s = avg_stage1_ms / 1000.0 + + # Stage 2 (CPU) + print("\n> Running Stage 2 (CPU final reduction)...") + # Device -> Host: after stream sync, partial sums are visible on host. + stream.sync() + with cp_stream: + h_blockSums = cp.asnumpy(d_blockSums) + stage2_start = time.perf_counter() + gpu_result = float(np.sum(h_blockSums)) + stage2_time = time.perf_counter() - stage2_start + + total_time = avg_stage1_s + stage2_time + + # Performance metrics (use seconds for throughput; CPU times are in seconds) + bytes_processed = num_elements * itemsize + throughput = bytes_processed / avg_stage1_s / 1e9 + + print("\n" + "=" * 70) + print("Performance Results") + print("=" * 70) + print("\nStage 1 (GPU block reduction):") + print(f" Average time: {avg_stage1_ms:.6f} ms") + print(f" Throughput: {throughput:.2f} GB/s") + print("\nStage 2 (CPU final reduction):") + print(f" Time: {stage2_time * 1000:.6f} ms") + print(f" ({num_blocks} partial sums)") + print(f"\nTotal time: {total_time * 1000:.6f} ms") + print(f"Speedup vs CPU: {cpu_time / total_time:.2f}x") + + # Validation + print("\n> Validating results...") + if datatype == "int": + print(f" GPU result: {int(gpu_result):,}") + print(f" CPU result: {int(cpu_result):,}") + rtol, atol = 0.0, 0.0 + else: + precision = 8 if datatype == "float" else 12 + print(f" GPU result: {gpu_result:.{precision}f}") + print(f" CPU result: {cpu_result:.{precision}f}") + if datatype == "float": + rtol, atol = 1e-5, 1e-8 * num_elements + else: # double + rtol, atol = 1e-8, 1e-12 * num_elements + + success = verify_array_result( + np.array([gpu_result]), + np.array([cpu_result]), + rtol=rtol, + atol=atol, + verbose=True, + ) + + # Summary + print("\n" + "=" * 70) + print("Summary") + print("=" * 70) + print("Key optimizations:") + half_reads = num_elements // 2 + print(f" - Load 2 elements per thread: {half_reads:,} global reads (50% savings)") + print(" - Shared memory for reduction: ~10-20x faster than global memory") + print(f" - Parallel block outputs: {num_blocks} independent writes") + print(f"Result: {throughput:.2f} GB/s throughput") + + print("=" * 70) + if success: + print("Two-Stage Reduction completed successfully!") + else: + print("Two-Stage Reduction FAILED!") + print("=" * 70 + "\n") + + return 0 if success else 1 + finally: + stream.close() + + +def main(): + """Main entry point with argument parsing.""" + parser = argparse.ArgumentParser( + description="Two-Stage Reduction with Shared Memory", + epilog="See README.md for usage examples and detailed documentation.", + ) + + parser.add_argument( + "--n", + type=int, + default=1 << 24, + help="Number of elements to reduce (default: 16777216 = 2^24)", + ) + + parser.add_argument( + "--threads", + type=int, + default=256, + help="Threads per block, power of 2 in [1, 1024] (default: 256)", + ) + + parser.add_argument( + "--type", + type=str, + default="float", + choices=["int", "float", "double"], + help="Data type for reduction (default: float)", + ) + + parser.add_argument( + "--iterations", + type=int, + default=100, + help="Number of benchmark iterations (default: 100)", + ) + + args = parser.parse_args() + + # Validate arguments + if args.n <= 0: + print("Error: n must be positive") + return 1 + + err = _validate_threads_per_block(args.threads) + if err: + print(f"Error: {err}") + return 1 + + try: + exit_code = run( + num_elements=args.n, + threads_per_block=args.threads, + test_iterations=args.iterations, + datatype=args.type, + ) + sys.exit(exit_code) + except Exception as e: + print(f"\nError: {e}") + import traceback + + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/reduction/requirements.txt b/samples/reduction/requirements.txt new file mode 100644 index 00000000000..84a6b40aef6 --- /dev/null +++ b/samples/reduction/requirements.txt @@ -0,0 +1,8 @@ +# Python CUDA Reduction Sample Requirements +# Install with: pip install -r requirements.txt + +numpy>=2.3.2 +cuda-core>=1.0.0 +cuda-python>=13.0.0 +# Use cupy-cuda13x>=14.0.0 for cp.cuda.Stream.from_external(stream) +cupy-cuda13x>=14.0.0 diff --git a/samples/reductionMultiBlockCG/README.md b/samples/reductionMultiBlockCG/README.md new file mode 100644 index 00000000000..825e3506621 --- /dev/null +++ b/samples/reductionMultiBlockCG/README.md @@ -0,0 +1,140 @@ +# Sample: Single-Pass Multi-Block Reduction with Cooperative Groups (Python) + +## Description + +Single-kernel, two-stage reduction using **Cooperative Groups** and `grid.sync()` so all blocks synchronize inside one launch—no second kernel or CPU stage for the reduction tree. + +**Stack:** `cuda-core` (device, compile, cooperative `launch()`, stream, **CUDA events** for GPU timing). **CuPy** for H↔D copies on the same stream (`Stream.from_external(cuda.core_stream)`, `ndarray.data.ptr` to `launch()`). **`try`/`finally`** closes the stream if cooperative launch fails. Requires **compute capability > 6.0** (Pascal+). + +## What you will learn + +- `cooperative_groups::grid_group` and `grid.sync()` across the grid +- Cooperative `LaunchConfig(..., cooperative_launch=True)` and sizing blocks for residency +- Timing the GPU path with `EventOptions` / `stream.record()` / event elapsed time + +## Key libraries + +| Library | Role | +|---------|------| +| `cuda-core` | Device, stream, events, `Program` / `ProgramOptions`, cooperative `launch()` | +| `cupy` | `cp.empty`, `cp.asarray`, `cp.asnumpy`, `Stream.from_external` | +| `numpy` | Host data, reference sum, `default_rng` | + +## Requirements + +- NVIDIA GPU, **Pascal or newer**; **CUDA Toolkit 13+**; **Python 3.10+** +- NVRTC must see **`cooperative_groups.h`** and **CCCL** headers (`cuda/std/*`) + +```bash +pip install -r requirements.txt +``` + +Pick a CuPy wheel that matches your CUDA major version (e.g. `cupy-cuda13x` in `requirements.txt`). + +## How to run + +**`--cuda-include-dir` is required.** Multiple paths can be combined using the +OS path separator (`:` on Linux/macOS, `;` on Windows). + +Linux / macOS: + +```bash +python reductionMultiBlockCG.py \ + --cuda-include-dir /usr/local/cuda/include/cccl:/usr/local/cuda/include +``` + +Windows (PowerShell or cmd, note the `;` separator and quotes around the +combined value): + +```powershell +python reductionMultiBlockCG.py ` + --cuda-include-dir "$env:CUDA_PATH\include;$env:CUDA_PATH\include\cccl" +``` + +**Jetson / split include trees:** pass every directory NVRTC needs in one `--cuda-include-dir` argument, e.g. +`/usr/local/cuda/include/cccl:/usr/local/cuda/targets/sbsa-linux/include` (adjust paths to your image). If headers are scattered, you can instead merge them into one tree with symlinks and point `--cuda-include-dir` at that folder. + +Defaults: **2²⁵** elements, threads = device max (capped at 1024), auto `--maxblocks`, **100** iterations. Other flags: `--n`, `--threads`, `--maxblocks`, `--iterations`. See **`python reductionMultiBlockCG.py --help`**. + +## Output + +``` +====================================================================== +Single-Pass Multi-Block Reduction with Cooperative Groups +====================================================================== + +Demonstrates: Multi-stage reduction in a single kernel using grid.sync() + +Device Information: + Name: NVIDIA Thor + Compute Capability: sm_11.0 + +Reduction Configuration: + Number of elements: 33,554,432 + Data size: 128.00 MB + +Compiling CUDA kernel... + Kernel compiled successfully + +Launch Configuration: + Threads per block: 1024 + Number of blocks: 20 + Total threads: 20,480 + Shared memory per block: 4096 bytes + Launch mode: Cooperative (grid-wide sync enabled) + +> Generating random input data... +> Computing reference result on CPU... + CPU time: 0.008903 seconds + +> Warming up GPU... + Warm-up successful + +> Running benchmark (100 iterations)... + +> Performance Results: + Average GPU time: 0.977166 ms + Throughput: 137.35 GB/s + Speedup vs CPU: 9.11x + +> Validating results... +Test PASSED + +====================================================================== +Summary +====================================================================== + +Single-kernel two-stage reduction: + Stage 1: 20 blocks -> 20 partial sums + grid.sync() <- All blocks synchronize (KEY innovation) + Stage 2: Block 0 -> 1 final result + Total: 1 kernel launch, 137.35 GB/s + +Comparison: + • Traditional: 2 kernel launches or kernel + CPU + • This sample: 1 kernel with grid.sync() between stages + • Benefit: Eliminates ~5-20us launch overhead per stage + +====================================================================== +Single-Pass Multi-Block Reduction completed successfully! +====================================================================== +``` + +## Troubleshooting (short) + +- **Cooperative launch not supported / fails:** need sm_60+; reduce `--maxblocks` or `--threads` so all blocks can be resident. +- **Compile errors missing headers:** extend `--cuda-include-dir` with the path that contains CCCL / cooperative groups (see Jetson note above). +- **Low throughput:** often block count vs occupancy; try defaults first, then tune `--threads` / `--maxblocks`. + +## Related samples + +**blockArraySum** (atomics + grid-stride) → **reduction** (two-stage shared memory) → **this sample** (single kernel + `grid.sync()`). + +## Further reading + +- [CUDA Cooperative Groups](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cooperative-groups) +- [Reduction whitepaper (PDF)](https://developer.download.nvidia.com/assets/cuda/files/reduction.pdf) + +## Files + +`reductionMultiBlockCG.py` · `requirements.txt` · `README.md` diff --git a/samples/reductionMultiBlockCG/reductionMultiBlockCG.py b/samples/reductionMultiBlockCG/reductionMultiBlockCG.py new file mode 100644 index 00000000000..03e79f951d7 --- /dev/null +++ b/samples/reductionMultiBlockCG/reductionMultiBlockCG.py @@ -0,0 +1,465 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-core>=1.0.0", "cuda-python>=13.0.0", "cuda-cccl>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Single-Pass Multi-Block Reduction with Cooperative Groups + +Demonstrates single-kernel multi-stage reduction using grid-wide +synchronization. Traditional reduction needs multiple kernel launches, +but with grid.sync() from Cooperative Groups, we can complete all +stages in ONE kernel. + +Key Features: +- Grid-wide synchronization with grid.sync() +- Two-stage reduction in a single kernel (no atomic operations) +- Requires compute capability 6.0+ and cooperative launch +- Achieves 400-700 GB/s on modern GPUs + +How it differs from other samples: +- blockArraySum.py: Basic thread/block indexing + atomicAdd +- reduction.py: High-performance shared memory, two-kernel approach +- This sample: Single-kernel multi-stage with grid.sync() + +Transfers use CuPy on the same CUDA stream as ``launch()`` (``Stream.from_external``), +not ``cuda.bindings.driver`` memcpy. GPU timing uses CUDA events. +""" + +import argparse +import os +import sys +import time + +try: + import cupy as cp + import numpy as np + + from cuda.core import ( + Device, + EventOptions, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install dependencies:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Import utilities +utilities_path = os.path.join(os.path.dirname(__file__), "..", "Utilities") +sys.path.insert(0, utilities_path) +from cuda_samples_utils import verify_array_result + + +def _validate_threads_arg(threads): + if threads is None: + return None + if threads <= 0 or threads > 1024: + return "threads must be between 1 and 1024" + if (threads & (threads - 1)) != 0: + return "threads must be a power of 2 (required by the shared-memory tree reduction kernel)" + return None + + +# Single-pass multi-block reduction kernel with grid-wide sync +REDUCTION_KERNEL = """ +/* + * Single-Kernel Multi-Stage Reduction using grid.sync() + * + * Strategy: + * Stage 1: Each block reduces its portion → partial sum + * grid.sync() ← KEY: All blocks synchronize + * Stage 2: Block 0 reduces all partial sums → final result + * + * Key feature: grid.sync() enables multi-stage within ONE kernel + */ + +#include + +namespace cg = cooperative_groups; +extern "C" __global__ void reduceSinglePassMultiBlockCG( + const float *__restrict__ g_idata, + float *__restrict__ g_odata, + unsigned int n) +{ + cg::thread_block cta = cg::this_thread_block(); + cg::grid_group grid = cg::this_grid(); + extern __shared__ float sdata[]; + + unsigned int tid = threadIdx.x; + unsigned int blockSize = blockDim.x; + + // Stage 1: Grid-stride loop + block reduction + float sum = 0.0f; + for (unsigned int i = grid.thread_rank(); i < n; i += grid.size()) { + sum += g_idata[i]; + } + + sdata[tid] = sum; + cg::sync(cta); + + // Block reduction (sequential addressing) + for (unsigned int s = blockSize / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata[tid] += sdata[tid + s]; + } + cg::sync(cta); + } + + if (tid == 0) { + g_odata[blockIdx.x] = sdata[0]; + } + + // KEY: Grid-wide synchronization (all blocks wait here) + grid.sync(); + + // Stage 2: Block 0 reduces all partial sums → final result + // Use a stride loop so all gridDim.x partial sums are covered even + // when gridDim.x > blockDim.x. + if (blockIdx.x == 0) { + // mySum stays 0.0f when tid >= gridDim.x (loop never executes), + // implicitly zero-filling sdata for threads beyond the partial-sum count. + float mySum = 0.0f; + for (unsigned int i = tid; i < gridDim.x; i += blockSize) { + mySum += g_odata[i]; + } + sdata[tid] = mySum; + cg::sync(cta); + + for (unsigned int s = blockSize / 2; s > 0; s >>= 1) { + if (tid < s) { + sdata[tid] += sdata[tid + s]; + } + cg::sync(cta); + } + + if (tid == 0) { + g_odata[0] = sdata[0]; + } + } +} +""" + + +def get_max_cooperative_blocks(device, _kernel, threads_per_block, _shared_mem_bytes): + """ + Calculate max blocks for cooperative launch (all must be resident). + + This is a conservative estimate that ignores kernel/shared-memory limits; + for precise tuning, use cudaOccupancyMaxActiveBlocksPerMultiprocessor. + The kernel and shared_mem_bytes parameters are accepted (and underscore- + prefixed) so the call signature mirrors that helper for readability. + """ + # Get device properties + prop = device.properties + + # Calculate maximum blocks per SM + # Note: We use cudaOccupancyMaxActiveBlocksPerMultiprocessor functionality + # For simplicity in Python, we'll use a conservative estimate + num_sms = prop.multiprocessor_count + max_threads_per_sm = prop.max_threads_per_multiprocessor + max_blocks_per_sm = max_threads_per_sm // threads_per_block + + # Total blocks = blocks per SM × number of SMs + max_blocks = max_blocks_per_sm * num_sms + + # Also respect max_grid_dim_x + max_blocks = min(max_blocks, prop.max_grid_dim_x) + + return max_blocks + + +def run( + num_elements=1 << 25, + max_threads=None, + max_blocks=None, + test_iterations=100, + cuda_include_dir=None, +): + """Run single-pass multi-block reduction benchmark.""" + + if cuda_include_dir is None: + raise ValueError("cuda_include_dir is required") + + print("\n" + "=" * 70) + print("Single-Pass Multi-Block Reduction with Cooperative Groups") + print("=" * 70) + msg = "Multi-stage reduction in a single kernel using grid.sync()" + print(f"\nDemonstrates: {msg}") + + # Initialize device + device = Device() + device.set_current() + major, minor = device.compute_capability + + print("\nDevice Information:") + print(f" Name: {device.name}") + print(f" Compute Capability: sm_{major}.{minor}") + + # Get device properties for configuration + prop = device.properties + + # Determine threads per block + if max_threads is None: + max_threads = prop.max_threads_per_block + threads_per_block = min(max_threads, 1024) + + # Define data type and itemsize + itemsize = np.dtype(np.float32).itemsize + + print("\nReduction Configuration:") + print(f" Number of elements: {num_elements:,}") + print(f" Data size: {num_elements * itemsize / (1024**2):.2f} MB") + + # Compile kernel + print("\nCompiling CUDA kernel...") + # Support multiple include paths separated by the OS path separator + # (':' on POSIX, ';' on Windows). os.pathsep avoids splitting Windows + # drive prefixes like "C:\..." by accident. + include_paths = cuda_include_dir.split(os.pathsep) + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}", include_path=include_paths) + prog = Program(REDUCTION_KERNEL, code_type="c++", options=program_options) + mod = prog.compile("cubin") + kernel = mod.get_kernel("reduceSinglePassMultiBlockCG") + print(" Kernel compiled successfully") + + # Calculate blocks for cooperative launch + shared_mem_bytes = threads_per_block * itemsize + + if max_blocks is None: + max_blocks = get_max_cooperative_blocks(device, kernel, threads_per_block, shared_mem_bytes) + + # Calculate optimal blocks (all must be resident) + num_blocks = min(max_blocks, (num_elements + threads_per_block - 1) // threads_per_block) + + print("\nLaunch Configuration:") + print(f" Threads per block: {threads_per_block}") + print(f" Number of blocks: {num_blocks}") + print(f" Total threads: {num_blocks * threads_per_block:,}") + print(f" Shared memory per block: {shared_mem_bytes} bytes") + print(" Launch mode: Cooperative (grid-wide sync enabled)") + + # Generate random input data + print("\n> Generating random input data...") + rng = np.random.default_rng(42) + h_idata = (rng.random(num_elements) * 256).astype(np.float32) + + stream = device.create_stream() + cp_stream = cp.cuda.Stream.from_external(stream) + try: + d_odata = cp.empty(num_blocks, dtype=np.float32) + with cp_stream: + d_idata = cp.asarray(h_idata, dtype=np.float32) + stream.sync() + + # Compute CPU reference + print("> Computing reference result on CPU...") + cpu_start = time.perf_counter() + cpu_result = float(np.sum(h_idata)) + cpu_time = time.perf_counter() - cpu_start + print(f" CPU time: {cpu_time:.6f} seconds") + + # Warm-up + print("\n> Warming up GPU...") + + launch_config = LaunchConfig( + grid=(num_blocks, 1, 1), + block=(threads_per_block, 1, 1), + shmem_size=shared_mem_bytes, + is_cooperative=True, + ) + + n_u32 = np.uint32(num_elements) + ptr_in = d_idata.data.ptr + ptr_out = d_odata.data.ptr + + try: + launch(stream, launch_config, kernel, ptr_in, ptr_out, n_u32) + except Exception as e: + print(f" Cooperative launch failed: {e}") + return 1 + + stream.sync() + print(" Warm-up successful") + + # Benchmark (CUDA events — not host wall clock around the whole loop) + print(f"\n> Running benchmark ({test_iterations} iterations)...") + event_options = EventOptions(timing_enabled=True) + start_event = stream.device.create_event(options=event_options) + end_event = stream.device.create_event(options=event_options) + # cuda.core event elapsed time (end - start) is in milliseconds (CUDA API). + gpu_times_ms = [] + for _ in range(test_iterations): + try: + stream.record(start_event) + launch(stream, launch_config, kernel, ptr_in, ptr_out, n_u32) + stream.record(end_event) + end_event.sync() + gpu_times_ms.append(float(end_event - start_event)) + except Exception as e: + print(f"Benchmark iteration failed: {e}") + return 1 + + avg_gpu_ms = float(np.mean(gpu_times_ms)) + avg_gpu_s = avg_gpu_ms / 1000.0 + + stream.sync() + with cp_stream: + h_result = cp.asnumpy(d_odata[:1]) + gpu_result = float(h_result[0]) + + # Performance metrics use seconds for throughput and speedup. + # CPU time is already in seconds. + bytes_processed = num_elements * 4 + throughput_gb_s = bytes_processed / avg_gpu_s / 1e9 + + print("\n> Performance Results:") + print(f" Average GPU time: {avg_gpu_ms:.6f} ms") + print(f" Throughput: {throughput_gb_s:.2f} GB/s") + print(f" Speedup vs CPU: {cpu_time / avg_gpu_s:.2f}x") + + # Validate results + print("\n> Validating results...") + success = verify_array_result( + np.array([gpu_result]), + np.array([cpu_result]), + rtol=1e-5, + atol=1e-5, + ) + + # Summary + print("\n" + "=" * 70) + print("Summary") + print("=" * 70) + print(f""" +Single-kernel two-stage reduction: + Stage 1: {num_blocks} blocks -> {num_blocks} partial sums + grid.sync() <- All blocks synchronize (KEY innovation) + Stage 2: Block 0 -> 1 final result + Total: 1 kernel launch, {throughput_gb_s:.2f} GB/s + +Comparison: + • Traditional: 2 kernel launches or kernel + CPU + • This sample: 1 kernel with grid.sync() between stages + • Benefit: Eliminates ~5-20us launch overhead per stage + """) + + print("=" * 70) + if success: + print("Single-Pass Multi-Block Reduction completed successfully!") + else: + print("Single-Pass Multi-Block Reduction FAILED!") + print("=" * 70 + "\n") + + return 0 if success else 1 + finally: + stream.close() + + +def main(): + """Main entry point with argument parsing.""" + parser = argparse.ArgumentParser(description="Single-Pass Multi-Block Reduction with Cooperative Groups") + + parser.add_argument( + "--n", + type=int, + default=1 << 25, + help="Number of elements to reduce (default: 33554432 = 2^25)", + ) + + parser.add_argument( + "--threads", + type=int, + default=None, + help=("Threads per block, power of 2 in [1, 1024]; default: device maximum (typically 1024)"), + ) + + parser.add_argument( + "--maxblocks", + type=int, + default=None, + help=("Maximum number of blocks (default: auto-calculated for cooperative launch)"), + ) + + parser.add_argument( + "--iterations", + type=int, + default=100, + help="Number of benchmark iterations (default: 100)", + ) + + parser.add_argument( + "--cuda-include-dir", + type=str, + required=True, + help=( + "CUDA include directory for NVRTC. " + "Use os.pathsep to separate multiple paths " + "(':' on POSIX, ';' on Windows)." + ), + ) + + args = parser.parse_args() + + # Validate arguments + if args.n <= 0: + print("Error: n must be positive") + return 1 + + err_threads = _validate_threads_arg(args.threads) + if err_threads: + print(f"Error: {err_threads}") + return 1 + + if args.maxblocks is not None and args.maxblocks <= 0: + print("Error: maxblocks must be positive") + return 1 + + try: + exit_code = run( + num_elements=args.n, + max_threads=args.threads, + max_blocks=args.maxblocks, + test_iterations=args.iterations, + cuda_include_dir=args.cuda_include_dir, + ) + sys.exit(exit_code) + except Exception as e: + print(f"\nError: {e}") + import traceback + + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/reductionMultiBlockCG/requirements.txt b/samples/reductionMultiBlockCG/requirements.txt new file mode 100644 index 00000000000..6d8c89fed04 --- /dev/null +++ b/samples/reductionMultiBlockCG/requirements.txt @@ -0,0 +1,10 @@ +# Python Multi-Block Cooperative Reduction Sample Requirements +# Install with: pip install -r requirements.txt + +numpy>=2.3.2 +cuda-core>=1.0.0 +cuda-python>=13.0.0 +# Headers for NVRTC: cooperative_groups.h includes cuda/std/* (CCCL) +cuda-cccl>=1.0.0 +# Use cupy-cuda13x>=14.0.0 for cp.cuda.Stream.from_external(stream) +cupy-cuda13x>=14.0.0 diff --git a/samples/simpleP2P/README.md b/samples/simpleP2P/README.md new file mode 100644 index 00000000000..774109073c4 --- /dev/null +++ b/samples/simpleP2P/README.md @@ -0,0 +1,190 @@ +# Sample: simpleP2P (Python) + +## Description + +This sample demonstrates peer-to-peer (P2P) memory access between multiple GPUs in CUDA using the cuda.core Python library. P2P allows GPUs to directly access each other's memory without routing data through the host (CPU), enabling efficient multi-GPU applications. This sample detects P2P-capable GPUs, enables peer access, measures bandwidth using CUDA events for accurate GPU-side timing, and launches kernels (using grid-stride loops) that read from one GPU's memory and write to another GPU's memory. + +## What you will learn + +- How to detect multiple CUDA-capable GPUs using `system.get_num_devices()` and `Device(id)` +- How to check P2P capability between GPU pairs using `device.can_access_peer()` +- How to enable and disable peer access using `DeviceMemoryResource.peer_accessible_by` +- How to allocate device memory on specific GPUs using `DeviceMemoryResource` +- How to perform direct GPU-to-GPU memory transfers with explicit event-based synchronization +- How to measure P2P bandwidth using CUDA events for accurate GPU-side timing +- How to use event-based synchronization between streams for sequential bandwidth measurement +- How to launch kernels on one GPU that access memory from another GPU +- How to compile and launch CUDA kernels using cuda.core's `Program` and `launch` APIs with grid-stride loops +- How to validate multi-GPU computation results +- How to properly clean up resources using try/finally blocks + +## Key libraries + +- `numpy` - CPU array operations and data initialization +- `cuda-core` - Modern Python interface to CUDA runtime with full P2P support + +## Key APIs + +**From cuda.core:** +- `system` – Pre-instantiated singleton for system-level CUDA information +- `system.get_num_devices()` – Get number of CUDA-capable devices +- `Device(id)` – Get specific CUDA device handle +- `device.can_access_peer(peer)` – Check if this device can access peer device memory +- `device.set_current()` – Set active device for subsequent operations +- `device.create_stream()` – Create CUDA stream for kernel execution +- `DeviceMemoryResource(device)` – Create memory resource for specific GPU +- `memory_resource.peer_accessible_by` – Get/set which devices can access this memory pool's allocations + - Example: `mr.peer_accessible_by = [1]` grants device 1 access + - Example: `mr.peer_accessible_by = []` revokes all access +- `PinnedMemoryResource()` – Allocate pinned (page-locked) host memory +- `EventOptions(enable_timing=True)` – Create options for CUDA events with timing enabled +- `stream.record(options=event_options)` – Record a CUDA event on a stream +- `event.elapsed_time(start_event)` – Get elapsed time in milliseconds between two events +- `stream.wait_event(event)` – Make a stream wait for an event to complete +- `stream.close()` – Clean up stream resources +- `Program()` – Compile CUDA C++ kernel code +- `LaunchConfig()` – Configure kernel launch parameters (grid, block) +- `launch()` – Launch compiled kernel with arguments +- `buffer.copy_from(src, stream=stream)` – Copy data from source buffer asynchronously +- `buffer.copy_to(dst, stream=stream)` – Copy data to destination buffer asynchronously + +**From DLPack:** +- `numpy.from_dlpack()` – Create NumPy array view of memory buffer + +**Memory Management:** +- Resources (streams, buffers) should be cleaned up using try/finally blocks to ensure proper cleanup even if errors occur +- Streams should be explicitly closed with `stream.close()` in finally blocks + +## Peer-to-Peer (P2P): When to Use + +### Benefits +- **Direct GPU-to-GPU transfers**: Bypass host memory for faster communication +- **Higher bandwidth**: PCIe or NVLink bandwidth between GPUs (up to 600 GB/s with NVLink) +- **Lower latency**: No CPU involvement in data transfers +- **Efficient multi-GPU**: Essential for scaling deep learning, HPC, and simulation workloads +- **Simplified programming**: Kernels can directly access remote GPU memory + +### Requirements +- **Two or more GPUs**: System must have multiple CUDA-capable GPUs +- **P2P support**: GPUs must be P2P-capable (check with `can_access_peer()`) +- **PCIe topology**: Usually requires GPUs on same PCIe root complex +- **Platform support**: Not available on Mac OSX, limited on ARM platforms + +### Best Use Cases +1. Multi-GPU deep learning training (model parallelism, data parallelism) +2. Large-scale scientific simulations across multiple GPUs +3. Real-time rendering with multiple GPUs +4. GPU clusters with direct GPU communication +5. Reducing CPU-GPU traffic in multi-GPU systems + +## Requirements + +1. **Two or more NVIDIA Graphics Cards** with CUDA support and P2P capability +2. **CUDA Drivers** installed on your system +3. **CUDA Toolkit 13.0+** installed on your system +4. **Python 3.10 or newer** +5. **Proper PCIe topology** (GPUs should be on same PCIe root complex for best performance) + +**Note**: This sample will gracefully exit if fewer than 2 GPUs are detected or if P2P is not supported between any GPU pair. + +**Install packages:** +```bash +pip install -r requirements.txt +``` + +Or manually: +```bash +pip install numpy>=2.3.2 cuda-core>=1.0.0 cuda-python>=13.0.0 +``` + +## How to run + +Basic usage: +```bash + +# Run with default parameters (16M elements = 64MB) +python simpleP2P.py +``` + +With custom parameters: +```bash +# Use 32M elements (128MB) +python simpleP2P.py --num_elements 33554432 + +# Show help +python simpleP2P.py --help +``` + +### Command line arguments + +- `--num_elements`: Number of elements in arrays (default: 16777216) + - Each array uses `num_elements * 4 bytes` (float32) + - Default: 64 MB per array + - Sample allocates 2 device buffers + 1 host buffer + +## Expected Output + +``` +====================================================================== +simpleP2P - CUDA Python Sample +====================================================================== + +Starting... + +Checking for multiple GPUs... +CUDA-capable device count: 2 + +Checking GPU(s) for support of peer to peer memory access... +> Peer access from Tesla T10 (GPU0) -> Tesla T10 (GPU1): Yes +> Peer access from Tesla T10 (GPU1) -> Tesla T10 (GPU0): Yes + +Using GPU0 (Tesla T10) and GPU1 (Tesla T10) + +Allocating buffers (64MB on GPU0, GPU1 and CPU Host)... + Peer access enabled: GPU0 <-> GPU1 + Peer access status: MR0 accessible by (1,), MR1 accessible by (0,) + Memory allocated successfully + +Measuring P2P bandwidth... + Performing 100 ping-pong copies between GPUs... + P2P bandwidth: 12.37 GB/s + +Preparing host buffer and memcpy to GPU0... + Data initialized and copied to GPU + +Compiling CUDA kernel... + Kernels compiled successfully + +Run kernel on GPU1, taking source data from GPU0 and writing to GPU1... + Kernel execution complete + +Run kernel on GPU0, taking source data from GPU1 and writing to GPU0... + Kernel execution complete + +Copy data back to host from GPU0 and verify results... + +Checking results... + Comparing 16,777,216 elements... +Test PASSED + [PASS] Validation PASSED + +Disabling peer access... + Peer access revoked: MR0 accessible by (), MR1 accessible by () + +====================================================================== +simpleP2P completed successfully! +====================================================================== + +Shutting down... +``` + +**Note**: P2P bandwidth varies based on: +- PCIe generation +- NVLink +- System topology and configuration + +## Files + +- `simpleP2P.py` – Main Python implementation +- `README.md` – This file +- `requirements.txt` – Python package dependencies diff --git a/samples/simpleP2P/requirements.txt b/samples/simpleP2P/requirements.txt new file mode 100644 index 00000000000..4626ed5dffa --- /dev/null +++ b/samples/simpleP2P/requirements.txt @@ -0,0 +1,6 @@ +# simpleP2P - Requirements +# Install with: pip install -r requirements.txt + +numpy>=2.3.2 +cuda-python>=13.0.0 +cuda-core>=1.0.0 diff --git a/samples/simpleP2P/simpleP2P.py b/samples/simpleP2P/simpleP2P.py new file mode 100644 index 00000000000..42ea028f04d --- /dev/null +++ b/samples/simpleP2P/simpleP2P.py @@ -0,0 +1,358 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +import argparse +import sys +from pathlib import Path + +try: + import numpy as np + + from cuda.core import ( + Device, + DeviceMemoryResource, + EventOptions, + LaunchConfig, + PinnedMemoryResource, + Program, + ProgramOptions, + launch, + system, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +# CUDA kernel for simple P2P operation +SIMPLE_P2P_KERNEL = """ +extern "C" __global__ +void SimpleKernel(float *src, float *dst, int N) { + // Grid-stride loop pattern for canonical CUDA kernel + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = gridDim.x * blockDim.x; + + for (size_t i = tid; i < N; i += stride) { + dst[i] = src[i] * 2.0f; + } +} +""" + + +def run(num_elements=1024 * 1024 * 16): + """ + Demonstrates peer-to-peer (P2P) memory access between multiple GPUs using cuda.core. + + This function shows how to: + 1. Detect and verify multiple GPUs with P2P capability + 2. Enable peer access between GPUs + 3. Perform direct GPU-to-GPU memory transfers + 4. Launch kernels that access memory from other GPUs + 5. Measure P2P bandwidth + 6. Validate results + + Parameters + ---------- + num_elements : int + Number of elements in arrays (default: 16M elements = 64MB) + """ + + print("\n" + "=" * 70) + print("simpleP2P - CUDA Python Sample") + print("=" * 70) + print("\nStarting...") + + # Check for multiple GPUs + print("\nChecking for multiple GPUs...") + num_devices = system.get_num_devices() + print(f"CUDA-capable device count: {num_devices}") + + if num_devices < 2: + print("Two or more GPUs with Peer-to-Peer access capability are required, waiving this sample.") + return 2 + + # Get device properties + devices = [Device(i) for i in range(num_devices)] + + # Check for P2P capability + print("\nChecking GPU(s) for support of peer to peer memory access...") + + p2p_capable_gpus = [-1, -1] + + for i in range(num_devices): + p2p_capable_gpus[0] = i + for j in range(num_devices): + if i == j: + continue + + # Check peer access capability using cuda.core + i_access_j = devices[i].can_access_peer(devices[j]) + j_access_i = devices[j].can_access_peer(devices[i]) + + print( + f"> Peer access from {devices[i].name} (GPU{i}) -> " + f"{devices[j].name} (GPU{j}): {'Yes' if i_access_j else 'No'}" + ) + print( + f"> Peer access from {devices[j].name} (GPU{j}) -> " + f"{devices[i].name} (GPU{i}): {'Yes' if j_access_i else 'No'}" + ) + + if i_access_j and j_access_i: + p2p_capable_gpus[1] = j + break + + if p2p_capable_gpus[1] != -1: + break + + if p2p_capable_gpus[0] == -1 or p2p_capable_gpus[1] == -1: + print("\nTwo or more GPUs with Peer-to-Peer access capability are required.") + print("Peer to Peer access is not available amongst GPUs in the system, waiving test.") + return 2 + + # Use first pair of P2P capable GPUs detected + gpuid = [p2p_capable_gpus[0], p2p_capable_gpus[1]] + dev0 = devices[gpuid[0]] + dev1 = devices[gpuid[1]] + + print(f"\nUsing GPU{gpuid[0]} ({dev0.name}) and GPU{gpuid[1]} ({dev1.name})") + + # Allocate buffers with P2P access + buf_size = num_elements * np.dtype(np.float32).itemsize + print(f"\nAllocating buffers ({int(buf_size / 1024 / 1024)}MB on GPU{gpuid[0]}, GPU{gpuid[1]} and CPU Host)...") + + # Allocate on GPU 0 and grant access to GPU 1 + dev0.set_current() + mr0 = DeviceMemoryResource(dev0) + mr0.peer_accessible_by = [gpuid[1]] # Grant GPU 1 access to GPU 0's memory + g0 = mr0.allocate(buf_size, stream=dev0.default_stream) + + # Allocate on GPU 1 and grant access to GPU 0 + dev1.set_current() + mr1 = DeviceMemoryResource(dev1) + mr1.peer_accessible_by = [gpuid[0]] # Grant GPU 0 access to GPU 1's memory + g1 = mr1.allocate(buf_size, stream=dev1.default_stream) + + print(f" Peer access enabled: GPU{gpuid[0]} <-> GPU{gpuid[1]}") + print( + f" Peer access status: MR0 accessible by {mr0.peer_accessible_by}, MR1 accessible by {mr1.peer_accessible_by}" + ) + + # Allocate pinned host memory + pinned_mr = PinnedMemoryResource() + h0 = pinned_mr.allocate(buf_size, stream=dev0.default_stream) + + print(" Memory allocated successfully") + + # Create streams + stream0 = dev0.create_stream() + stream1 = dev1.create_stream() + + try: + # P2P bandwidth test using CUDA events for accurate GPU-side timing + print("\nMeasuring P2P bandwidth...") + print(" Performing 100 ping-pong copies between GPUs...") + + event_options = EventOptions(timing_enabled=True) + sync_event0 = None + sync_event1 = None + + # Record start event on stream0 + start_event = stream0.record(options=event_options) + + for i in range(100): + # Ping-pong copy between GPUs with explicit event-based synchronization + if i % 2 == 0: + # Wait for previous stream1 copy to complete (if any) + if sync_event1 is not None: + stream0.wait(sync_event1) + # Copy g0 -> g1 on stream0 + g1.copy_from(g0, stream=stream0) + # Record event on stream0 to signal completion of this copy + sync_event0 = stream0.record(options=EventOptions(timing_enabled=False)) + else: + # Wait for previous stream0 copy to complete + if sync_event0 is not None: + stream1.wait(sync_event0) + # Copy g1 -> g0 on stream1 + g0.copy_from(g1, stream=stream1) + # Record event on stream1 to signal completion of this copy + sync_event1 = stream1.record(options=EventOptions(timing_enabled=False)) + + # Wait for last stream1 copy to complete + if sync_event1 is not None: + stream0.wait(sync_event1) + + # Record end event on stream0 after all copies have been enqueued + end_event = stream0.record(options=event_options) + end_event.sync() + + # Elapsed time in milliseconds (using subtraction operator) + time_memcpy = end_event - start_event + + bandwidth = (1.0 / (time_memcpy / 1000.0)) * (100.0 * buf_size) / (1024.0**3) + print(f" P2P bandwidth: {bandwidth:.2f} GB/s") + + # Prepare host buffer and initialize data + print(f"\nPreparing host buffer and memcpy to GPU{gpuid[0]}...") + + # Create numpy view and initialize + h0_array = np.from_dlpack(h0).view(dtype=np.float32) + h0_array[:] = (np.arange(num_elements, dtype=np.float32) % 4096).astype(np.float32) + + # Copy to GPU 0 + dev0.set_current() + g0.copy_from(h0, stream=stream0) + stream0.sync() + + print(" Data initialized and copied to GPU") + + # Compile kernel for both GPUs + print("\nCompiling CUDA kernel...") + dev0.set_current() + program_options = ProgramOptions(std="c++17", arch=f"sm_{dev0.arch}") + prog = Program(SIMPLE_P2P_KERNEL, code_type="c++", options=program_options) + mod0 = prog.compile("cubin") + kernel0 = mod0.get_kernel("SimpleKernel") + + dev1.set_current() + program_options = ProgramOptions(std="c++17", arch=f"sm_{dev1.arch}") + prog = Program(SIMPLE_P2P_KERNEL, code_type="c++", options=program_options) + mod1 = prog.compile("cubin") + kernel1 = mod1.get_kernel("SimpleKernel") + + print(" Kernels compiled successfully") + + # Launch configuration + threads = 512 + blocks = (num_elements + threads - 1) // threads + config = LaunchConfig(grid=blocks, block=threads) + + # Run kernel on GPU 1, reading from GPU 0, writing to GPU 1 + print(f"\nRun kernel on GPU{gpuid[1]}, taking source data from GPU{gpuid[0]} and writing to GPU{gpuid[1]}...") + dev1.set_current() + launch(stream1, config, kernel1, g0, g1, np.int32(num_elements)) + stream1.sync() + print(" Kernel execution complete") + + # Run kernel on GPU 0, reading from GPU 1, writing to GPU 0 + print(f"\nRun kernel on GPU{gpuid[0]}, taking source data from GPU{gpuid[1]} and writing to GPU{gpuid[0]}...") + dev0.set_current() + launch(stream0, config, kernel0, g1, g0, np.int32(num_elements)) + stream0.sync() + print(" Kernel execution complete") + + # Copy data back to host and verify + print(f"\nCopy data back to host from GPU{gpuid[0]} and verify results...") + g0.copy_to(h0, stream=stream0) + stream0.sync() + + # Verify results + print("\nChecking results...") + print(f" Comparing {num_elements:,} elements...") + + # Input data goes through two kernels, each multiplying by 2.0. + expected = (np.arange(num_elements, dtype=np.float32) % 4096) * 4.0 + + # Use utility function for verification (handles both numpy and cupy arrays) + if verify_array_result(h0_array, expected, rtol=1e-5, atol=1e-6, verbose=True): + print(" [PASS] Validation PASSED") + success = True + else: + print(" [FAIL] Validation FAILED") + # Show first few errors for debugging + errors = np.where(~np.isclose(h0_array, expected, rtol=1e-5, atol=1e-6))[0] + print(f" Number of mismatches: {len(errors)}") + for idx in errors[:10]: + print(f" Error @ element {idx}: got {h0_array[idx]}, expected {expected[idx]}") + success = False + + # Disable peer access + print("\nDisabling peer access...") + mr0.peer_accessible_by = [] # Revoke GPU 1's access to GPU 0's memory + mr1.peer_accessible_by = [] # Revoke GPU 0's access to GPU 1's memory + print( + f" Peer access revoked: MR0 accessible by {mr0.peer_accessible_by}, " + f"MR1 accessible by {mr1.peer_accessible_by}" + ) + + print("\n" + "=" * 70) + if success: + print("simpleP2P completed successfully!") + else: + print("simpleP2P FAILED!") + print("=" * 70 + "\n") + + return 0 if success else 1 + finally: + # Cleanup streams and buffers + print("Shutting down...") + stream0.close() + stream1.close() + + +def main(): + """Main entry point with argument parsing.""" + parser = argparse.ArgumentParser( + description=("Demonstrate peer-to-peer (P2P) memory access between multiple GPUs with CUDA") + ) + + parser.add_argument( + "--num_elements", + type=int, + default=1024 * 1024 * 16, # 16M elements = 64MB + help="Number of elements in arrays (default: 16777216 = 64MB)", + ) + + args = parser.parse_args() + + # Validate arguments + if args.num_elements <= 0: + print("Error: num_elements must be positive") + return 1 + + try: + exit_code = run(num_elements=args.num_elements) + sys.exit(exit_code) + except Exception as e: + print(f"\nError: {e}") + import traceback + + traceback.print_exc() + sys.exit(1) + + +if __name__ == "__main__": + main() diff --git a/samples/simplePrint/README.md b/samples/simplePrint/README.md new file mode 100644 index 00000000000..350694b06da --- /dev/null +++ b/samples/simplePrint/README.md @@ -0,0 +1,263 @@ +# simplePrint - Printing from CUDA Kernels + +## Description + +This sample demonstrates how to use `printf()` inside CUDA kernels using **two different approaches**: + +1. **CUDA C++ kernels** compiled with `cuda.core.Program` - Full C++ features and control +2. **Numba CUDA kernels** - Pythonic kernel authoring using `numba.cuda.grid()` for modern indexing + +The sample shows basic device management, kernel compilation with inline CUDA C++ code, and multi-dimensional kernel launches (2D grid × 3D blocks) using modern CUDA Python. The Numba example demonstrates the recommended `numba.cuda.grid()` indexing style while also showing how it relates to classic CUDA C++ block/thread IDs. Both approaches use `cuda.core` APIs for stream management and synchronization, demonstrating interoperability. + +This is the Python equivalent of the C++ `simplePrintf` sample, enhanced with Numba CUDA examples. + +## Key Concepts + +CUDA Python (cuda.core), Numba CUDA, Kernel Compilation, Printf in Kernels, Multi-dimensional Launch, Pythonic GPU Programming, Modern Thread Indexing (grid()), Stream-based Execution, cuda.core/Numba Interoperability + +## CUDA APIs involved + +### [cuda.core (cuda-python)](https://nvidia.github.io/cuda-python/) + +- `Device()` - Device management +- `Device.create_stream()` - Create CUDA streams +- `Stream.sync()` - Synchronize stream execution +- `Program()` - Compile CUDA C++ kernels +- `LaunchConfig()` - Configure kernel launch +- `launch()` - Execute kernels on streams + +### [Numba CUDA](https://nvidia.github.io/numba-cuda/) + +- `@cuda.jit` - JIT compile Python functions to CUDA kernels +- `cuda.grid()` - Get global thread position (recommended modern approach) +- `cuda.blockIdx`, `cuda.threadIdx` - Thread/block indices (classic style) +- `cuda.gridDim`, `cuda.blockDim` - Grid/block dimensions +- **Note:** Uses `cuda.core` APIs for stream management (interoperability) + +### CUDA Kernel Functions + +- `printf()` - Print from device code (C++) +- `print()` - Print from device code (Numba, limited formatting) +- `blockIdx`, `threadIdx` - Thread/block indices +- `gridDim`, `blockDim` - Grid/block dimensions + +### What You Learn + +- Device initialization with `cuda.core.Device` +- Compiling CUDA C++ kernels with `Program` and `ProgramOptions` +- Writing Pythonic CUDA kernels with Numba's `@cuda.jit` decorator +- Using `numba.cuda.grid()` for modern thread indexing (recommended approach) +- Understanding the relationship between global coordinates and classic block/thread IDs +- **Interoperability**: Using `cuda.core` streams with Numba CUDA kernels +- Comparing CUDA C++ vs Pythonic kernel authoring approaches +- Multi-dimensional kernel launches (2D grid, 3D blocks) +- Using streams for kernel execution and synchronization +- Using `printf()` and `print()` in GPU kernels for debugging +- Understanding print limitations in Numba CUDA (no f-strings) +- Proper error handling and resource management + +## Requirements + +### Hardware: + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 512 MB + +### Software: + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` package (13.0+) +- `cuda-core` package (>=1.0.0) +- `numba-cuda` package (0.24.0+, for Pythonic kernel authoring) + +Download and install: +- [CUDA Toolkit](https://developer.nvidia.com/cuda-downloads) +- [cuda-python package](https://nvidia.github.io/cuda-python/): `pip install cuda-python` +- [numba-cuda](https://nvidia.github.io/numba-cuda/): `pip install numba-cuda` + +## Build and Run + +```bash +# Install dependencies +pip install -r requirements.txt + +# Run the sample +python simplePrint.py +``` + +## Expected Output + +``` +Simple Print - Printing from CUDA Kernels +Demonstrating both CUDA C++ and Numba CUDA approaches + +Device: +Compute Capability: sm_ + +====================================================================== +METHOD 1: CUDA C++ Kernel (via cuda.core.Program) +====================================================================== +Advantage: Full C++ features, better for complex kernels + +Compiling CUDA C++ kernel... +Kernel compiled successfully. + +Kernel configuration: + Grid: (2, 2) + Block: (2, 2, 2) + Total threads: 32 + +Launching kernel with value=10. Output: + +[0, 0]: Value is: 10 +[0, 1]: Value is: 10 +[0, 2]: Value is: 10 +[0, 3]: Value is: 10 +[0, 4]: Value is: 10 +[0, 5]: Value is: 10 +[0, 6]: Value is: 10 +[0, 7]: Value is: 10 +[1, 0]: Value is: 10 +... +[3, 7]: Value is: 10 + +CUDA C++ kernel execution complete. + + +====================================================================== +METHOD 2: Numba CUDA Kernel (Pythonic / modern indexing) +====================================================================== +Advantage: Uses numba.cuda.grid(3) for global indexing, + while still showing classic CUDA C++ IDs for reference. + Uses cuda.core for stream management (interoperability). + +Kernel configuration: + Grid: (2, 2) + Block: (2, 2, 2) + Total threads: 32 + +Launching Numba CUDA kernel (grid(3) + classic IDs) with value=10: +Uses numba.cuda.grid(3) to get global (x, y, z), +and prints the corresponding blockId/threadId like the C++ sample. +Stream managed by cuda.core for consistency with C++ example. + +global[ 0 , 0 , 0 ] -> [ 0 , 0 ]: Value is: 10 +global[ 1 , 0 , 0 ] -> [ 0 , 1 ]: Value is: 10 +global[ 0 , 1 , 0 ] -> [ 0 , 2 ]: Value is: 10 +... +global[ 3 , 3 , 1 ] -> [ 3 , 7 ]: Value is: 10 + +Numba CUDA kernel execution complete. + +====================================================================== +Done! Both kernel approaches demonstrated successfully. +====================================================================== +``` + +## Understanding the Output + +- **Grid**: 2×2 = 4 blocks (labeled 0-3) +- **Block**: 2×2×2 = 8 threads per block (labeled 0-7) +- **Total**: 32 threads, each printing its position and value + +### CUDA C++ Kernel: +Each thread calculates: +- Block ID (linear): `blockIdx.y * gridDim.x + blockIdx.x` +- Thread ID (linear): `threadIdx.z * blockDim.x * blockDim.y + threadIdx.y * blockDim.x + threadIdx.x` + +### Numba CUDA Kernel: +Each thread shows: +- **Global position** using `numba.cuda.grid(3)` → `(x, y, z)` coordinates across entire grid +- **Classic IDs** (block ID, thread ID) calculated the same way as C++ for comparison +- This demonstrates how modern indexing relates to traditional CUDA C++ style + +### Comparing the Two Approaches + +**CUDA C++ Kernel (Method 1):** +- Uses C++ syntax and `printf()` with full formatting control +- Requires compilation via `cuda.core.Program` +- Best for complex kernels needing C++ features (templates, libraries, etc.) +- Uses classic block/thread ID indexing +- Output: `[0, 0]: Value is: 10` (clean formatting) + +**Numba CUDA Kernel (Method 2):** +- Uses Python syntax with `@cuda.jit` decorator +- JIT compiled automatically when called +- Best for prototyping and simpler kernels +- **Modern indexing**: Uses `numba.cuda.grid(3)` to get global thread coordinates (recommended) +- Also shows classic block/thread IDs to help relate the two indexing models +- **Interoperability**: Uses `cuda.core` streams via `stream` for consistency +- Demonstrates that numba-cuda kernels can work seamlessly with cuda.core infrastructure +- Limited print formatting (no f-strings, basic `print()` only; adds spaces between arguments) +- Output: `global[ 0 , 0 , 0 ] -> [ 0 , 0 ]: Value is: 10` (shows both indexing styles; note extra spaces due to `print()` behavior) + +## Experiments + +Try modifying: + +### For Both Approaches: +- **Grid size**: Change `grid=(4, 4)` for 16 blocks +- **Block size**: Change `block=(4, 4, 4)` for 64 threads per block +- **Conditional printing**: Print only from specific threads (e.g., `if threadId == 0:`) + +### CUDA C++ Specific: +- **Format strings**: Experiment with different `printf()` formats +- **Kernel code**: Add complex C++ computations before printing +- **External libraries**: Include CUDA math libraries or device functions (e.g., ``, ``) + +### Numba CUDA Specific: +- **Grid indexing**: Try `numba.cuda.grid(1)` or `numba.cuda.grid(2)` for different dimensions +- **Conditional printing**: Print only from threads where `x == 0` or `y == z` +- **Python operations**: Use NumPy-like operations in the kernel +- **Device math libraries**: Use [nvmath-python device APIs](https://docs.nvidia.com/cuda/nvmath-python/latest/device-apis/index.html) for optimized math operations (similar to CUDA math libraries in C++) +- **Shared memory**: Add `numba.cuda.shared.array()` for fast inter-thread communication +- **Atomic operations**: Try `numba.cuda.atomic.add()` for thread-safe updates +- **Print variations**: Experiment with what numba-cuda's `print()` can and cannot handle +- **Streams**: Create multiple `cuda.core` streams and launch numba-cuda kernels on them concurrently +- **Interoperability**: Mix numba-cuda kernels and CUDA C++ kernels on the same stream + +## Notes + +### General: +- Printing from GPU is relatively slow - use sparingly in production code +- Printf output is buffered and limited (~1MB buffer on most GPUs) + +### CUDA C++ Kernels: +- Always call `stream.sync()` after kernel launch to flush printf output +- Full `printf()` format string support (%, flags, width, precision) + +### Numba CUDA Kernels: +- **Recommended**: Use `numba.cuda.grid(ndim)` for thread indexing (modern, Pythonic) + - `grid(1)` for 1D indexing, `grid(2)` for 2D, `grid(3)` for 3D + - Returns global thread position across the entire grid +- **Interoperability**: Use `cuda.core` streams with Numba kernels via `stream` + - Create streams: `stream = device.create_stream()` + - Launch kernels: `kernel[grid, block, stream](args)` + - Synchronize: `stream.sync()` +- Numba's `print()` has limited capabilities compared to Python's `print()` +- F-strings are NOT supported in Numba CUDA kernels +- Use comma-separated arguments: `print("Value:", x)` instead of f-strings +- **Note**: `print()` automatically adds spaces between comma-separated arguments (e.g., `print("[", x, "]")` outputs `[ 0 ]` not `[0]`) +- Always synchronize the stream to flush output + +## Files + +- `simplePrint.py` - Python implementation using cuda.core API +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +### CUDA Python (cuda.core): +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/) +- [CUDA Python Examples](https://github.com/NVIDIA/cuda-python/tree/main/cuda_core/examples) + +### Numba CUDA: +- [Numba CUDA Documentation](https://nvidia.github.io/numba-cuda/) +- [numba.cuda.grid() Reference](https://nvidia.github.io/numba-cuda/reference/kernel.html#numba.cuda.grid) +- [nvmath-python Device APIs](https://docs.nvidia.com/cuda/nvmath-python/latest/device-apis/index.html) - Optimized math operations for Numba CUDA kernels + +### CUDA References: +- [CUDA C Programming Guide - Printf](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#formatted-output) +- [C++ simplePrintf Sample](https://github.com/NVIDIA/cuda-samples/tree/master/Samples/0_Introduction/simplePrintf) diff --git a/samples/simplePrint/requirements.txt b/samples/simplePrint/requirements.txt new file mode 100644 index 00000000000..a39c5e7e518 --- /dev/null +++ b/samples/simplePrint/requirements.txt @@ -0,0 +1,7 @@ +# Simple Printf Sample - Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +# Numba JIT uses nvJitLink from pip; keep in step with cuda-bindings (e.g. 13.2.x). +nvidia-nvjitlink>=13.2.0 +numba-cuda>=0.29.0 diff --git a/samples/simplePrint/simplePrint.py b/samples/simplePrint/simplePrint.py new file mode 100644 index 00000000000..38f8e33ba4c --- /dev/null +++ b/samples/simplePrint/simplePrint.py @@ -0,0 +1,289 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "nvidia-nvjitlink>=13.2.0", "numba-cuda>=0.29.0"] +# /// + +""" +Simple Print - Printing from CUDA Kernels + +This sample demonstrates how to print output from CUDA kernels using printf(). +It shows: +1. Device management with cuda.core.Device +2. Compiling CUDA C++ code that uses printf() +3. Launching kernels with 2D grids and 3D blocks +4. Seeing kernel output printed to stdout +5. Using Numba CUDA for Pythonic kernel authoring + +This sample demonstrates both approaches: +- CUDA C++ kernels compiled via cuda.core.Program (more control, C++ features) +- Numba CUDA kernels (more Pythonic, easier to write) + +This is the Python equivalent of the C++ simplePrintf sample. +""" + +import sys +import traceback + +try: + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + +try: + from numba import cuda as numba_cuda + + NUMBA_AVAILABLE = True +except ImportError: + NUMBA_AVAILABLE = False + print("Warning: numba not found. Numba CUDA example will be skipped.") + print("To install: pip install numba") + + +# CUDA C++ kernel with printf +# This kernel prints the block index, thread index, and a value from each thread +PRINTF_KERNEL = """ +extern "C" +__global__ void printKernel(int val) { + // Calculate linear block index from 2D grid + int blockId = blockIdx.y * gridDim.x + blockIdx.x; + + // Calculate linear thread index from 3D block + int threadId = threadIdx.z * blockDim.x * blockDim.y + + threadIdx.y * blockDim.x + + threadIdx.x; + + // Print from each thread + printf("[%d, %d]:\\t\\tValue is: %d\\n", blockId, threadId, val); +} +""" + + +# Numba CUDA kernel - Pythonic equivalent using numba.cuda.grid() +# This demonstrates the same functionality using Numba's Python-based kernel syntax +if NUMBA_AVAILABLE: + + @numba_cuda.jit + def numba_print_kernel(val): + """ + Numba CUDA kernel showing the *recommended* grid() indexing style, + while also relating it to the classic CUDA C++ blockId/threadId. + + - Primary view: global 3D coordinates from numba.cuda.grid(3) + (modern, Pythonic way to index work for a 3D thread layout). + - Secondary view: linear blockId / threadId matching the CUDA C++ + printf sample, to help CUDA C++ users connect the two models. + """ + # Modern / recommended view: global 3D thread coordinates + x, y, z = numba_cuda.grid(3) + + # Classic CUDA-style indices, same formulas as the C++ sample + block_id = numba_cuda.blockIdx.y * numba_cuda.gridDim.x + numba_cuda.blockIdx.x + + thread_id = ( + numba_cuda.threadIdx.z * numba_cuda.blockDim.x * numba_cuda.blockDim.y + + numba_cuda.threadIdx.y * numba_cuda.blockDim.x + + numba_cuda.threadIdx.x + ) + + # Print both views side-by-side + # Note: Numba print() adds spaces between comma-separated args + print( + "global[", + x, + ",", + y, + ",", + z, + "] -> [", + block_id, + ",", + thread_id, + "]:\t\tValue is:", + val, + ) + + +def run_cuda_cpp_kernel(device, test_value=10): + """ + Demonstrate printing from CUDA C++ kernel compiled with cuda.core. + + This approach gives you full access to CUDA C++ features and allows + for more complex kernel implementations. + """ + print("=" * 70) + print("METHOD 1: CUDA C++ Kernel (via cuda.core.Program)") + print("=" * 70) + print("Advantage: Full C++ features, better for complex kernels") + print() + + # Compile the kernel + print("Compiling CUDA C++ kernel...") + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(PRINTF_KERNEL, code_type="c++", options=program_options) + mod = prog.compile("cubin", name_expressions=("printKernel",)) + kernel = mod.get_kernel("printKernel") + print("Kernel compiled successfully.\n") + + # Create stream for kernel execution + stream = device.create_stream() + + # Configure kernel launch + # Using 2D grid (2x2) and 3D blocks (2x2x2) + grid_x, grid_y = 2, 2 + block_x, block_y, block_z = 2, 2, 2 + + print("Kernel configuration:") + print(f" Grid: ({grid_x}, {grid_y})") + print(f" Block: ({block_x}, {block_y}, {block_z})") + print(f" Total threads: {grid_x * grid_y * block_x * block_y * block_z}") + print() + + # Launch configuration with 2D grid and 3D block + config = LaunchConfig(grid=(grid_x, grid_y), block=(block_x, block_y, block_z)) + + print(f"Launching kernel with value={test_value}. Output:\n") + try: + # Launch kernel + launch(stream, config, kernel, test_value) + + # Synchronize to ensure printf output is flushed + stream.sync() + + print("\nCUDA C++ kernel execution complete.") + except Exception as e: + print(f"\nError during kernel execution: {e}") + traceback.print_exc() + return 1 + finally: + # Cleanup + stream.close() + + return 0 + + +def run_numba_kernel(device, test_value=10): + """ + Demonstrate printing from a Numba CUDA kernel. + + This example uses numba.cuda.grid(3) as the primary indexing mechanism + (recommended modern style), and also prints the equivalent blockId / + threadId used in the CUDA C++ printf sample for side-by-side comparison. + + Uses cuda.core APIs for stream management, demonstrating interoperability + between Numba CUDA kernels and cuda.core infrastructure. + """ + print("\n") + print("=" * 70) + print("METHOD 2: Numba CUDA Kernel (Pythonic / modern indexing)") + print("=" * 70) + print("Advantage: Uses numba.cuda.grid(3) for global indexing,") + print(" while still showing classic CUDA C++ IDs for reference.") + print(" Uses cuda.core for stream management (interoperability).") + print() + + # Same launch configuration as the C++ version + grid_x, grid_y = 2, 2 + block_x, block_y, block_z = 2, 2, 2 + + print("Kernel configuration:") + print(f" Grid: ({grid_x}, {grid_y})") + print(f" Block: ({block_x}, {block_y}, {block_z})") + print(f" Total threads: {grid_x * grid_y * block_x * block_y * block_z}") + print() + + # Use cuda.core stream (same as C++ example) instead of numba.cuda.stream() + stream = device.create_stream() + + print(f"Launching Numba kernel (grid(3) + classic IDs) with value={test_value}:") + print("Uses numba.cuda.grid(3) to get global (x, y, z),") + print("and prints the corresponding blockId/threadId like the C++ sample.") + print("Stream managed by cuda.core for consistency with C++ example.\n") + + try: + # Launch Numba kernel on cuda.core stream + numba_print_kernel[(grid_x, grid_y), (block_x, block_y, block_z), stream](test_value) + + # Synchronize cuda.core stream (same as C++ example) + stream.sync() + print("\nNumba CUDA kernel execution complete.") + except Exception as e: + print(f"\nError during Numba kernel execution: {e}") + traceback.print_exc() + return 1 + finally: + # Cleanup + stream.close() + + return 0 + + +def main(): + """Main function demonstrating printing from CUDA kernels using both approaches""" + + print("Simple Print - Printing from CUDA Kernels") + print("Demonstrating both CUDA C++ and Numba CUDA approaches") + print() + # Initialize device + device = Device() + device.set_current() + + # Get device properties + print(f"Device: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + print() + + # Value to pass to both kernels + test_value = 10 + + # Run CUDA C++ kernel + result = run_cuda_cpp_kernel(device, test_value) + if result != 0: + return result + + # Run Numba kernel if available + if NUMBA_AVAILABLE: + result = run_numba_kernel(device, test_value) + if result != 0: + return result + else: + print("\n" + "=" * 70) + print("Numba CUDA example skipped (numba not installed)") + print("To run the Numba example: pip install numba") + print("=" * 70) + + print("\n" + "=" * 70) + print("Done! Both kernel approaches demonstrated successfully.") + print("=" * 70) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/simpleZeroCopy/README.md b/samples/simpleZeroCopy/README.md new file mode 100644 index 00000000000..cf8a38d3d28 --- /dev/null +++ b/samples/simpleZeroCopy/README.md @@ -0,0 +1,141 @@ +# Sample: simpleZeroCopy (Python) + +## Description + +This sample demonstrates zero-copy access using **`cuda.core`** to compile and launch a kernel, and **`cuda.bindings.runtime`** for mapped pinned host memory (`cudaHostAlloc` with `cudaHostAllocMapped`, `cudaHostGetDevicePointer`, and `cudaFreeHost`). The GPU loads and stores through **device** addresses that refer to that host memory—no `cudaMemcpy` in or out. The example is vector add with inputs and output as NumPy views of the host side of those buffers. + +## What you will learn + +- How to allocate **mapped** pinned host memory with `cudaHostAlloc` (via `cuda.bindings.runtime`) so the GPU can use `cudaHostGetDevicePointer` addresses in a kernel +- How `cuda.core.PinnedMemoryResource` differs (staging/copies; not guaranteed to be `cudaHostAllocMapped` for direct kernel access) +- How to build NumPy views of host addresses with `ctypes` and `numpy.frombuffer` +- How to launch CUDA kernels with `cuda.core`’s `Program` and `launch`, passing **device** pointers for mapped buffers +- When zero-copy is beneficial vs. device memory with explicit transfers +- How to validate results on the host without a D2H memcpy + +## Key libraries + +- `numpy` – CPU arrays and reference computation +- `cuda-core` – `Device`, stream, `Program`, `LaunchConfig`, `launch` +- `cuda-python` (`cuda.bindings.runtime`) – `cudaHostAlloc` / `cudaHostGetDevicePointer` / `cudaFreeHost` for mapped host memory + +## Key APIs + +**From cuda.core:** `Device`, `device.create_stream()`, `Program`, `ProgramOptions`, `LaunchConfig`, `launch` + +**From cuda.bindings.runtime:** `cudaHostAlloc` (with `cudaHostAllocMapped` | `cudaHostAllocPortable`), `cudaHostGetDevicePointer`, `cudaFreeHost` + +**From the standard library:** `ctypes` – wrap host pointers for `numpy.frombuffer` float32 views + +**Memory management:** Free host memory with `cudaFreeHost` in a `finally` block; call `stream.close()` when done. + +## Zero-Copy Memory: When to Use + +### Benefits +- **No explicit transfers**: Simplifies code by eliminating `cudaMemcpy` calls +- **Automatic synchronization**: Host can access results immediately after kernel completes +- **Good for small data**: Overhead of explicit transfers can exceed benefits for small arrays +- **Excellent for integrated GPUs**: On systems like Jetson (Tegra), CPU and GPU share physical memory + +### Limitations +- **Slower access**: Limited by PCIe bandwidth vs. device memory bandwidth +- **Not for compute-intensive**: Device memory is much faster for frequently accessed data +- **Discrete GPU overhead**: Each access crosses PCIe bus + +### Best Use Cases +1. Small data sets where transfer overhead dominates +2. Data accessed infrequently by GPU +3. Integrated GPU platforms (shared memory) +4. Streaming data from host to device +5. Prototyping and debugging (simplifies memory management) + +## Requirements + +1. **NVIDIA GPU** and a **driver** compatible with your installed `cuda-python` / `cuda-core` wheels. +2. **Python 3.10 or newer** +3. Install **`pip install -r requirements.txt`** (NumPy, `cuda-python`, `cuda-core`). A **system** CUDA Toolkit is not strictly required if the process can load the driver/runtime; use `LD_LIBRARY_PATH` in *How to run* if you hit missing-library errors. + +**Install packages:** +```bash +pip install -r requirements.txt +``` + +Or manually: +```bash +pip install numpy>=2.3.2 cuda-core>=1.0.0 cuda-python>=13.0.0 +``` + +## How to run + +Basic usage: +```bash +# Pre-steps: Set library path +export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH + +# Run with default parameters (1M elements) +python simpleZeroCopy.py +``` + +With custom parameters: +```bash +# Use 2M elements +python simpleZeroCopy.py --num_elements 2097152 + +# Show help +python simpleZeroCopy.py --help +``` + +### Command line arguments + +- `--num_elements`: Number of elements in vectors (default: 1048576) + - Each vector uses `num_elements * 4 bytes` (float32) + - Default: ~4 MB per vector, ~12 MB total + +## Expected Output + +Device name and compute capability **depend on your system**; the rest of the log should match this shape when validation passes. + +``` +====================================================================== +simpleZeroCopy - CUDA Python Sample +====================================================================== + +Device Information: + Name: + Compute Capability: . + +> Memory: mapped pinned host (cudaHostAlloc + cudaHostGetDevicePointer) + +Compiling CUDA kernel... + Kernel compiled successfully + +Allocating memory: + Vector size: 1,048,576 elements + Memory per vector: 4.00 MB + Total memory: 12.00 MB + +> Allocating mapped pinned host memory... + Mapped host memory allocated successfully + +> Initializing vectors on host... +> Computing reference result on CPU... + +> Launching vectorAddGPU kernel... + Note: GPU accesses host memory directly (zero-copy) + Kernel execution complete + +> Checking results from vectorAddGPU()... + Comparing 1,048,576 elements... + Relative error: 0.000000e+00 + Validation PASSED + +====================================================================== +simpleZeroCopy completed successfully! +====================================================================== +``` + +## Files + +- `simpleZeroCopy.py` – Main Python implementation +- `README.md` – This file +- `requirements.txt` – Python package dependencies diff --git a/samples/simpleZeroCopy/requirements.txt b/samples/simpleZeroCopy/requirements.txt new file mode 100644 index 00000000000..cfd9d89ea13 --- /dev/null +++ b/samples/simpleZeroCopy/requirements.txt @@ -0,0 +1,6 @@ +# simpleZeroCopy - Requirements +# Install with: pip install -r requirements.txt + +numpy>=2.3.2 +cuda-python>=13.0.0 +cuda-core>=1.0.0 diff --git a/samples/simpleZeroCopy/simpleZeroCopy.py b/samples/simpleZeroCopy/simpleZeroCopy.py new file mode 100644 index 00000000000..a000ad0f8ca --- /dev/null +++ b/samples/simpleZeroCopy/simpleZeroCopy.py @@ -0,0 +1,275 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# distribution and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["numpy>=2.3.2", "cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +import argparse +import ctypes +import sys +from pathlib import Path + +try: + import numpy as np + + from cuda.bindings import runtime as cuda_rt + from cuda.core import ( + Device, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + + +def _mapped_host_alloc(num_floats, stream): + """ + Allocate page-locked host memory mapped for device access; return + (host_ptr, device_ptr) for CPU views and for ``launch()``. + """ + nbytes = int(num_floats) * np.dtype(np.float32).itemsize + if nbytes <= 0: + return 0, 0 + err, h_ptr = cuda_rt.cudaHostAlloc(nbytes, cuda_rt.cudaHostAllocMapped | cuda_rt.cudaHostAllocPortable) + if err != cuda_rt.cudaError_t.cudaSuccess: + raise RuntimeError(f"cudaHostAlloc failed: {err}") + err, d_ptr = cuda_rt.cudaHostGetDevicePointer(h_ptr, 0) + if err != cuda_rt.cudaError_t.cudaSuccess: + cuda_rt.cudaFreeHost(h_ptr) + raise RuntimeError(f"cudaHostGetDevicePointer failed: {err}") + # Ensure prior work on this stream is visible before host fills buffers. + if stream is not None: + stream.sync() + return h_ptr, d_ptr + + +def _float_view(host_ptr, num_floats): + return np.frombuffer( + (ctypes.c_float * num_floats).from_address(host_ptr), + dtype=np.float32, + count=num_floats, + ) + + +# CUDA C++: vector add with grid-stride loop +VECTOR_ADD_KERNEL = """ +extern "C" __global__ +void vectorAddGPU(float* c, const float* a, const float* b, int N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = gridDim.x * blockDim.x; + + for (size_t i = tid; i < N; i += stride) { + c[i] = a[i] + b[i]; + } +} +""" + + +def run(num_elements=1048576): + """ + Zero-copy vector add: map host memory, launch kernel with device + pointers, validate on CPU. + + This function shows how to: + 1. Allocate pinned (page-locked) host memory + 2. Map host memory into GPU address space (zero-copy) + 3. Access host memory directly from GPU kernel + 4. Validate results + + Parameters + ---------- + num_elements : int + Number of elements in vectors (default: 1048576) + """ + print("\n" + "=" * 70) + print("simpleZeroCopy - CUDA Python Sample") + print("=" * 70) + + # Initialize device + device = Device() + device.set_current() + major, minor = device.compute_capability + + print("\nDevice Information:") + print(f" Name: {device.name}") + print(f" Compute Capability: {major}.{minor}") + + # Create stream + stream = device.create_stream() + mapped_host_ptrs = [] + + try: + print("\n> Memory: mapped pinned host (cudaHostAlloc + cudaHostGetDevicePointer)") + + print("\nCompiling CUDA kernel...") + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + prog = Program(VECTOR_ADD_KERNEL, code_type="c++", options=program_options) + mod = prog.compile("cubin") + kernel = mod.get_kernel("vectorAddGPU") + print(" Kernel compiled successfully") + + bytes_total = num_elements * np.dtype(np.float32).itemsize + print("\nAllocating memory:") + print(f" Vector size: {num_elements:,} elements") + print(f" Memory per vector: {bytes_total / (1024**2):.2f} MB") + print(f" Total memory: {3 * bytes_total / (1024**2):.2f} MB") + + print("\n> Allocating mapped pinned host memory...") + h_a, d_a = _mapped_host_alloc(num_elements, stream) + mapped_host_ptrs.append(h_a) + h_b, d_b = _mapped_host_alloc(num_elements, stream) + mapped_host_ptrs.append(h_b) + h_c, d_c = _mapped_host_alloc(num_elements, stream) + mapped_host_ptrs.append(h_c) + + a = _float_view(h_a, num_elements) + b = _float_view(h_b, num_elements) + c = _float_view(h_c, num_elements) + + print(" Mapped host memory allocated successfully") + + print("\n> Initializing vectors on host...") + rng = np.random.default_rng(42) + a[:] = rng.random(num_elements).astype(np.float32) + b[:] = rng.random(num_elements).astype(np.float32) + c[:] = 0 + + print("> Computing reference result on CPU...") + reference = a + b + + print("\n> Launching vectorAddGPU kernel...") + print(" Note: GPU accesses host memory directly (zero-copy)") + + block_size = 256 + grid_size = (num_elements + block_size - 1) // block_size + config = LaunchConfig(grid=grid_size, block=block_size) + + # Pass device pointers from cudaHostGetDevicePointer, not raw host VAs. + launch( + stream, + config, + kernel, + int(d_c), + int(d_a), + int(d_b), + np.int32(num_elements), + ) + stream.sync() + + print(" Kernel execution complete") + + print("\n> Checking results from vectorAddGPU()...") + print(f" Comparing {num_elements:,} elements...") + + # ``c`` is a host view of the same buffer; no cudaMemcpy D2H needed. + if np.allclose(c, reference, rtol=1e-5, atol=1e-6): + error_norm = np.linalg.norm(c - reference) + ref_norm = np.linalg.norm(reference) + relative_error = error_norm / ref_norm + print(f" Relative error: {relative_error:.6e}") + print(" Validation PASSED") + success = True + else: + max_error = np.max(np.abs(c - reference)) + print(f" Max error: {max_error}") + print(" Validation FAILED") + success = False + + print("\n" + "=" * 70) + if success: + print("simpleZeroCopy completed successfully!") + else: + print("simpleZeroCopy FAILED!") + print("=" * 70 + "\n") + + return 0 if success else 1 + finally: + for h in reversed(mapped_host_ptrs): + if h: + cuda_rt.cudaFreeHost(h) + stream.close() + + +def main(): + """Parse CLI, call ``run()``, and exit with validation status.""" + parser = argparse.ArgumentParser( + description="Demonstrate zero-copy memory access with CUDA", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +Examples: + python simpleZeroCopy.py + python simpleZeroCopy.py --num_elements 2097152 +What is Zero-Copy Memory? + Zero-copy allows the GPU to directly access host (CPU) memory without + explicit memory transfers. This is useful for: + - Small data that doesn't benefit from explicit transfers + - Data that is accessed infrequently + - Integrated GPUs that share memory with CPU + + Trade-offs: + - Slower than device memory (PCIe bandwidth limited) + - No explicit transfers needed (simpler code) + - Good for discrete GPUs with small data + - Excellent for integrated GPUs (e.g., Tegra) + """, + ) + + parser.add_argument( + "--num_elements", + type=int, + default=1048576, + help="Number of elements in vectors (default: 1048576)", + ) + + args = parser.parse_args() + + if args.num_elements <= 0: + print("Error: num_elements must be positive") + sys.exit(1) + + try: + exit_code = run(num_elements=args.num_elements) + except Exception as e: + print(f"\nError: {e}") + import traceback + + traceback.print_exc() + exit_code = 1 + + sys.exit(exit_code) + + +if __name__ == "__main__": + main() diff --git a/samples/streamingCopyComputeOverlap/README.md b/samples/streamingCopyComputeOverlap/README.md new file mode 100644 index 00000000000..7ecdc142dd7 --- /dev/null +++ b/samples/streamingCopyComputeOverlap/README.md @@ -0,0 +1,98 @@ +# Sample: Streaming Copy + Compute Overlap (Python) + +## Description + +Demonstrate how to overlap memory transfers (H2D/D2H) with kernel computation using CUDA streams. This technique hides transfer latency and improves GPU utilization. + +## What You'll Learn + +- Using `PinnedMemoryResource` for async-capable host memory +- Using `DeviceMemoryResource` for GPU memory allocation +- Creating multiple streams with `Device.create_stream()` +- Async memory copies with `Buffer.copy_to()` +- Overlapping H2D transfers, kernel execution, and D2H transfers + +## Key Concept + +**Without overlap (sequential):** +``` +[====H2D====][====Compute====][====D2H====] +``` + +**With overlap (multiple streams):** +``` +Stream 0: [H2D][Compute][D2H] +Stream 1: [H2D][Compute][D2H] +Stream 2: [H2D][Compute][D2H] +``` + +## Key APIs (all from `cuda.core`) + +- `Device` - Device management +- `Device.create_stream()` - Create CUDA streams +- `Stream.sync()` - Synchronize stream +- `PinnedMemoryResource` - Pinned host memory (required for async transfers) +- `DeviceMemoryResource` - GPU device memory +- `Buffer.copy_to(dst, stream=stream)` - Async memory copy +- `Program`, `LaunchConfig`, `launch` - Kernel compilation and execution + +### From `numpy`: + +- `np.from_dlpack()` - Zero-copy view of pinned memory buffers + +## Requirements + +- CUDA Toolkit 13.0+ +- Python 3.10+ +- `cuda-python`, `cuda-core`, `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python streamingCopyComputeOverlap.py +``` + +## Expected Output + +``` +============================================================ +Streaming Copy + Compute Overlap +Using pure cuda.core APIs +============================================================ + +Device: NVIDIA GeForce RTX XXXX +Kernel compiled [OK] + +Problem size: 16,000,000 elements (61 MB) + +--- Sequential (no overlap) --- +Timeline: [H2D][Compute][D2H] +Time: X.XX ms (±X.XX) + +--- Streamed (with overlap) --- +Stream 0: [H2D][Compute][D2H] +Stream 1: [H2D][Compute][D2H] +Stream 2: [H2D][Compute][D2H] +... +2 streams: X.XX ms (±X.XX) - speedup: X.XXx +4 streams: X.XX ms (±X.XX) - speedup: X.XXx +8 streams: X.XX ms (±X.XX) - speedup: X.XXx + +============================================================ +Key: Pinned memory + multiple streams = overlap transfers with compute + +Note: Speedup depends on hardware characteristics. This technique +benefits most when transfer time is significant relative to compute. +============================================================ +``` + +## See Also + +- [cuda.core Documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CUDA Streams Best Practices](https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html#overlapping-data-transfers) diff --git a/samples/streamingCopyComputeOverlap/requirements.txt b/samples/streamingCopyComputeOverlap/requirements.txt new file mode 100644 index 00000000000..0b19f485db2 --- /dev/null +++ b/samples/streamingCopyComputeOverlap/requirements.txt @@ -0,0 +1,6 @@ +# Streaming Copy Compute Overlap Sample Requirements +# Requires Python 3.10 or newer + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 diff --git a/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py b/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py new file mode 100644 index 00000000000..efa7802a324 --- /dev/null +++ b/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py @@ -0,0 +1,308 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2"] +# /// + +""" +Streaming Copy + Compute Overlap + +Demonstrates how to overlap memory transfers with kernel computation using +CUDA streams to maximize GPU utilization. + +Uses pure cuda.core APIs: + - Device, Stream for device and stream management + - PinnedMemoryResource, DeviceMemoryResource for memory allocation + - Buffer.copy_to() for async memory copies + - Program, LaunchConfig, launch for kernel compilation and execution +""" + +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import ( + Device, + DeviceMemoryResource, + EventOptions, + LaunchConfig, + PinnedMemoryResource, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Install with: pip install -r requirements.txt") + sys.exit(1) + + +# CUDA Kernel - compute-intensive vector operation (grid-stride loop) +VECTOR_SCALE_KERNEL = r""" +extern "C" __global__ +void vector_scale(const float* input, float* output, float scale, size_t N) { + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + size_t stride = (size_t)gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride) { + float val = input[i] * scale; + // Add compute work to make kernel non-trivial + for (int j = 0; j < 50; j++) { + val = sqrtf(val * val + 1.0f); + } + output[i] = val; + } +} +""" + + +def buffer_to_numpy(buffer, n_elements): + """Create numpy view of cuda.core Buffer via DLPack.""" + return np.from_dlpack(buffer).view(np.float32).reshape(n_elements) + + +def main(): + print("=" * 60) + print("Streaming Copy + Compute Overlap") + print("Using pure cuda.core APIs") + print("=" * 60) + + # Initialize device + device = Device(0) + device.set_current() + print() + print_gpu_info(device) + + # Compile kernel + arch = f"sm_{device.arch}" + program = Program(VECTOR_SCALE_KERNEL, code_type="c++", options=ProgramOptions(arch=arch)) + kernel = program.compile(target_type="cubin").get_kernel("vector_scale") + print("Kernel compiled [OK]") + + # Parameters + N = 16_000_000 # 16M elements + n_bytes = N * 4 + scale = 2.5 + n_runs = 10 + + print(f"\nProblem size: {N:,} elements ({n_bytes / 1024 / 1024:.0f} MB)") + + # Create memory resources + pinned_mr = PinnedMemoryResource() + device_mr = DeviceMemoryResource(device.device_id) + default_stream = device.create_stream() + + # ========================================================================= + # Sequential Execution + # ========================================================================= + print("\n--- Sequential (no overlap) ---") + print("Timeline: [H2D][Compute][D2H]") + + h_in = h_out = d_in = d_out = None + try: + # Pre-allocate buffers + h_in = pinned_mr.allocate(n_bytes, stream=default_stream) + h_out = pinned_mr.allocate(n_bytes, stream=default_stream) + d_in = device_mr.allocate(n_bytes, stream=default_stream) + d_out = device_mr.allocate(n_bytes, stream=default_stream) + # Sync before numpy access (numpy operations aren't stream ordered) + default_stream.sync() + + # Initialize input + np_in = buffer_to_numpy(h_in, N) + np_in[:] = np.random.rand(N).astype(np.float32) * 100 + + config = LaunchConfig(grid=((N + 255) // 256,), block=(256,)) + event_opts = EventOptions(timing_enabled=True) + + # Warm up + h_in.copy_to(d_in, stream=default_stream) + launch( + default_stream, + config, + kernel, + d_in, + d_out, + np.float32(scale), + np.uint64(N), + ) + d_out.copy_to(h_out, stream=default_stream) + default_stream.sync() + + # Benchmark with CUDA events + times = [] + for _ in range(n_runs): + start_ev = device.create_event(options=event_opts) + end_ev = device.create_event(options=event_opts) + default_stream.record(start_ev) + h_in.copy_to(d_in, stream=default_stream) # Async H2D + launch( + default_stream, + config, + kernel, + d_in, + d_out, + np.float32(scale), + np.uint64(N), + ) + d_out.copy_to(h_out, stream=default_stream) # Async D2H + default_stream.record(end_ev) + default_stream.sync() + times.append(end_ev - start_ev) + + seq_time = np.mean(times) + print(f"Time: {seq_time:.2f} ms (±{np.std(times):.2f})") + + # Verification: compute expected on CPU and compare + default_stream.sync() + np_out = buffer_to_numpy(h_out, N) + expected = np_in.astype(np.float32) * scale + for _ in range(50): + expected = np.sqrt(expected * expected + 1.0).astype(np.float32) + if np.allclose(np_out, expected, rtol=1e-4, atol=1e-4): + print("Verification: PASSED") + else: + print("Verification: FAILED") + finally: + for buf in (h_in, h_out, d_in, d_out): + if buf is not None: + buf.close() + default_stream.close() + + # ========================================================================= + # Streamed Execution + # ========================================================================= + print("\n--- Streamed (with overlap) ---") + print("Stream 0: [H2D][Compute][D2H]") + print("Stream 1: [H2D][Compute][D2H]") + print("Stream 2: [H2D][Compute][D2H]") + print("...") + + for n_streams in [2, 4, 8]: + chunk_size = N // n_streams + chunk_bytes = chunk_size * 4 + + # Create streams + streams = [device.create_stream() for _ in range(n_streams)] + + # Pre-allocate per-stream buffers + h_ins, h_outs, d_ins, d_outs = [], [], [], [] + try: + for i in range(n_streams): + h_ins.append(pinned_mr.allocate(chunk_bytes, stream=streams[i])) + h_outs.append(pinned_mr.allocate(chunk_bytes, stream=streams[i])) + d_ins.append(device_mr.allocate(chunk_bytes, stream=streams[i])) + d_outs.append(device_mr.allocate(chunk_bytes, stream=streams[i])) + + # Initialize input data + for i in range(n_streams): + streams[i].sync() + np_view = buffer_to_numpy(h_ins[i], chunk_size) + np_view[:] = np.random.rand(chunk_size).astype(np.float32) * 100 + + chunk_config = LaunchConfig(grid=((chunk_size + 255) // 256,), block=(256,)) + + # Warm up + for i in range(n_streams): + h_ins[i].copy_to(d_ins[i], stream=streams[i]) + launch( + streams[i], + chunk_config, + kernel, + d_ins[i], + d_outs[i], + np.float32(scale), + np.uint64(chunk_size), + ) + d_outs[i].copy_to(h_outs[i], stream=streams[i]) + for stream in streams: + stream.sync() + + # Benchmark with CUDA events (use stream 0 for timing) + times = [] + event_opts = EventOptions(timing_enabled=True) + for _ in range(n_runs): + start_ev = device.create_event(options=event_opts) + end_ev = device.create_event(options=event_opts) + streams[0].record(start_ev) + + # Issue all operations - they overlap across streams + for i in range(n_streams): + h_ins[i].copy_to(d_ins[i], stream=streams[i]) # Async H2D + launch( + streams[i], + chunk_config, + kernel, + d_ins[i], + d_outs[i], + np.float32(scale), + np.uint64(chunk_size), + ) + d_outs[i].copy_to(h_outs[i], stream=streams[i]) # Async D2H + + # Wait for all streams, record end on stream 0 + for stream in streams: + stream.sync() + streams[0].record(end_ev) + streams[0].sync() + times.append(end_ev - start_ev) + + avg = np.mean(times) + speedup = seq_time / avg + print(f"{n_streams} streams: {avg:.2f} ms (±{np.std(times):.2f}) - speedup: {speedup:.2f}x") + + # Verification (streamed): concatenate chunks and compare to expected + for s in streams: + s.sync() + out_chunks = [buffer_to_numpy(h_outs[i], chunk_size) for i in range(n_streams)] + in_chunks = [buffer_to_numpy(h_ins[i], chunk_size) for i in range(n_streams)] + np_out = np.concatenate(out_chunks) + np_in = np.concatenate(in_chunks) + expected = np_in.astype(np.float32) * scale + for _ in range(50): + expected = np.sqrt(expected * expected + 1.0).astype(np.float32) + if not np.allclose(np_out, expected, rtol=1e-4, atol=1e-4): + print(f" Verification: FAILED for {n_streams} streams") + finally: + for buf in h_ins + h_outs + d_ins + d_outs: + buf.close() + for s in streams: + s.close() + + print("\n" + "=" * 60) + print("Key: Pinned memory + multiple streams = overlap transfers with compute") + print("\nNote: Speedup depends on hardware characteristics. This technique") + print("benefits most when transfer time is significant relative to compute.") + print("=" * 60) + + +if __name__ == "__main__": + main() diff --git a/samples/systemInfo/README.md b/samples/systemInfo/README.md new file mode 100644 index 00000000000..2e93196418d --- /dev/null +++ b/samples/systemInfo/README.md @@ -0,0 +1,152 @@ +# Sample: System Information Query (Python) + +## Description + +This sample demonstrates how to inspect the CUDA driver, NVML, and every +installed GPU through the +[`cuda.core.system`](https://nvidia.github.io/cuda-python/cuda-core/latest/) +module. + +`cuda.core.system` wraps the NVIDIA Management Library (NVML) and can be +imported without CUDA being installed or initialized, so it is useful as a +lightweight pre-flight check before any CUDA context is created. The script +prints driver and NVML versions, the current process name, per-device +metadata (name, compute capability, architecture, memory, PCI info, +temperature, performance state), and, on multi-GPU systems, the topology +and peer-to-peer capabilities between each pair of devices. + +## What You'll Learn + +- Querying CUDA driver and NVML versions with `cuda.core.system` +- Enumerating GPUs without creating a CUDA context +- Reading per-device metadata exposed by NVML (name, UUID, memory usage, + temperature, performance state) +- Inspecting GPU-to-GPU topology and peer-to-peer (P2P) capabilities + +## Key Libraries + +- [`cuda.core.system`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Python wrapper around NVML + +## Key APIs + +From `cuda.core.system`: + +- `get_driver_version()`, `get_driver_version_full()`, `get_driver_branch()` - CUDA driver version tuple and branch string +- `get_nvml_version()` - NVML library version +- `get_num_devices()` - number of GPUs visible to NVML +- `get_process_name(pid)` - process name for a given PID +- `Device(index=...)` - NVML-backed device handle (no CUDA context required) + - `name`, `uuid`, `cuda_compute_capability`, `arch`, `brand` + - `memory_info` (`total`, `used`, `free`) + - `pci_info` (`domain`, `bus`, `device`, `bus_id`) + - `temperature.sensor(TemperatureSensors.TEMPERATURE_GPU)` + - `performance_state` +- `get_topology_common_ancestor(dev0, dev1)` - `GpuTopologyLevel` between two devices +- `get_p2p_status(dev0, dev1, GpuP2PCapsIndex.P2P_CAPS_INDEX_READ)` - peer-access capability between two devices + +Import stable symbols from the top-level `cuda.core` package (not `cuda.core.experimental`). + +## Requirements + +1. **NVIDIA Graphics Card** with CUDA support +2. **CUDA Drivers** installed on your system +3. **CUDA Toolkit** installed on your system +4. **Python 3.12 or newer** + +### Hardware + +- One or more NVIDIA GPUs +- Driver compatible with `cuda-python` 13.x + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/1_GettingStarted/systemInfo +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/1_GettingStarted/systemInfo +python systemInfo.py +``` + +### Skip topology queries + +Useful on machines with only one GPU or to shorten the output: + +```bash +python systemInfo.py --no-topology +``` + +## Expected Output + +Output varies with your hardware. On a machine with two GPUs you should see +something like: + +``` +====================================================================== +Driver / NVML +====================================================================== +CUDA driver version: 13.2 +CUDA driver version (full): (13, 2, 0) +NVML version: (13, 595, 58, 3) +Driver branch: r595_88 +Current process: /usr/bin/python + +====================================================================== +Devices detected: 2 +====================================================================== + +-- Device 0 -- +Name: +UUID: ... +Compute capability: 8.9 +Architecture: ADA +Brand: BRAND_GEFORCE +Memory: total=23.99 GiB, used=960.00 KiB, free=23.52 GiB +PCI: domain=0000 bus=41 device=00 id=00000000:41:00.0 +Temperature (GPU sensor): 47 C +Performance state: + +... + +====================================================================== +GPU topology and peer-to-peer +====================================================================== +Device 0 <-> Device 1: topology=TOPOLOGY_HOSTBRIDGE, p2p_read=..., p2p_write=... + +Done +``` + +**Note:** Device names, compute capability, temperatures, and topology +details will vary based on your GPUs and system. + +## Files + +- `systemInfo.py` - Python implementation using `cuda.core.system` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core.system` API reference](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html) +- [NVML reference](https://docs.nvidia.com/deploy/nvml-api/) diff --git a/samples/systemInfo/requirements.txt b/samples/systemInfo/requirements.txt new file mode 100644 index 00000000000..13628c0b308 --- /dev/null +++ b/samples/systemInfo/requirements.txt @@ -0,0 +1,4 @@ +# System Information Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 diff --git a/samples/systemInfo/systemInfo.py b/samples/systemInfo/systemInfo.py new file mode 100644 index 00000000000..edfdde5ba70 --- /dev/null +++ b/samples/systemInfo/systemInfo.py @@ -0,0 +1,199 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0"] +# /// + +""" +System Information via cuda.core.system (NVML) + +Demonstrates the ``cuda.core.system`` module, which wraps NVIDIA Management +Library (NVML) functionality. + +This sample prints: + * Driver and NVML versions + * Current process name + * Per-device: name, UUID, compute capability / arch, PCI info, memory usage, + temperature, performance state + * GPU-to-GPU topology and peer-to-peer status (when more than one GPU) +""" + +import os +import sys + +try: + from cuda.core import system + from cuda.core.system import CUDA_BINDINGS_NVML_IS_COMPATIBLE + from cuda.core.system.typing import GpuP2PCapsIndex +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def print_header(title: str) -> None: + print() + print("=" * 70) + print(title) + print("=" * 70) + + +def format_bytes(nbytes: int) -> str: + """Format a byte count as a human-readable string.""" + units = ["B", "KiB", "MiB", "GiB", "TiB"] + size = float(nbytes) + for unit in units: + if size < 1024.0: + return f"{size:.2f} {unit}" + size /= 1024.0 + return f"{size:.2f} PiB" + + +def print_driver_info() -> None: + print_header("Driver / NVML") + major, minor = system.get_user_mode_driver_version() + print(f"CUDA driver version (user-mode): {major}.{minor}") + if CUDA_BINDINGS_NVML_IS_COMPATIBLE: + kmd = system.get_kernel_mode_driver_version() + print(f"CUDA driver version (kernel-mode): {'.'.join(str(x) for x in kmd)}") + print(f"NVML version: {system.get_nvml_version()}") + try: + print(f"Driver branch: {system.get_driver_branch()}") + except Exception as e: + print(f"Driver branch: unavailable ({e})") + else: + print("NVML bindings are not compatible with this driver; device info will be limited.") + print(f"Current process: {system.get_process_name(os.getpid())}") + + +def print_device_info(device: "system.Device") -> None: + print(f"\n-- Device {device.index} --") + print(f"Name: {device.name}") + print(f"UUID: {device.uuid}") + try: + cc_major, cc_minor = device.cuda_compute_capability + print(f"Compute capability: {cc_major}.{cc_minor}") + except Exception as e: + print(f"Compute capability: unavailable ({e})") + try: + print(f"Architecture: {device.arch.name}") + except Exception as e: + print(f"Architecture: unavailable ({e})") + try: + print(f"Brand: {device.brand}") + except Exception as e: + print(f"Brand: unavailable ({e})") + + # Memory + try: + mem = device.memory_info + print(f"Memory: total={format_bytes(mem.total)}, used={format_bytes(mem.used)}, free={format_bytes(mem.free)}") + except Exception as e: + print(f"Memory: unavailable ({e})") + + # PCI + try: + pci = device.pci_info + print(f"PCI: domain={pci.domain:04x} bus={pci.bus:02x} device={pci.device:02x} id={pci.bus_id}") + except Exception as e: + print(f"PCI: unavailable ({e})") + + # Temperature (GPU sensor) + try: + temp_c = device.temperature.get_sensor() + print(f"Temperature (GPU sensor): {temp_c} C") + except Exception as e: + print(f"Temperature: unavailable ({e})") + + # Performance state + try: + pstate = device.performance_state + print(f"Performance state: {pstate}") + except Exception as e: + print(f"Performance state: unavailable ({e})") + + +def print_topology(devices: list) -> None: + if len(devices) < 2: + return + print_header("GPU topology and peer-to-peer") + for i, d0 in enumerate(devices): + for d1 in devices[i + 1 :]: + try: + level = system.get_topology_common_ancestor(d0, d1) + level_name = level.name + except Exception as e: + level_name = f"unavailable ({e})" + try: + read = system.get_p2p_status(d0, d1, GpuP2PCapsIndex.READ) + write = system.get_p2p_status(d0, d1, GpuP2PCapsIndex.WRITE) + read_name = read.name + write_name = write.name + except Exception as e: + read_name = write_name = f"unavailable ({e})" + print( + f"Device {d0.index} <-> Device {d1.index}: " + f"topology={level_name}, p2p_read={read_name}, p2p_write={write_name}" + ) + + +def main() -> int: + import argparse + + parser = argparse.ArgumentParser(description="Print CUDA system / NVML information via cuda.core.system") + parser.add_argument( + "--no-topology", + action="store_true", + help="Skip cross-device topology/P2P queries", + ) + args = parser.parse_args() + + print_driver_info() + + num_devices = system.get_num_devices() + print_header(f"Devices detected: {num_devices}") + if num_devices == 0: + print("No CUDA-capable devices found.") + return 0 + if not CUDA_BINDINGS_NVML_IS_COMPATIBLE: + print("NVML is not compatible with the installed driver; skipping device detail.") + return 0 + + devices = [system.Device(index=i) for i in range(num_devices)] + for device in devices: + print_device_info(device) + + if not args.no_topology: + print_topology(devices) + + print("\nDone") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/tmaTensorMap/README.md b/samples/tmaTensorMap/README.md new file mode 100644 index 00000000000..2260a0c47d0 --- /dev/null +++ b/samples/tmaTensorMap/README.md @@ -0,0 +1,138 @@ +# tmaTensorMap (Python) + +## Description + +This sample demonstrates how to use Tensor Memory Accelerator (TMA) +descriptors with `cuda.core` on Hopper and later GPUs (compute +capability >= 9.0). TMA enables efficient bulk data movement between +global and shared memory using hardware-managed tensor map +descriptors, which are a key building block for modern GEMM kernels +and large shared-memory tile loads. + +The sample: + +1. Creates a TMA tiled descriptor from a CuPy device array via + `StridedMemoryView.from_any_interface(...).as_tensor_map(...)`. +2. Passes the descriptor by value (as `__grid_constant__`) to a + kernel that uses libcudacxx TMA/barrier wrappers to bulk-load a + tile into shared memory, then copies it out to verify correctness. +3. Reuses the same descriptor against a new source tensor with + `replace_address()` to avoid rebuilding it. + +## What You'll Learn + +- Creating a TMA descriptor from a strided device tensor via + `StridedMemoryView.as_tensor_map(box_dim=...)` +- Passing a tensor map to a kernel by value using + `__grid_constant__` +- Using libcudacxx (`cuda/barrier`) to coordinate TMA loads with a + block-scoped barrier +- Reusing a descriptor against a new source buffer via + `tensor_map.replace_address(new_tensor)` +- Compiling a kernel to CUBIN for a specific target arch so Hopper + features are available +- Using `cuda.pathfinder` to locate the CUDA toolkit include directory + CCCL headers and libcudacxx + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - compilation, launching, and tensor-map helpers +- `cuda.pathfinder` - locate the CUDA toolkit include directory +- `cupy` - allocate and fill device tensors +- `numpy` - scalar kernel arguments + +## Key APIs + +### From `cuda.core` + +- `StridedMemoryView.from_any_interface(tensor, stream_ptr=-1)` - build a typed view from any DLPack/CUDA-array-interface tensor +- `StridedMemoryView.as_tensor_map(box_dim=(...))` - produce a TMA descriptor for the given tile shape +- `tensor_map.replace_address(new_tensor)` - retarget an existing descriptor at a new tensor +- `Program(code, code_type="c++", options=ProgramOptions(std="c++17", arch="sm_90", include_path=[...]))` - compile a C++ kernel against libcudacxx +- `program.compile("cubin")` - produce a CUBIN so `__grid_constant__` and TMA intrinsics are fully supported +- `launch(stream, config, kernel, tensor_map, ...)` - pass the TMA descriptor as a kernel argument + +### From `cuda.pathfinder` + +- `get_cuda_path_or_home()` - return the detected CUDA toolkit root for locating `include/cccl` + +### From `cuda_samples_utils` + +- `print_gpu_info()` - print device name and compute capability + +## Requirements + +### Hardware + +- NVIDIA Hopper or newer GPU with Compute Capability 9.0 or higher (H100, H200, B200, ...) +- On GPUs older than Hopper the sample exits cleanly without running the kernel +- Minimum GPU memory: 512 MB + +### Software + +- CUDA Toolkit 13.0 or newer with libcudacxx (cccl) headers +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +cd /path/to/cuda-samples/python/2_CoreConcepts/tmaTensorMap +pip install -r requirements.txt +``` + +The `requirements.txt` installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd cuda-samples/python/2_CoreConcepts/tmaTensorMap +python tmaTensorMap.py +``` + +### With custom parameters + +```bash +# Larger tensor (must be a multiple of the 128-element tile) +python tmaTensorMap.py --elements 8192 + +# Use a specific GPU +python tmaTensorMap.py --device 1 +``` + +## Expected Output + +On a Hopper (sm_90) GPU: + +``` +Device: NVIDIA H100 PCIe +Compute Capability: 9.0 + +TMA copy verified: 1024 elements across 8 tiles +replace_address verified: descriptor reused with new source tensor +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `tmaTensorMap.py` - Python implementation using `cuda.core` TMA APIs +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [TMA in the CUDA C++ Programming Guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#tensor-memory-accelerator) +- [`cuda::barrier` reference](https://nvidia.github.io/cccl/libcudacxx/extended_api/synchronization_primitives/barrier.html) diff --git a/samples/tmaTensorMap/requirements.txt b/samples/tmaTensorMap/requirements.txt new file mode 100644 index 00000000000..c33f5dd8d9f --- /dev/null +++ b/samples/tmaTensorMap/requirements.txt @@ -0,0 +1,4 @@ +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=1.24.0 diff --git a/samples/tmaTensorMap/tmaTensorMap.py b/samples/tmaTensorMap/tmaTensorMap.py new file mode 100644 index 00000000000..50dffa4e5e4 --- /dev/null +++ b/samples/tmaTensorMap/tmaTensorMap.py @@ -0,0 +1,278 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=1.24.0"] +# /// + +""" +TMA Tensor Map with cuda.core + +This sample demonstrates how to use Tensor Memory Accelerator (TMA) +descriptors with cuda.core on Hopper and later GPUs (compute +capability >= 9.0). TMA enables efficient bulk data movement between +global and shared memory using hardware-managed tensor map +descriptors. + +The sample: + + 1. Creates a TMA tiled descriptor from a CuPy device array via + ``StridedMemoryView.from_any_interface(...).as_tensor_map(...)``. + 2. Passes the descriptor by value (as ``__grid_constant__``) to a + kernel that uses libcudacxx TMA/barrier wrappers to bulk-load a + tile into shared memory. + 3. Reuses the same descriptor against a new source tensor with + ``replace_address()`` to avoid rebuilding it. + +On GPUs older than Hopper (sm < 90), the sample prints a diagnostic +and exits cleanly. + +Ported from ``cuda_core/examples/tma_tensor_map.py`` in the +`cuda-python` repository. +""" + +import os +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) + +try: + import cupy as cp + import numpy as np + from cuda_samples_utils import print_gpu_info + + from cuda.core import ( + Device, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) + from cuda.core.utils import StridedMemoryView + from cuda.pathfinder import find_nvidia_header_directory, get_cuda_path_or_home +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +TILE_SIZE = 128 # elements per tile, must match the kernel constant + +KERNEL_SRC = r""" +#include + +// Minimal definition of the 128-byte opaque tensor-map struct. +struct __align__(64) TensorMap { unsigned long long opaque[16]; }; + +static constexpr int TILE_SIZE = 128; +using TmaBarrier = cuda::barrier; + +extern "C" +__global__ void tma_copy( + const __grid_constant__ TensorMap tensor_map, + float* output, + int N) +{ + __shared__ __align__(128) float smem[TILE_SIZE]; + __shared__ TmaBarrier bar; + + const int tid = threadIdx.x; + const int tile_start = blockIdx.x * TILE_SIZE; + + if (tid == 0) + { + init(&bar, 1); + } + __syncthreads(); + + if (tid == 0) + { + cuda::device::experimental::cp_async_bulk_tensor_1d_global_to_shared( + smem, + reinterpret_cast(&tensor_map), + tile_start, + bar); + bar.wait(cuda::device::barrier_arrive_tx(bar, 1, TILE_SIZE * sizeof(float))); + } + __syncthreads(); + + if (tid < TILE_SIZE) + { + const int idx = tile_start + tid; + if (idx < N) + output[idx] = smem[tid]; + } +} +""" + + +def _get_cccl_include_paths() -> list: + """Locate the CUDA toolkit and libcudacxx (cccl) include directories. + + ``cuda.pathfinder.find_nvidia_header_directory`` searches pip-installed + CUDA packages, conda environments, and the standard system install + locations, so this works without requiring ``CUDA_PATH`` or + ``CUDA_HOME``. ``get_cuda_path_or_home`` is used as a final fallback. + """ + include_path: list = [] + + # libcudacxx (cccl) - preferred, provides used below. + try: + cccl_dir = find_nvidia_header_directory("cccl") + if cccl_dir and os.path.isdir(cccl_dir): + include_path.append(cccl_dir) + except Exception: # noqa: S110 - fallback probes continue below + pass + + # CUDA runtime headers - needed for the CUtensorMap driver type. + try: + cudart_dir = find_nvidia_header_directory("cudart") + if cudart_dir and os.path.isdir(cudart_dir) and cudart_dir not in include_path: + include_path.append(cudart_dir) + except Exception: # noqa: S110 - fallback probes continue below + pass + + # Fallback: use CUDA_PATH / CUDA_HOME when pathfinder comes up empty. + if not include_path: + cuda_path = get_cuda_path_or_home() + if cuda_path is not None: + cuda_include = os.path.join(cuda_path, "include") + if os.path.isdir(cuda_include): + include_path.append(cuda_include) + cccl_include = os.path.join(cuda_include, "cccl") + if os.path.isdir(cccl_include): + include_path.insert(0, cccl_include) + + if not include_path: + print( + "Could not locate CUDA toolkit headers.\n" + "Tried cuda.pathfinder (pip/conda/system installs) and " + "CUDA_PATH / CUDA_HOME; none succeeded.\n" + "Set CUDA_HOME to your toolkit root (containing include/cccl " + "and include/cuda_runtime.h) and retry.", + file=sys.stderr, + ) + sys.exit(1) + return include_path + + +def main() -> int: + import argparse + + parser = argparse.ArgumentParser(description="Use a TMA tensor map to bulk-copy data on Hopper+ GPUs") + parser.add_argument( + "--elements", + type=int, + default=1024, + help="Total number of float32 elements (must be a multiple of 128)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + if args.elements % TILE_SIZE != 0: + print(f"--elements must be a multiple of TILE_SIZE={TILE_SIZE}") + return 1 + + dev = Device(args.device) + print_gpu_info(dev) + + arch = dev.compute_capability + if arch < (9, 0): + print( + f"\nTMA requires compute capability >= 9.0 (Hopper or later); " + f"this device is {arch.major}.{arch.minor}. Exiting cleanly." + ) + return 0 + + dev.set_current() + include_path = _get_cccl_include_paths() + + # Compile with the CUBIN code type to target the exact device arch. + prog = Program( + KERNEL_SRC, + code_type="c++", + options=ProgramOptions( + std="c++17", + arch=f"sm_{dev.arch}", + include_path=include_path, + ), + ) + mod = prog.compile("cubin") + kernel = mod.get_kernel("tma_copy") + + # (1) Prepare input data and verify the initial TMA copy. + n = args.elements + src = cp.arange(n, dtype=cp.float32) + output = cp.zeros(n, dtype=cp.float32) + dev.sync() # CuPy uses its own stream + + tensor_map = StridedMemoryView.from_any_interface(src, stream_ptr=-1).as_tensor_map(box_dim=(TILE_SIZE,)) + + n_tiles = n // TILE_SIZE + config = LaunchConfig(grid=n_tiles, block=TILE_SIZE) + launch( + dev.default_stream, + config, + kernel, + tensor_map, + output.data.ptr, + np.int32(n), + ) + dev.sync() + + if not cp.array_equal(output, src): + print("TMA copy produced incorrect results") + return 1 + print(f"TMA copy verified: {n} elements across {n_tiles} tiles") + + # (2) Demonstrate replace_address() without rebuilding the descriptor. + replacement = cp.full(n, fill_value=42.0, dtype=cp.float32) + dev.sync() + + tensor_map.replace_address(replacement) + + output2 = cp.zeros(n, dtype=cp.float32) + launch( + dev.default_stream, + config, + kernel, + tensor_map, + output2.data.ptr, + np.int32(n), + ) + dev.sync() + + if not cp.array_equal(output2, replacement): + print("replace_address produced incorrect results") + return 1 + print("replace_address verified: descriptor reused with new source tensor") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/vectorAdd/README.md b/samples/vectorAdd/README.md new file mode 100644 index 00000000000..8abc4728e33 --- /dev/null +++ b/samples/vectorAdd/README.md @@ -0,0 +1,130 @@ +# Sample: Vector Addition (Python) + +## Description + +Run your first GPU kernel: add two vectors element-wise on the GPU using the [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) API with runtime compilation. + +## What You'll Learn + +- Writing CUDA kernels in C++ with template support +- Runtime compilation of CUDA kernels from Python +- Using `cuda.core` for device management, programs, and launches +- Configuring and launching kernels with grid and block dimensions +- Using CuPy for GPU memory management +- Verifying GPU results against CPU computation + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) — Pythonic access to CUDA runtime and compilation +- `cupy` — GPU array library for Python + +## Key APIs + +### From `cuda.core` + +- `Device` — Initialize and manage CUDA device +- `Program` — Create program from kernel source code +- `ProgramOptions` — Set compilation options (C++ standard, architecture) +- `LaunchConfig` — Configure kernel launch parameters +- `launch` — Execute kernel on specified stream + +Import stable symbols from the top-level package (not `cuda.core.experimental`). See the [cuda.core documentation](https://nvidia.github.io/cuda-python/cuda-core/latest/). + +### From CuPy + +- `cp.random.rand()` — Generate random arrays on GPU +- `cp.empty()` — Allocate uninitialized GPU arrays +- `cp.allclose()` — Verify results with tolerance + +### From `cuda_samples_utils` + +- `verify_array_result()` — Verify computation results + +## Kernel Techniques + +- **1D Grid-Stride Loop** — Handle arbitrary array sizes with fixed grid +- **Template Programming** — Generic kernel for different data types +- **Bounds Checking** — Prevent out-of-bounds memory access + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- Minimum GPU memory: 512 MB + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +Install the required packages from requirements.txt: + +```bash +cd /path/to/cuda-samples/python/1_GettingStarted/vectorAdd +pip install -r requirements.txt +``` + +The requirements.txt installs: + +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## How to Run + +### Basic usage + +```bash +cd samples/python/1_GettingStarted/vectorAdd +python vectorAdd.py +``` + +### With custom parameters + +```bash +# Custom vector size +python vectorAdd.py --elements 1000000 + +# Use specific GPU +python vectorAdd.py --device 1 + +# Skip verification for benchmarking +python vectorAdd.py --no-verify +``` + +## Expected Output + +``` +[Vector addition using CUDA Core API] +Device: +Compute Capability: sm_ +Compiling kernel 'vectorAdd'... +Kernel compiled successfully +[Vector addition of 50000 elements] +CUDA kernel launch with 196 blocks of 256 threads +Verifying result... +Test PASSED + +Done +``` + +**Note:** Device name and compute capability will vary based on your GPU. + +## Files + +- `vectorAdd.py` — Python implementation using cuda.core API +- `README.md` — This file +- `requirements.txt` — Sample dependencies +- `../../Utilities/cuda_samples_utils.py` — Common utilities (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [cuda.core API](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/vectorAdd/requirements.txt b/samples/vectorAdd/requirements.txt new file mode 100644 index 00000000000..46d588ce780 --- /dev/null +++ b/samples/vectorAdd/requirements.txt @@ -0,0 +1,5 @@ +# Vector Addition Sample Requirements + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/vectorAdd/vectorAdd.py b/samples/vectorAdd/vectorAdd.py new file mode 100755 index 00000000000..ec1eca0cf96 --- /dev/null +++ b/samples/vectorAdd/vectorAdd.py @@ -0,0 +1,192 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Vector Addition using CUDA Core API + +This sample demonstrates element-wise vector addition: C = A + B +using cuda.core for runtime compilation and kernel launch. +""" + +import sys +from pathlib import Path + +# Add parent directory to path to import utilities +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) +from cuda_samples_utils import verify_array_result + +try: + import cupy as cp + + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# CUDA kernel source code +VECTOR_ADD_KERNEL = """ +/** + * CUDA Kernel for vector addition + * Computes the vector addition of A and B into C. + */ +template +__global__ void vectorAdd(const T *A, const T *B, T *C, int numElements) +{ + int i = blockDim.x * blockIdx.x + threadIdx.x; + + if (i < numElements) + { + C[i] = A[i] + B[i]; + } +} +""" + + +def vector_add_cuda_core(num_elements=50000, device_id=0, verify=True): + """ + Perform vector addition using cuda.core API. + + Parameters + ---------- + num_elements : int + Number of elements in each vector + device_id : int + CUDA device ID to use + verify : bool + Whether to verify the result + + Returns + ------- + bool + True if successful, False otherwise + """ + try: + # Initialize device + print("[Vector addition using CUDA Core API]") + device = Device(device_id) + device.set_current() + + print(f"Device: {device.name}") + print(f"Compute Capability: sm_{device.arch}") + + stream = device.create_stream() + + # Compile kernel + print("Compiling kernel 'vectorAdd'...") + program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") + program = Program(VECTOR_ADD_KERNEL, code_type="c++", options=program_options) + module = program.compile("cubin", name_expressions=("vectorAdd",)) + kernel = module.get_kernel("vectorAdd") + print("Kernel compiled successfully") + + # Allocate and initialize vectors + print(f"[Vector addition of {num_elements} elements]") + dtype = cp.float32 + + a = cp.random.rand(num_elements).astype(dtype) + b = cp.random.rand(num_elements).astype(dtype) + c = cp.empty(num_elements, dtype=dtype) + + # Synchronize before kernel launch + device.sync() + + # Configure and launch kernel + threads_per_block = 256 + blocks_per_grid = (num_elements + threads_per_block - 1) // threads_per_block + + print(f"CUDA kernel launch with {blocks_per_grid} blocks of {threads_per_block} threads") + + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + + # Launch kernel + launch( + stream, + config, + kernel, + a.data.ptr, + b.data.ptr, + c.data.ptr, + cp.int32(num_elements), + ) + stream.sync() + + # Verify result + if verify: + print("Verifying result...") + expected = a + b + if not verify_array_result(c, expected): + return False + + return True + + except Exception as e: + print(f"Error: {e}") + import traceback + + traceback.print_exc() + return False + + +def main(): + """ + Main entry point for the vector addition sample. + """ + import argparse + + parser = argparse.ArgumentParser(description="Vector Addition using CUDA Core API") + parser.add_argument( + "--elements", + type=int, + default=50000, + help="Number of elements in vectors (default: 50000)", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device ID (default: 0)") + parser.add_argument("--no-verify", action="store_true", help="Skip result verification") + + args = parser.parse_args() + + if args.elements <= 0: + print("Error: Number of elements must be positive") + return 1 + + success = vector_add_cuda_core(num_elements=args.elements, device_id=args.device, verify=not args.no_verify) + + if success: + print("\nDone") + return 0 + else: + return 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 163ff70a997..19a698394f4 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -27,6 +27,7 @@ Targets: core Run cuda_core tests bindings Run cuda_bindings tests pathfinder Run cuda_pathfinder tests + samples Run samples tests (tests/samples) smoke Run meta-level smoke tests (tests/integration) Options: @@ -261,6 +262,14 @@ PY add_result "smoke" "${rc}" } +run_samples() { + echo "[tests] samples" + cd "${repo_root}" + run_pytest tests/samples + local rc=$? + add_result "samples" "${rc}" +} + case "${target}" in all) run_pathfinder @@ -273,6 +282,8 @@ case "${target}" in run_bindings ;; pathfinder) run_pathfinder ;; + samples) + run_samples ;; smoke) run_smoke ;; *) diff --git a/tests/samples/__init__.py b/tests/samples/__init__.py new file mode 100644 index 00000000000..e5725ea5a48 --- /dev/null +++ b/tests/samples/__init__.py @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 diff --git a/tests/samples/run_samples.py b/tests/samples/run_samples.py new file mode 100644 index 00000000000..cea13eb58df --- /dev/null +++ b/tests/samples/run_samples.py @@ -0,0 +1,442 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +""" +Sample test orchestrator for samples under ./samples/. + +``samples//.py``, applies per-sample overrides from +``tests/samples/test_args.json`` (same schema used in cuda-samples, plus a +``python`` sub-object for Python-specific CLI args / launcher), and executes +each sample in its own subprocess. + +Exit-code contract (matches cuda-samples): + 0 -> sample passed + 2 -> sample waived (missing dependency / unmet hardware requirement) + * -> sample failed + +The script can be invoked directly: + python tests/samples/run_samples.py [--samples-dir samples] [--config tests/samples/test_args.json] +""" + +from __future__ import annotations + +import argparse +import concurrent.futures +import json +import os +import re +import subprocess +import sys +import threading +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +# Default timeout per sample run (seconds). Match cuda-samples. +DEFAULT_TIMEOUT = 300 +EXIT_WAIVED = 2 +REPO_ROOT = Path(__file__).resolve().parent.parent.parent +DEFAULT_SAMPLES_DIR = REPO_ROOT / "samples" +DEFAULT_CONFIG = Path(__file__).resolve().parent / "test_args.json" + +_print_lock = threading.Lock() + + +def _safe_print(*args: Any, **kwargs: Any) -> None: + with _print_lock: + print(*args, **kwargs) + + +# --------------------------------------------------------------------------- +# Discovery +# --------------------------------------------------------------------------- + + +def discover_samples(samples_dir: Path) -> list[Path]: + """Return ``samples//.py`` for every sample directory. + + Only one Python entrypoint per sample is recognised, matching the + cuda-samples convention. The Utilities directory is excluded. + """ + samples: list[Path] = [] + for sample_dir in sorted(samples_dir.iterdir()): + if not sample_dir.is_dir() or sample_dir.name == "Utilities": + continue + entry = sample_dir / f"{sample_dir.name}.py" + if entry.is_file(): + samples.append(entry) + return samples + + +# --------------------------------------------------------------------------- +# Config + GPU detection +# --------------------------------------------------------------------------- + + +def load_config(config_path: Path) -> dict[str, Any]: + if not config_path.is_file(): + return {} + try: + with open(config_path, encoding="utf-8") as fh: + data = json.load(fh) + except json.JSONDecodeError as exc: + _safe_print(f"Warning: failed to parse {config_path}: {exc}") + return {} + if not isinstance(data, dict): + _safe_print(f"Warning: {config_path} must contain a JSON object") + return {} + # Drop any keys starting with '_' (used for comments). + return {k: v for k, v in data.items() if not k.startswith("_")} + + +def get_gpu_count() -> int: + """Return the visible CUDA GPU count, conservatively 0 on error. + + Matches cuda-samples/run_tests.py::get_gpu_count(): uses ``nvidia-smi -L`` + first and falls back to ``CUDA_VISIBLE_DEVICES``. + """ + try: + smi = subprocess.run( + ["nvidia-smi", "-L"], # noqa: S607 + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + text=True, + check=False, + ) + if smi.returncode == 0: + return sum( + 1 + for line in smi.stdout.splitlines() + if line.strip().lower().startswith("gpu ") + ) + except FileNotFoundError: + pass + except OSError: + pass + + visible = os.environ.get("CUDA_VISIBLE_DEVICES", "").strip() + if visible and visible.lower() not in {"no", "none"}: + return len([v for v in visible.split(",") if v]) + return 0 + + +# --------------------------------------------------------------------------- +# PEP 723 dep gating (reuse the helper that ships with cuda-bindings test +# infrastructure when available; otherwise fall back to a local parser so the +# runner stays usable without cuda-bindings installed). +# --------------------------------------------------------------------------- + +_DEP_NAME_RE = re.compile(r"[a-zA-Z0-9_-]+") +_PEP723_RE = re.compile( + r"(?m)^# /// (?P[a-zA-Z0-9-]+)$\s(?P(^#(| .*)$\s)+)^# ///$" +) + +# Aliases bridging PyPI distribution names declared in sample PEP 723 blocks +# and the install-name a conda/pixi environment provides. CI uses wheels where +# the names match exactly, so this map only fires in local pixi runs. Each +# entry maps a PyPI name to a list of alternative import names to try with +# ``importlib.import_module`` before declaring the dep missing. +_DEP_FALLBACK_IMPORTS: dict[str, tuple[str, ...]] = { + "cuda-python": ("cuda.bindings",), + "cuda-bindings": ("cuda.bindings",), + "cuda-core": ("cuda.core",), + "cuda-pathfinder": ("cuda.pathfinder",), + "cuda-cccl": ("cuda.cccl", "cccl"), + "cupy-cuda11x": ("cupy",), + "cupy-cuda12x": ("cupy",), + "cupy-cuda13x": ("cupy",), + "nvidia-nvjitlink": ("nvjitlink",), + "nvmath-python": ("nvmath",), + "cugraph-cu12": ("cugraph",), + "cugraph-cu13": ("cugraph",), + "cudf-cu12": ("cudf",), + "cudf-cu13": ("cudf",), +} + + +def _extract_pep723_dependencies(example: Path) -> list[str] | None: + """Return the dependency list declared via PEP 723, or ``None`` if absent.""" + content = example.read_text(encoding="utf-8") + match = _PEP723_RE.search(content) + if not match: + return None + metadata: dict[str, str] = {} + for raw in match.group("content").splitlines(): + line = raw.lstrip("# ").rstrip() + if not line: + continue + key, _, value = line.partition("=") + if not _: + continue + metadata[key.strip()] = value.strip() + deps_literal = metadata.get("dependencies") + if not deps_literal: + return None + try: + # The PEP 723 spec uses TOML semantics, but in practice the values + # are simple list-of-strings literals; eval keeps the runner aligned + # with the cuda-bindings helper without taking a TOML dependency. + result = eval(deps_literal, {"__builtins__": {}}) # noqa: S307 + except Exception: + return None + if not isinstance(result, list): + return None + return [str(item) for item in result] + + +def missing_dependencies(example: Path) -> list[str]: + """Return the subset of declared deps that are not importable as distributions. + + Returns an empty list if all declared deps are present, or if no PEP 723 + block exists (no gating to perform). + """ + deps = _extract_pep723_dependencies(example) + if not deps: + return [] + # Local imports keep top-level import cost down. + import importlib + import importlib.metadata + + missing: list[str] = [] + for spec in deps: + match = _DEP_NAME_RE.match(spec) + if match is None: + continue + name = match.group(0) + try: + importlib.metadata.distribution(name) + continue + except importlib.metadata.PackageNotFoundError: + pass + + # Strict distribution check missed it. Try the known alias imports so + # conda/pixi environments (which install under different distribution + # names than the PyPI wheels) don't waive every sample. + for module_name in _DEP_FALLBACK_IMPORTS.get(name, ()): + try: + importlib.import_module(module_name) + break + except ImportError: + continue + else: + missing.append(name) + return missing + + +# --------------------------------------------------------------------------- +# Run plan +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class RunPlan: + sample: Path + args: list[str] + launcher: list[str] + timeout: int + skip_reason: str | None = None + + +def _expand_env(value: str) -> str: + return os.path.expandvars(value) + + +def build_run_plan( + sample: Path, + config: dict[str, Any], + gpu_count: int, + timeout: int = DEFAULT_TIMEOUT, +) -> RunPlan: + """Combine config overrides + GPU availability into a concrete run plan. + + The returned plan carries either a ``skip_reason`` (sample must be + waived) or the command components to invoke. + """ + sample_cfg = config.get(sample.parent.name, {}) + + if sample_cfg.get("skip"): + return RunPlan(sample, [], [], timeout, skip_reason="skipped in test_args.json") + + required_gpus = int(sample_cfg.get("min_gpus", 1)) + if required_gpus > gpu_count: + return RunPlan( + sample, + [], + [], + timeout, + skip_reason=( + f"requires {required_gpus} GPU(s), only {gpu_count} available" + ), + ) + + python_cfg = sample_cfg.get("python", {}) + raw_args = python_cfg.get("args", []) or [] + raw_launcher = python_cfg.get("launcher", []) or [] + if not isinstance(raw_args, list) or not isinstance(raw_launcher, list): + return RunPlan( + sample, + [], + [], + timeout, + skip_reason="invalid config: 'args' and 'launcher' must be lists", + ) + + return RunPlan( + sample=sample, + args=[_expand_env(str(a)) for a in raw_args], + launcher=[_expand_env(str(a)) for a in raw_launcher], + timeout=timeout, + ) + + +# --------------------------------------------------------------------------- +# Execution +# --------------------------------------------------------------------------- + + +@dataclass +class RunResult: + sample: Path + status: str # "PASS", "FAIL", "WAIVED", "TIMEOUT", "ERROR" + return_code: int + detail: str = "" + + +def run_sample(plan: RunPlan) -> RunResult: + sample = plan.sample + name = sample.parent.name + + if plan.skip_reason is not None: + _safe_print(f" [WAIVED] {name}: {plan.skip_reason}") + return RunResult(sample, "WAIVED", EXIT_WAIVED, plan.skip_reason) + + missing = missing_dependencies(sample) + if missing: + reason = f"missing package(s): {', '.join(missing)}" + _safe_print(f" [WAIVED] {name}: {reason}") + return RunResult(sample, "WAIVED", EXIT_WAIVED, reason) + + cmd = list(plan.launcher) + [sys.executable, str(sample)] + list(plan.args) + _safe_print(f" [RUN ] {name}: {' '.join(cmd)}") + + try: + proc = subprocess.run( # noqa: S603 + cmd, + cwd=str(sample.parent), + capture_output=True, + text=True, + timeout=plan.timeout, + check=False, + ) + except subprocess.TimeoutExpired: + _safe_print(f" [TIMEOUT] {name}: exceeded {plan.timeout}s") + return RunResult(sample, "TIMEOUT", -1, f"timed out after {plan.timeout}s") + except OSError as exc: + _safe_print(f" [ERROR] {name}: {exc}") + return RunResult(sample, "ERROR", -1, str(exc)) + + if proc.returncode == 0: + _safe_print(f" [PASS ] {name}") + return RunResult(sample, "PASS", 0) + if proc.returncode == EXIT_WAIVED: + _safe_print(f" [WAIVED] {name}: sample reported waived") + return RunResult(sample, "WAIVED", EXIT_WAIVED, "sample-reported") + + # Fail. Surface output so CI logs are diagnosable. + msg = f"return code {proc.returncode}" + _safe_print(f" [FAIL ] {name}: {msg}") + if proc.stdout: + _safe_print(f"---- stdout ({name}) ----\n{proc.stdout.rstrip()}") + if proc.stderr: + _safe_print(f"---- stderr ({name}) ----\n{proc.stderr.rstrip()}") + return RunResult(sample, "FAIL", proc.returncode, msg) + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser(description="Run cuda-python samples") + parser.add_argument( + "--samples-dir", + type=Path, + default=DEFAULT_SAMPLES_DIR, + help="Directory containing one subdir per sample (default: ./samples)", + ) + parser.add_argument( + "--config", + type=Path, + default=DEFAULT_CONFIG, + help="Path to test_args.json (default: tests/samples/test_args.json)", + ) + parser.add_argument( + "--parallel", + type=int, + default=1, + help="Maximum number of samples to run concurrently (default: 1)", + ) + parser.add_argument( + "--filter", + action="append", + default=[], + help=( + "Run only samples whose directory name contains the given substring (may be repeated)" + ), + ) + parser.add_argument( + "--timeout", + type=int, + default=DEFAULT_TIMEOUT, + help=f"Per-sample timeout in seconds (default: {DEFAULT_TIMEOUT})", + ) + args = parser.parse_args(argv) + + samples_dir: Path = args.samples_dir.resolve() + if not samples_dir.is_dir(): + _safe_print(f"Error: samples directory not found: {samples_dir}") + return 1 + + samples = discover_samples(samples_dir) + if args.filter: + keep = [] + for sample in samples: + if any(token in sample.parent.name for token in args.filter): + keep.append(sample) + samples = keep + if not samples: + _safe_print("No samples found.") + return 1 + + config = load_config(args.config.resolve()) + gpu_count = get_gpu_count() + _safe_print(f"Detected {gpu_count} GPU(s).") + _safe_print(f"Running {len(samples)} sample(s) with parallelism={args.parallel}\n") + + plans = [build_run_plan(s, config, gpu_count, args.timeout) for s in samples] + + if args.parallel <= 1: + results = [run_sample(plan) for plan in plans] + else: + with concurrent.futures.ThreadPoolExecutor(max_workers=args.parallel) as pool: + results = list(pool.map(run_sample, plans)) + + failed = [r for r in results if r.status in {"FAIL", "TIMEOUT", "ERROR"}] + waived = [r for r in results if r.status == "WAIVED"] + passed = [r for r in results if r.status == "PASS"] + + _safe_print("\nSummary") + _safe_print(f" passed : {len(passed)}") + _safe_print(f" waived : {len(waived)}") + _safe_print(f" failed : {len(failed)}") + if failed: + for r in failed: + _safe_print(f" - {r.sample.parent.name}: {r.status} ({r.detail})") + first = next((r.return_code for r in failed if r.return_code > 0), 1) + return first + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tests/samples/test_args.json b/tests/samples/test_args.json new file mode 100644 index 00000000000..3c2013c14a1 --- /dev/null +++ b/tests/samples/test_args.json @@ -0,0 +1,17 @@ +{ + "simpleP2P": { + "min_gpus": 2 + }, + "reductionMultiBlockCG": { + "python": { + "args": ["--cuda-include-dir=$CUDA_HOME/include:$CUDA_HOME/include/cccl"] + } + }, + "multiGPUGradientAverage": { + "min_gpus": 2, + "python": { + "launcher": ["mpirun", "--allow-run-as-root", "-np", "2"], + "args": ["--size", "1024"] + } + } +} diff --git a/tests/samples/test_samples.py b/tests/samples/test_samples.py new file mode 100644 index 00000000000..b9e82b150e8 --- /dev/null +++ b/tests/samples/test_samples.py @@ -0,0 +1,64 @@ +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +""" +Pytest wrapper for samples under ./samples/. + +The samples themselves should be plain runnable scripts. + +This module uses ``run_samples.py`` to run the samples, which is a +convenience wrapper around the ``cuda_bindings.samples.run_samples`` module. +""" + +from __future__ import annotations + +import sys + +import pytest + +from .run_samples import ( + DEFAULT_CONFIG, + DEFAULT_SAMPLES_DIR, + build_run_plan, + discover_samples, + get_gpu_count, + load_config, + run_sample, +) + + +def _collect_samples() -> list[str]: + if not DEFAULT_SAMPLES_DIR.is_dir(): + return [] + return [s.parent.name for s in discover_samples(DEFAULT_SAMPLES_DIR)] + + +_SAMPLES = _collect_samples() +_CONFIG = load_config(DEFAULT_CONFIG) +# Resolve GPU count once at collection time so we report the same skip reason +# consistently across the parametrized test ids. +_GPU_COUNT = get_gpu_count() if _SAMPLES else 0 + + +@pytest.mark.parametrize("sample_name", _SAMPLES) +def test_sample(sample_name: str) -> None: + if _GPU_COUNT == 0: + pytest.skip("No CUDA GPU detected on the test runner") + + entry = DEFAULT_SAMPLES_DIR / sample_name / f"{sample_name}.py" + if not entry.is_file(): + pytest.fail(f"Sample entrypoint missing: {entry}") + + plan = build_run_plan(entry, _CONFIG, _GPU_COUNT) + result = run_sample(plan) + + if result.status == "WAIVED": + pytest.skip(result.detail or "sample waived") + if result.status == "PASS": + return + + # Re-print captured output through stdout/stderr so pytest's failure + # capture surfaces it in the report. + sys.stdout.flush() + pytest.fail( + f"sample {sample_name} returned status={result.status} (rc={result.return_code}): {result.detail}" + ) diff --git a/toolshed/check_spdx.py b/toolshed/check_spdx.py index e119eaa4795..1bf3afebbd9 100644 --- a/toolshed/check_spdx.py +++ b/toolshed/check_spdx.py @@ -32,7 +32,9 @@ "cuda_python": "LicenseRef-NVIDIA-SOFTWARE-LICENSE", "cuda_python_test_helpers": "Apache-2.0", "qa": "LicenseRef-NVIDIA-SOFTWARE-LICENSE", + "samples": "Apache-2.0", "scripts": "Apache-2.0", + "tests": "Apache-2.0", "toolshed": "Apache-2.0", } From dfeecdb5b5a32c13758fc9a118acf49aeec2ae4d Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 25 Jun 2026 15:28:13 -0500 Subject: [PATCH 02/11] Examples format --- ruff.toml | 6 ++++++ tests/samples/run_samples.py | 18 ++++-------------- tests/samples/test_samples.py | 4 +--- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/ruff.toml b/ruff.toml index f087df55872..77331428859 100644 --- a/ruff.toml +++ b/ruff.toml @@ -108,6 +108,12 @@ inline-quotes = "double" "B028", # no explicit stacklevel in warnings (test code) ] +"**/examples/**" = [ + "T201", # print + "E402", # module-level import not at top of file + "RUF059", # unused unpacked variable +] + "samples/**" = [ "T201", # print "E402", # module-level import not at top of file (sys.path mutation before import) diff --git a/tests/samples/run_samples.py b/tests/samples/run_samples.py index cea13eb58df..6ba17b19ba1 100644 --- a/tests/samples/run_samples.py +++ b/tests/samples/run_samples.py @@ -104,11 +104,7 @@ def get_gpu_count() -> int: check=False, ) if smi.returncode == 0: - return sum( - 1 - for line in smi.stdout.splitlines() - if line.strip().lower().startswith("gpu ") - ) + return sum(1 for line in smi.stdout.splitlines() if line.strip().lower().startswith("gpu ")) except FileNotFoundError: pass except OSError: @@ -127,9 +123,7 @@ def get_gpu_count() -> int: # --------------------------------------------------------------------------- _DEP_NAME_RE = re.compile(r"[a-zA-Z0-9_-]+") -_PEP723_RE = re.compile( - r"(?m)^# /// (?P[a-zA-Z0-9-]+)$\s(?P(^#(| .*)$\s)+)^# ///$" -) +_PEP723_RE = re.compile(r"(?m)^# /// (?P[a-zA-Z0-9-]+)$\s(?P(^#(| .*)$\s)+)^# ///$") # Aliases bridging PyPI distribution names declared in sample PEP 723 blocks # and the install-name a conda/pixi environment provides. CI uses wheels where @@ -264,9 +258,7 @@ def build_run_plan( [], [], timeout, - skip_reason=( - f"requires {required_gpus} GPU(s), only {gpu_count} available" - ), + skip_reason=(f"requires {required_gpus} GPU(s), only {gpu_count} available"), ) python_cfg = sample_cfg.get("python", {}) @@ -381,9 +373,7 @@ def main(argv: list[str] | None = None) -> int: "--filter", action="append", default=[], - help=( - "Run only samples whose directory name contains the given substring (may be repeated)" - ), + help=("Run only samples whose directory name contains the given substring (may be repeated)"), ) parser.add_argument( "--timeout", diff --git a/tests/samples/test_samples.py b/tests/samples/test_samples.py index b9e82b150e8..343d8fd388a 100644 --- a/tests/samples/test_samples.py +++ b/tests/samples/test_samples.py @@ -59,6 +59,4 @@ def test_sample(sample_name: str) -> None: # Re-print captured output through stdout/stderr so pytest's failure # capture surfaces it in the report. sys.stdout.flush() - pytest.fail( - f"sample {sample_name} returned status={result.status} (rc={result.return_code}): {result.detail}" - ) + pytest.fail(f"sample {sample_name} returned status={result.status} (rc={result.return_code}): {result.detail}") From 0bcc5beb5f83fccfa8b320257f4d3c7a6eb2c069 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 16 Jul 2026 10:49:49 -0500 Subject: [PATCH 03/11] Consolidate test suite into cuda.core one --- .github/workflows/test-wheel-linux.yml | 7 - ci/tools/run-tests | 24 +- conftest.py | 5 +- cuda_core/pixi.lock | 1775 ++--------------- cuda_core/pixi.toml | 2 +- .../tests/example_tests}/run_samples.py | 25 +- .../tests/example_tests}/test_args.json | 0 .../tests/example_tests}/test_samples.py | 17 +- pytest.ini | 3 +- scripts/run_tests.sh | 13 +- tests/samples/__init__.py | 2 - toolshed/check_spdx.py | 1 - 12 files changed, 248 insertions(+), 1626 deletions(-) rename {tests/samples => cuda_core/tests/example_tests}/run_samples.py (93%) rename {tests/samples => cuda_core/tests/example_tests}/test_args.json (100%) rename {tests/samples => cuda_core/tests/example_tests}/test_samples.py (72%) delete mode 100644 tests/samples/__init__.py diff --git a/.github/workflows/test-wheel-linux.yml b/.github/workflows/test-wheel-linux.yml index 8846a70465d..cb5dbc4c866 100644 --- a/.github/workflows/test-wheel-linux.yml +++ b/.github/workflows/test-wheel-linux.yml @@ -381,13 +381,6 @@ jobs: CUDA_PATHFINDER_TEST_FIND_NVIDIA_BITCODE_LIB_STRICTNESS: all_must_work run: run-tests pathfinder - - name: Run samples tests - if: ${{ inputs.test-mode == 'standard' }} - env: - CUDA_VER: ${{ matrix.CUDA_VER }} - LOCAL_CTK: ${{ matrix.LOCAL_CTK }} - run: run-tests samples - # ── Nightly: install wheels + optional dep together ── - name: Install cuda-python wheels + PyTorch if: ${{ inputs.test-mode == 'nightly-pytorch' }} diff --git a/ci/tools/run-tests b/ci/tools/run-tests index 9271a19341a..f1adf802974 100755 --- a/ci/tools/run-tests +++ b/ci/tools/run-tests @@ -13,8 +13,8 @@ if [[ ${#} -ne 1 ]]; then echo "Error: This script requires exactly 1 argument. You provided ${#}" exit 1 fi -if [[ "${1}" != "bindings" && "${1}" != "core" && "${1}" != "pathfinder" && "${1}" != "samples" && "${1}" != nightly-* ]]; then - echo "Error: Invalid test module '${1}'. Must be 'bindings', 'core', 'pathfinder', 'samples', or 'nightly-*'" +if [[ "${1}" != "bindings" && "${1}" != "core" && "${1}" != "pathfinder" && "${1}" != nightly-* ]]; then + echo "Error: Invalid test module '${1}'. Must be 'bindings', 'core', 'pathfinder', or 'nightly-*'" exit 1 fi @@ -56,20 +56,6 @@ elif [[ "${test_module}" == "bindings" ]]; then ${SANITIZER_CMD} pytest -rxXs -v --durations=0 --randomly-dont-reorganize tests/cython fi popd -elif [[ "${test_module}" == "samples" ]]; then - # Samples re-use whatever cuda-bindings + cuda-core packages are already - # installed by an earlier ``core`` invocation. Install the cupy backend (the - # only test-only dep most samples need) and run the pytest harness. - TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< "${CUDA_VER}")" - echo "Installing optional sample deps (cupy-cuda${TEST_CUDA_MAJOR}x, nvtx, pillow)" - pip install --upgrade pip - pip install \ - "cupy-cuda${TEST_CUDA_MAJOR}x" \ - nvtx \ - pillow \ - || echo "Warning: optional sample deps install failed; affected samples will be waived" - echo "Running sample tests" - pytest -rxXs -v --durations=0 tests/samples/ elif [[ "${test_module}" == "core" || "${test_module}" == nightly-* ]]; then # Shared setup for core and nightly modes. TEST_CUDA_MAJOR="$(cut -d '.' -f 1 <<< ${CUDA_VER})" @@ -117,6 +103,12 @@ elif [[ "${test_module}" == "core" || "${test_module}" == nightly-* ]]; then # Constrain cuda-toolkit to the requested CTK version to avoid # pip pulling in a newer nvidia-cuda-runtime that conflicts with it. pip install "${CORE_WHL[@]}" --group "test-cu${TEST_CUDA_MAJOR}${FREE_THREADING}" "cuda-toolkit==${CUDA_VER_MINOR}.*" + # Optional deps needed by some samples exercised in the core suite + # (tests/example_tests/test_samples.py). cupy already comes from the + # test-cuXX group; install the rest best-effort so those samples run + # instead of being waived. Samples with heavier/unavailable deps stay waived. + echo "Installing optional sample deps (nvtx, pillow)" + pip install nvtx pillow || echo "Warning: optional sample deps install failed; affected samples will be waived" echo "Installed packages before core tests:" pip list echo "Running core tests" diff --git a/conftest.py b/conftest.py index 2ce0aef9de5..eb7b6aaa435 100644 --- a/conftest.py +++ b/conftest.py @@ -41,8 +41,9 @@ def pytest_collection_modifyitems(config, items): # noqa: ARG001 if nodeid.startswith("tests/integration/") or "/tests/integration/" in nodeid: item.add_marker(pytest.mark.smoke) - # Sample tests (orchestrator under tests/samples/, sample sources under samples/) - if nodeid.startswith("tests/samples/") or "/tests/samples/" in nodeid: + # Sample tests run within the cuda_core suite (orchestrator + wrapper live + # under cuda_core/tests/example_tests/; sample sources under ./samples/). + if "example_tests/test_samples.py" in nodeid: item.add_marker(pytest.mark.samples) # Cython tests (any tests/cython subtree) diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index ce2a9541ce5..b1d5bc5dbaa 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -585,7 +585,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -648,9 +647,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda @@ -706,9 +705,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda @@ -751,7 +750,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda @@ -796,7 +795,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda @@ -856,9 +854,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda @@ -912,9 +910,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda @@ -953,7 +951,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda @@ -1146,7 +1144,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -1209,9 +1206,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda @@ -1267,9 +1264,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda @@ -1312,7 +1309,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda @@ -1357,7 +1354,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda @@ -1417,9 +1413,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda @@ -1473,9 +1469,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda @@ -1514,7 +1510,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-rerunfailures-16.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda @@ -1776,7 +1772,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda @@ -1840,7 +1836,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py314h67df5f8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda @@ -1960,7 +1956,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-hf9559e3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda @@ -2024,7 +2020,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py314h807365f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda @@ -2058,752 +2054,192 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: . - build: py314h3ff45e1_0 - - conda: ../cuda_bindings - build: py314h3ff45e1_0 - - conda: ../cuda_pathfinder - - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl - win-64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-core-1.1.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.15-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py314h344ed54_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/domdf-python-tools-3.10.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.3.2-py314hb98de8c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-6_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-6_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-6_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.1-hac47afa_11.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.2-py314h909e829_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.3-py314h02f10f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py314hc5dbbe4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-jinja2-compat-0.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.10.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-tabs-3.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-toolbox-4.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.49-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - 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/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - - conda: . - build: py314hd7f1909_0 - - conda: ../cuda_bindings - build: py314hd7f1909_0 - - conda: ../cuda_pathfinder - - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl - examples: - channels: - - url: https://conda.anaconda.org/conda-forge/ - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-7_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cuobjdump-13.3.29-hffce074_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cupti-13.3.35-h676940d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.33-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvdisasm-13.3.29-hffce074_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.3.33-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvtx-13.3.29-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.33-h69a702a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hcddb375_914.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fmt-12.1.0-hff5e90c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h6f77f03_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.5-h2b0a6b4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gmpy2-2.3.0-py314h28848ee_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.0-h6083320_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h5875eb1_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_hfef963f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.20.0.48-ha4b6413_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.7.1.4-h7bcfba5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h5e43f62_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-hd93470c_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.10.0-cuda130_mkl_hb2e6204_303.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.0-h4922eb0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2025.3.0-h0e700b2_463.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.29.3.1-h8340e53_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.0-py314h9891dd4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.10.0-cuda130_mkl_py314_h382c374_303.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.10.0-cuda129_mkl_h0d04637_303.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.6.0-cuda130py314h1cdc6f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: . - build: py314hd3a1e81_0 - - conda: ../cuda_bindings - build: py314hd3a1e81_0 - - conda: ../cuda_pathfinder - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-7_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.3.1-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-crt-tools-13.3.33-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cuobjdump-13.3.29-h2079400_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cupti-13.3.35-he38c790_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvcc-tools-13.3.33-h614329b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvdisasm-13.3.29-h40ab4d6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.3.33-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvtx-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.33-he9431aa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.33-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.33-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.33-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h62efc85_914.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fmt-12.1.0-h20c602a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.2.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmpy2-2.3.0-py314h887ad84_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.0-h1134a53_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260107.1-cxx17_h6983b43_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcublas-13.5.1.27-he38c790_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.20.0.48-h0bf6004_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.2-default_ha470c98_1000.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.3.0-h81d0cf9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-openmp_h1a8b088_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.0.0-h3d5001d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.0.0-h3d5001d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.0.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.0.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.0.0-h558496d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.0.0-h558496d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.0.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.0.0-h2cb6e3c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.0.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.33.5-h1f88751_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.2-h8171147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.10.0-cuda130_generic_he6ac1af_203.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.0-he40846f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.3.1-h783934e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.1-h2305555_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.29.3.1-h7d52dd6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py314haac167e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.0-py314hd7d8586_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-abi-11-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h7cb4a1c_203.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda130_generic_h63a1e35_203.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sleef-3.9.0-h5bb93e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.0.1-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sympy-1.14.0-pyh2585a3b_106.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-hfefdfc9_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - conda: . build: py314h3ff45e1_0 - conda: ../cuda_bindings build: py314h3ff45e1_0 - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-core-1.1.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/backports.zstd-1.3.0-py314h680f03e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py314he701e3d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_hb2d76f6_914.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.5-h1f5b9c4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.2.0-h294ba9c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.0-h5a1b470_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py314h344ed54_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/domdf-python-tools-3.10.0-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.3.2-py314hb98de8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-6_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-6_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.3.0-ha71e874_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-hf3f85d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-6_hf9ab0e9_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.1-hac47afa_11.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.2-py314h909e829_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.3-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h03d888a_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.14.3-h4df99d1_101.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.2-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-h8fa7867_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.1-h49e36cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py314h2359020_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py314h9f07db2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py314hc5dbbe4_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py314h221f224_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-jinja2-compat-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-tabs-3.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-toolbox-4.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.49-py314hc5dbbe4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda + - 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/yaml-0.2.5-h6a83c73_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . build: py314hd7f1909_0 - conda: ../cuda_bindings build: py314hd7f1909_0 - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl samples: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -2893,7 +2329,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda @@ -3137,7 +2573,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda @@ -4238,7 +3674,7 @@ packages: - cuda-nvvm - libnvfatbin - libcufile - - libcufile >=1.18.0.66,<2.0a0 + - libcufile >=1.18.1.6,<2.0a0 - libgcc >=15 - libgcc >=15 - libstdcxx >=15 @@ -4266,7 +3702,7 @@ packages: - cuda-nvvm - libnvfatbin - libcufile - - libcufile >=1.18.0.66,<2.0a0 + - libcufile >=1.18.1.6,<2.0a0 - libgcc >=15 - libgcc >=15 - libstdcxx >=15 @@ -5734,25 +5170,6 @@ packages: purls: [] size: 22083 timestamp: 1779891651771 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_0.conda - sha256: d59c279c87b545dd02f420f7590986b9eae7acb14c1bd5f3c174a78249c7dfc5 - md5: 889f514696060780ec0358539c17007b - depends: - - cuda-cudart-dev_linux-64 - - cuda-nvrtc - - cuda-version >=13,<14.0a0 - - cupy-core 14.0.1 py314hed3c566_0 - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 385283 - timestamp: 1771604567478 - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_1.conda sha256: 645c77e7d3f3986d48fa5bb08d14a72d0f14e11ea276f28242052bb9b073d83b md5: e8f7956463e9340710e9895f0d0418f3 @@ -5773,75 +5190,26 @@ packages: purls: [] size: 384966 timestamp: 1779504073573 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_0.conda - sha256: 10608ecb57bf7c2295a8ce5ed538305553290ec53fa960a91794559e42a204ba - md5: f4200ad5b954b43fac5ae43415e82317 - depends: - - cuda-cudart-dev_linux-aarch64 - - cuda-nvrtc - - cuda-version >=13,<14.0a0 - - cupy-core 14.0.1 py314h1d6db3a_0 - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 385353 - timestamp: 1771605185463 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_1.conda sha256: e10e1284b4f7ba61bac287e0621ffe142914d78008ed96a480cdb727c11326e2 md5: 6b68146846d55143a9304ad3ca0333ea depends: - cuda-cudart-dev_linux-aarch64 - cuda-nvrtc - - cuda-version >=13,<14.0a0 - - cupy-core 14.0.1 py314h1d6db3a_1 - - libcublas - - libcufft - - libcurand - - libcusolver - - libcusparse - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - purls: [] - size: 384462 - timestamp: 1779504126757 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_0.conda - sha256: f048dbdee55577fad61221b87b0be44fc64de532138cf80b0e65fe0955d13b27 - md5: 494ca91005c44e23bd74d6fd086228d2 - depends: - - __glibc >=2.28,<3.0.a0 - - cuda-pathfinder >=1.3.3,<2.0a0 - - libgcc >=14 - - libstdcxx >=14 - - numpy >=1.23,<3 - - numpy >=2.0 + - cuda-version >=13,<14.0a0 + - cupy-core 14.0.1 py314h1d6db3a_1 + - libcublas + - libcufft + - libcurand + - libcusolver + - libcusparse - python >=3.14,<3.15.0a0 - python_abi 3.14.* *_cp314 - constrains: - - __cuda >=13.0 - - libcublas >=13,<14.0a0 - - cuda-nvrtc >=13,<14.0a0 - - nccl >=2.29.3.1,<3.0a0 - - cutensor >=2.5.0.2,<3.0a0 - - libcufft >=12,<13.0a0 - - scipy >=1.10,<1.17 - - cuda-version >=13,<14.0a0 - - optuna ~=3.0 - - cupy >=14.0.1,<14.1.0a0 - - libcusolver >=12,<13.0a0 - - libcurand >=10,<11.0a0 - - libcusparse >=12,<13.0a0 license: MIT license_family: MIT - size: 33970282 - timestamp: 1771604499034 + purls: [] + size: 384462 + timestamp: 1779504126757 - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_1.conda sha256: eb9af273306d14002d887f41a1966a741b53baf859de853e14cd6cca285d92d5 md5: 7586c72642ed8c79b84aa66219a4cfca @@ -5874,37 +5242,6 @@ packages: - pkg:pypi/cupy?source=hash-mapping size: 33860499 timestamp: 1779504045871 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_0.conda - sha256: 125c488f2ac15a216575449baf03a9e16644c3e7e6773fd9e53ba68893a20396 - md5: 0bd337aec5a1d18ecf0bf16a2d0d3ce8 - depends: - - __glibc >=2.28,<3.0.a0 - - cuda-pathfinder >=1.3.3,<2.0a0 - - libgcc >=14 - - libstdcxx >=14 - - numpy >=1.23,<3 - - numpy >=2.0 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - constrains: - - __cuda >=13.0 - - cutensor >=2.5.0.2,<3.0a0 - - optuna ~=3.0 - - libcublas >=13,<14.0a0 - - cuda-nvrtc >=13,<14.0a0 - - libcufft >=12,<13.0a0 - - libcusolver >=12,<13.0a0 - - libcusparse >=12,<13.0a0 - - libcurand >=10,<11.0a0 - - nccl >=2.29.3.1,<3.0a0 - - scipy >=1.10,<1.17 - - cupy >=14.0.1,<14.1.0a0 - - cuda-version >=13,<14.0a0 - license: MIT - license_family: MIT - size: 39128286 - timestamp: 1771605119782 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_1.conda sha256: 50eeca5279bd44c7977e0babf0eaf4a78de8e448e34804d26f45277e93cda354 md5: 9d5af704cc69aeb6e92547b0b68ccda4 @@ -6783,15 +6120,6 @@ packages: purls: [] size: 64394 timestamp: 1757438741305 -- conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.2.0-pyhd8ed1ab_0.conda - sha256: 239b67edf1c5e5caed52cf36e9bed47cb21b37721779828c130e6b3fd9793c1b - md5: 496c6c9411a6284addf55c898d6ed8d7 - depends: - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - size: 148757 - timestamp: 1770387898414 - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda sha256: fe0156e6d658be3531aad2a99e42e8ad1ee23c69837d469c44c1b6010373913d md5: 7d7e6c826ba0743fc491ebee0e7b899c @@ -8446,24 +7774,6 @@ packages: license_family: BSD size: 18213 timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h5875eb1_mkl.conda - build_number: 5 - sha256: 328d64d4eb51047c39a8039a30eb47695855829d0a11b72d932171cb1dcdfad3 - md5: 9d2f2e3a943d38f972ceef9cde8ba4bf - depends: - - mkl >=2025.3.0,<2026.0a0 - constrains: - - liblapack 3.11.0 5*_mkl - - liblapacke 3.11.0 5*_mkl - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - track_features: - - blas_mkl - - blas_mkl_2 - license: BSD-3-Clause - license_family: BSD - size: 18744 - timestamp: 1765818556597 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda build_number: 6 sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 @@ -8783,22 +8093,6 @@ packages: license_family: BSD size: 18194 timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_hfef963f_mkl.conda - build_number: 5 - sha256: 8352f472c49c42a83a20387b5f6addab1f910c5a62f4f5b8998d7dc89131ba2e - md5: 9b6cb3aa4b7912121c64b97a76ca43d5 - depends: - - libblas 3.11.0 5_h5875eb1_mkl - constrains: - - liblapack 3.11.0 5*_mkl - - liblapacke 3.11.0 5*_mkl - - blas 2.305 mkl - track_features: - - blas_mkl - license: BSD-3-Clause - license_family: BSD - size: 18385 - timestamp: 1765818571086 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda build_number: 6 sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 @@ -8948,22 +8242,6 @@ packages: purls: [] size: 491684476 timestamp: 1779912373471 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.20.0.48-ha4b6413_0.conda - sha256: a257a62d502db1dea11af321fc757bb7ae44cde6472d07b147da96098310e7b3 - md5: a41b3904663dcc0c7f53862666fede36 - depends: - - __glibc >=2.28,<3.0.a0 - - cuda-nvrtc - - cuda-version >=13,<14.0a0 - - libcublas - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libcudnn-jit <0a - license: LicenseRef-cuDNN-Software-License-Agreement - size: 332092133 - timestamp: 1773180273500 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda sha256: 8fdcd511eef3167db18afca483e0c668f458fbf77c1c3a2acdb3ea787e6663bc md5: 942361a0d125cd276b2e7b69660e4c67 @@ -8981,23 +8259,6 @@ packages: purls: [] size: 447957779 timestamp: 1781299475496 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.20.0.48-h0bf6004_0.conda - sha256: a3993991464f6ffe81c354e6d4e4edfeef4b9cb7c12cd7e13bc08d91c1826b09 - md5: 9f5f39cc3a13eaa80d7727973fda0a43 - depends: - - __glibc >=2.28,<3.0.a0 - - arm-variant * sbsa - - cuda-nvrtc - - cuda-version >=13,<14.0a0 - - libcublas - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libcudnn-jit <0a - license: LicenseRef-cuDNN-Software-License-Agreement - size: 407901008 - timestamp: 1773180233415 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda sha256: 3c3322771cc71928526cbae349154678f9da8043ee5bccfcb02cfa3b738aefe9 md5: 4b232bc6c7529d335ce6c338f56af648 @@ -9016,23 +8277,6 @@ packages: purls: [] size: 544123581 timestamp: 1781299494730 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.7.1.4-h7bcfba5_1.conda - sha256: 7d3afc0e0e5bff4d9adcf2f3454ac97a8812b5802ca04498e1f5d8db9d3fb24c - md5: 6111650cfce61896d705230a878cc1a8 - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex >=4.5 - - cuda-version >=13,<14.0a0 - - libcublas - - libgcc >=14 - - libstdcxx >=14 - constrains: - - libcudss0 <0.0.0a0 - - libcudss-commlayer-nccl 0.7.1.4 hd557bf5_1 - - libcudss-commlayer-mpi 0.7.1.4 h6647138_1 - license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 62715991 - timestamp: 1770671835770 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda sha256: 05c4f349df99636cae828489ce0f842bbbc7da0006ce4cf37b6d3d7433d06aef md5: b993006a7f8c1f2d0e4adf1c9ac17201 @@ -9051,24 +8295,6 @@ packages: purls: [] size: 78215168 timestamp: 1780355336257 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda - sha256: b51195f067cb90871b0673dfe8564015513c4f81509018313efcb0a14d3f2391 - md5: c53276b4f3f8eeaa91813b8a0196eb91 - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex >=4.5 - - arm-variant * sbsa - - cuda-version >=13,<14.0a0 - - libcublas - - libgcc >=14 - - libstdcxx >=14 - constrains: - - libcudss-commlayer-nccl 0.7.1.4 h7a53d9e_1 - - libcudss-commlayer-mpi 0.7.1.4 h40415f0_1 - - libcudss0 <0.0.0a0 - license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 62631375 - timestamp: 1770671821410 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda sha256: f23ac30a306476480b94e9a5634b695e235426d78c426c1d0f69895ac3bfcee7 md5: a595ebcdfd12786a1e9e1ad1a7d47537 @@ -9126,19 +8352,19 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 969845 timestamp: 1761098818759 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda - sha256: aa2ce3784f756fabde147be6dc606f93a6e6be5e0a146697b57454e9f4adc264 - md5: f760d9e2103a43d25f930cd3706c0cab +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda + sha256: 72b9c44d6d33c6d384ddaef755e717c781782cbcb32cfba454a8d8084f02ac55 + md5: 434bbefad502f7a9f7eaf7558c645d75 depends: - __glibc >=2.28,<3.0.a0 - cuda-version >=13.3,<13.4.0a0 - libgcc >=14 - libstdcxx >=14 - - rdma-core >=61.0 + - rdma-core >=63.0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1115061 - timestamp: 1779897561291 + size: 1117538 + timestamp: 1782772352403 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.14.1.1-had8bf56_1.conda sha256: fbc1fa6b3ddf946b2999c9820310682739505df71e1e2ac513a72efb951fa3e5 md5: ee136db5a5409dddc78eaf7658fccffe @@ -9152,22 +8378,22 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 909365 timestamp: 1761098964619 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda - sha256: 46bd414aaac6274db9118965459a173f8339529c6d0fda53d2e167579cee1ce0 - md5: cc1766bf438c27f357c37bf0869686f1 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda + sha256: 71af687b188c5028d0788d7916adb3f80568d766bf3380b71b600f246d1b9021 + md5: 547968e609a6c1f038fd18a318f3268c depends: - __glibc >=2.28,<3.0.a0 - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 - libgcc >=14 - libstdcxx >=14 - - rdma-core >=61.0 + - rdma-core >=63.0 constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 998160 - timestamp: 1779897582676 + size: 997204 + timestamp: 1782772368681 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda sha256: 9a1615a44f0d01fcc23b4f1be4c8f86b2e19e3974481e826180dd261b67dcad6 md5: 6172124b5a746cc1f3f9fc7fac9f6740 @@ -10009,16 +9235,6 @@ packages: purls: [] size: 148112 timestamp: 1779728248678 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_2.conda - sha256: e281356c0975751f478c53e14f3efea6cd1e23c3069406d10708d6c409525260 - md5: 53e7cbb2beb03d69a478631e23e340e9 - depends: - - __glibc >=2.17,<3.0.a0 - - libgl 1.7.0 ha4b6fd6_2 - - libglx-devel 1.7.0 ha4b6fd6_2 - license: LicenseRef-libglvnd - size: 113911 - timestamp: 1731331012126 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda sha256: 41d7d864ad1f199bdb06ff6cc3931455c8af62f1d2071a08c6fa08affbcb678f md5: 63e43d278ee5084813fe3c2edf4834ce @@ -10030,15 +9246,6 @@ packages: purls: [] size: 115664 timestamp: 1779728218325 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_2.conda - sha256: ec5c3125b38295bad8acc80f793b8ee217ccb194338d73858be278db50ea82f1 - md5: 5d8323dff6a93596fb6f985cf6e8521a - depends: - - libgl 1.7.0 hd24410f_2 - - libglx-devel 1.7.0 hd24410f_2 - license: LicenseRef-libglvnd - size: 113925 - timestamp: 1731331014056 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda sha256: b7483884e5e8df362f113d7d7694f0a37ecf6409f1acaaa889f312688917c067 md5: 3a0adce33b3b8a52c76389db1edfec1b @@ -10214,17 +9421,6 @@ packages: purls: [] size: 76704 timestamp: 1779728242753 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_2.conda - sha256: 0a930e0148ab6e61089bbcdba25a2e17ee383e7de82e7af10cc5c12c82c580f3 - md5: 27ac5ae872a21375d980bd4a6f99edf3 - depends: - - __glibc >=2.17,<3.0.a0 - - libglx 1.7.0 ha4b6fd6_2 - - xorg-libx11 >=1.8.10,<2.0a0 - - xorg-xorgproto - license: LicenseRef-libglvnd - size: 26388 - timestamp: 1731331003255 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda sha256: a17ae2d4cb2de04a20882ae14ec3cc1958e868a4dec81e3d7eca30115ee50e94 md5: 16b6330783ce0d1ae8d22782173b32c9 @@ -10237,16 +9433,6 @@ packages: purls: [] size: 27363 timestamp: 1779728211402 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_2.conda - sha256: 4bc28ecc38f30ca1ac66a8fb6c5703f4d888381ec46d3938b7c3383210061ec5 - md5: 1f9ddbb175a63401662d1c6222cef6ff - depends: - - libglx 1.7.0 hd24410f_2 - - xorg-libx11 >=1.8.9,<2.0a0 - - xorg-xorgproto - license: LicenseRef-libglvnd - size: 26362 - timestamp: 1731331008489 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda sha256: b30433c4f56bec0a7d9d288e0a456ed280183e32f3f4880ada2189fc12804a52 md5: 3da9719866b95bddcad86c8aec6a8ba2 @@ -10655,22 +9841,6 @@ packages: license_family: BSD size: 18200 timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h5e43f62_mkl.conda - build_number: 5 - sha256: b411a9dccb21cd6231f8f66b63916a6520a7b23363e6f9d1d111e8660f2798b0 - md5: 88155c848e1278b0990692e716c9eab4 - depends: - - libblas 3.11.0 5_h5875eb1_mkl - constrains: - - liblapacke 3.11.0 5*_mkl - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - track_features: - - blas_mkl - license: BSD-3-Clause - license_family: BSD - size: 18398 - timestamp: 1765818583873 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda build_number: 6 sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d @@ -10882,24 +10052,6 @@ packages: purls: [] size: 272468878 timestamp: 1773078724253 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.9.0-hd93470c_6.conda - sha256: 5ea4675cb4a900795a5eb33519307cf985fd3787eb0cf33142e52ecc8eb8a7d4 - md5: 886e83a08e0ad01d7fe868972bc729f3 - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex >=4.5 - - cuda-cudart - - cuda-version >=13,<14.0a0 - - libblas >=3.9.0,<4.0a0 - - libcublas - - libcusparse - - libgcc >=14 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - size: 387811432 - timestamp: 1767135866822 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.10.0-he3ecef4_0.conda sha256: 72b40c75a7bc547b856954f12ba32cd815b26ace064564dc2569e44967cf87fc md5: 1392ce38ffe86b9612c27cdfef98404d @@ -10920,25 +10072,6 @@ packages: purls: [] size: 324720276 timestamp: 1773081195270 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda - sha256: 1511c96dcab0968a344d16a5bbb6791aeefc344e2ef4740a1137cfb62f95ebc6 - md5: c6eec8ae18b32f1e444353dd526fb040 - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex >=4.5 - - arm-variant * sbsa - - cuda-cudart - - cuda-version >=13,<14.0a0 - - libblas >=3.9.0,<4.0a0 - - libcublas - - libcusparse - - libgcc >=14 - - liblapack >=3.9.0,<4.0a0 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - size: 460673720 - timestamp: 1767143113267 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -11220,24 +10353,6 @@ packages: purls: [] size: 5928890 timestamp: 1774471724897 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-openmp_h1a8b088_4.conda - sha256: 1892ceaefcf593dfd881ce3e88108875e60002b34a15b918d3e0b9129e5f631f - md5: b1b27969f81db1b7068789d4bc6dadcf - depends: - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - - llvm-openmp >=21.1.5 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - track_features: - - openblas_threading_openmp - license: BSD-3-Clause - license_family: BSD - size: 4968974 - timestamp: 1763113962714 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 md5: 11d7d57b7bdd01da745bbf2b67020b2e @@ -12741,50 +11856,6 @@ packages: purls: [] size: 993166 timestamp: 1762022118895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.10.0-cuda130_mkl_hb2e6204_303.conda - sha256: a9cedb62ea683d6446a72d6f03af60462870d70d7ad3eb68ccd1d505ebd1bb2d - md5: 638f651bebabee410207b804afc84f30 - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - cuda-cudart >=13.0.96,<14.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - - cuda-nvrtc >=13.0.88,<14.0a0 - - cuda-nvtx >=13.0.85,<14.0a0 - - cuda-version >=13.0,<14 - - fmt >=12.1.0,<12.2.0a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libblas * *mkl - - libcblas >=3.11.0,<4.0a0 - - libcublas >=13.1.0.3,<14.0a0 - - libcudnn >=9.19.0.56,<10.0a0 - - libcudss >=0.7.1.4,<0.7.2.0a0 - - libcufft >=12.0.0.61,<13.0a0 - - libcufile >=1.15.1.6,<2.0a0 - - libcurand >=10.4.0.35,<11.0a0 - - libcusolver >=12.0.4.66,<13.0a0 - - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=14 - - libmagma >=2.9.0,<2.9.1.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - libuv >=1.51.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=22.1.0 - - mkl >=2025.3.0,<2026.0a0 - - nccl >=2.29.3.1,<3.0a0 - - pybind11-abi 11 - - sleef >=3.9.0,<4.0a0 - constrains: - - pytorch-gpu 2.10.0 - - pytorch 2.10.0 cuda130_mkl_*_303 - - pytorch-cpu <0.0a0 - license: BSD-3-Clause - license_family: BSD - size: 487186668 - timestamp: 1772223626192 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.1-cuda130_mkl_h5535f43_300.conda sha256: 2dd082b5b2c631b62824f41a13cfa88e0e37c6f28d187a9987cbfd116f5a3fd5 md5: 49b40832a1320f8eb0020d3e9bd18421 @@ -12812,72 +11883,25 @@ packages: - libcusparse >=12.6.3.3,<13.0a0 - libgcc >=14 - libmagma >=2.10.0,<2.10.1.0a0 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - - libuv >=1.52.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - llvm-openmp >=22.1.8 - - mkl >=2026.0.0,<2027.0a0 - - nccl >=2.30.7.1,<3.0a0 - - onednn >=3.12,<4.0a0 - - pybind11-abi 11 - - sleef >=3.9.0,<4.0a0 - constrains: - - pytorch-gpu 2.12.1 - - pytorch 2.12.1 cuda130_mkl_*_300 - - pytorch-cpu <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 472545686 - timestamp: 1781841819133 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.10.0-cuda130_generic_he6ac1af_203.conda - sha256: 9ca0feffff3f5c7b5ce0a2ab66ba8b15dd33c8b812e149cf98933964e51a4dfd - md5: f344404036b9bf7fe26e91e92f6c2b7c - depends: - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - arm-variant * sbsa - - cuda-cudart >=13.0.96,<14.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - - cuda-nvrtc >=13.0.88,<14.0a0 - - cuda-nvtx >=13.0.85,<14.0a0 - - cuda-version >=13.0,<14 - - fmt >=12.1.0,<12.2.0a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcublas >=13.1.0.3,<14.0a0 - - libcudnn >=9.19.0.56,<10.0a0 - - libcudss >=0.7.1.4,<0.7.2.0a0 - - libcufft >=12.0.0.61,<13.0a0 - - libcufile >=1.15.1.6,<2.0a0 - - libcurand >=10.4.0.35,<11.0a0 - - libcusolver >=12.0.4.66,<13.0a0 - - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=13 - - liblapack >=3.9.0,<4.0a0 - - libmagma >=2.9.0,<2.9.1.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=13 - - libuv >=1.51.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=22.1.0 - - nccl >=2.29.3.1,<3.0a0 + - libprotobuf >=7.35.1,<7.35.2.0a0 + - libstdcxx >=14 + - libuv >=1.52.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - llvm-openmp >=22.1.8 + - mkl >=2026.0.0,<2027.0a0 + - nccl >=2.30.7.1,<3.0a0 + - onednn >=3.12,<4.0a0 - pybind11-abi 11 - sleef >=3.9.0,<4.0a0 constrains: - - openblas * openmp_* - - pytorch 2.10.0 cuda130_generic_*_203 - - pytorch-gpu 2.10.0 - - libopenblas * openmp_* + - pytorch-gpu 2.12.1 + - pytorch 2.12.1 cuda130_mkl_*_300 - pytorch-cpu <0.0a0 license: BSD-3-Clause license_family: BSD - size: 468842829 - timestamp: 1772296520985 + purls: [] + size: 472545686 + timestamp: 1781841819133 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.12.1-cuda130_generic_h4328193_200.conda sha256: 0742a662e62af3e15a326d9927b62b6398fde5c4971a3863aeca178c80af49ff md5: 46a34bf52048dda3aacf071da129e979 @@ -13130,16 +12154,6 @@ packages: purls: [] size: 43248 timestamp: 1781625528371 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b - md5: 0f03292cc56bf91a077a134ea8747118 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - size: 895108 - timestamp: 1753948278280 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_0.conda sha256: e28e4519223f78b3163599ca89c3f2d80bfb53e907e7fc74e806e60d1efa578b md5: 4e33d49bf4fc853855a3b00643aa5484 @@ -13151,15 +12165,6 @@ packages: purls: [] size: 419935 timestamp: 1779396012261 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - sha256: 7a0fb5638582efc887a18b7d270b0c4a6f6e681bf401cab25ebafa2482569e90 - md5: 8e62bf5af966325ee416f19c6f14ffa3 - depends: - - libgcc >=14 - license: MIT - license_family: MIT - size: 629238 - timestamp: 1753948296190 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.52.1-h80f16a2_0.conda sha256: 3e2ead35f47d01364031f323f1be984018c8f19a3a264f952ddcd043685a1c86 md5: ac7bcbd2c77691cd6d1ede8c029e8c8a @@ -13760,18 +12765,6 @@ packages: purls: [] size: 58347 timestamp: 1774072851498 -- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.0-h4922eb0_0.conda - sha256: 543c9f17cf6ee6d7b635823fb9009df421d510c36739534df6ae43eadaf6ff4e - md5: 5e7da5333653c631d27732893b934351 - depends: - - __glibc >=2.17,<3.0.a0 - constrains: - - intel-openmp <0.0a0 - - openmp 22.1.0|22.1.0.* - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - size: 6136884 - timestamp: 1772024545 - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda sha256: a37aba21b85800af1e7c5b04ba76abab96b6e591eedf99dc6e4df83b0fefd7a5 md5: 7bbfdc5a6eca997d3b0873a575c3e155 @@ -13785,16 +12778,6 @@ packages: purls: [] size: 6123597 timestamp: 1781736521736 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.0-he40846f_0.conda - sha256: 08e50e981736118b6cc379096395bd725eeac1cb3852bcdfa1d2980acba39c29 - md5: 757e953866f430da9de3fcebf44d1474 - constrains: - - intel-openmp <0.0a0 - - openmp 22.1.0|22.1.0.* - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - size: 5902242 - timestamp: 1772024546951 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.8-he40846f_0.conda sha256: 30bbb0ce4ae7cebbeb9801af5bbd2a29f8627237a38d08fc5d8d800e79c817aa md5: 2107bb80c5587c116702ce215daddd73 @@ -14031,21 +13014,6 @@ packages: license: MIT AND BSD-3-Clause-Clear size: 123916 timestamp: 1759768539535 -- conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2025.3.0-h0e700b2_463.conda - sha256: 659d79976f06d2b796a0836414573a737a0856b05facfa77e5cc114081a8b3d4 - md5: f121ddfc96e6a93a26d85906adf06208 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - libgcc >=14 - - libstdcxx >=14 - - llvm-openmp >=21.1.8 - - tbb >=2022.3.0 - license: LicenseRef-IntelSimplifiedSoftwareOct2022 - license_family: Proprietary - size: 125728406 - timestamp: 1767634121080 - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2026.0.0-hecca717_915.conda sha256: 740a02cf7b3c0d6dd47dbb4d2e222ed23d326971fe608d737614db1033bd107d md5: 09feb8740f611ceb96f8b598bf08cdba @@ -14156,18 +13124,6 @@ packages: - pkg:pypi/more-itertools?source=compressed-mapping size: 71354 timestamp: 1775153285920 -- conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.3.1-h24ddda3_1.conda - sha256: 1bf794ddf2c8b3a3e14ae182577c624fa92dea975537accff4bc7e5fea085212 - md5: aa14b9a5196a6d8dd364164b7ce56acf - depends: - - __glibc >=2.17,<3.0.a0 - - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - - mpfr >=4.2.1,<5.0a0 - license: LGPL-3.0-or-later - license_family: LGPL - size: 116777 - timestamp: 1725629179524 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda sha256: c1fdeebc9f8e4f51df265efca4ea20c7a13911193cc255db73cccb6e422ae486 md5: 770d00bf57b5599c4544d61b61d8c6c6 @@ -14181,17 +13137,6 @@ packages: purls: [] size: 100245 timestamp: 1774472435333 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.3.1-h783934e_1.conda - sha256: b5b674f496ed28c0b2d08533c6f11eaf1840bf7d9c830655f51514f2f9d9a9c8 - md5: d3758cd24507dc1bda3483ce051d48ac - depends: - - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - - mpfr >=4.2.1,<5.0a0 - license: LGPL-3.0-or-later - license_family: LGPL - size: 132799 - timestamp: 1725629168783 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.4.0-he6dc3fb_0.conda sha256: 69f25e0c9ce2827097549a74a83f2c31c9c40fa4a668a4db96462e5a7eeb9634 md5: b3aa59caa59a7b0288a21b097f8b6bc4 @@ -14204,17 +13149,6 @@ packages: purls: [] size: 121080 timestamp: 1774472380541 -- conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h90cbb55_3.conda - sha256: f25d2474dd557ca66c6231c8f5ace5af312efde1ba8290a6ea5e1732a4e669c0 - md5: 2eeb50cab6652538eee8fc0bc3340c81 - depends: - - __glibc >=2.17,<3.0.a0 - - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - license: LGPL-3.0-only - license_family: LGPL - size: 634751 - timestamp: 1725746740014 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda sha256: 8690f550a780f75d9c47f7ffc15f5ff1c149d36ac17208e50eda101ca16611b9 md5: 85ce2ffa51ab21da5efa4a9edc5946aa @@ -14227,16 +13161,6 @@ packages: purls: [] size: 730422 timestamp: 1773413915171 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.1-h2305555_3.conda - sha256: abb35c37de2ec6c9ee89995142b1cfea9e6547202ba5578e5307834eca6d436f - md5: 65b21e8d5f0ec6a2f7e87630caed3318 - depends: - - gmp >=6.3.0,<7.0a0 - - libgcc >=13 - license: LGPL-3.0-only - license_family: LGPL - size: 1841314 - timestamp: 1725746723157 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.2-h3faef18_0.conda sha256: ca2c993ad80a54f3f13b6c7857f17301acaf30b48bb1c455d890f596892417f7 md5: 0fa4a1bcdb9e3224ab97b966d27e4949 @@ -14271,15 +13195,6 @@ packages: purls: [] size: 558708 timestamp: 1730581372400 -- conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.3.0-pyhd8ed1ab_1.conda - sha256: 7d7aa3fcd6f42b76bd711182f3776a02bef09a68c5f117d66b712a6d81368692 - md5: 3585aa87c43ab15b167b574cd73b057b - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - size: 439705 - timestamp: 1733302781386 - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda sha256: 5bbf2f8179ec43d34d67ca8e4989d216c1bdb4b749fe6cb40e86ebf88c1b5300 md5: 2e81b32b805f406d23ba61938a184081 @@ -14428,18 +13343,6 @@ packages: - pkg:pypi/nbformat?source=hash-mapping size: 100945 timestamp: 1733402844974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.29.3.1-h8340e53_0.conda - sha256: 3c232b089333a410033c81e31b0e8e7a627fadf781834a105a5160fabdd86423 - md5: 23700d608d839686cec4060178b94da8 - depends: - - __glibc >=2.28,<3.0.a0 - - cuda-version >=13,<14.0a0 - - libgcc >=14 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - size: 221809897 - timestamp: 1770778626119 - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.30.7.1-h1aa9b5a_0.conda sha256: f92f617b266c24ce25766750ee45e326cbf572a97af41ca6ccb2d140f6c3859c md5: d09e75d1fb0481ad255c74a23506696c @@ -14453,19 +13356,6 @@ packages: purls: [] size: 239421791 timestamp: 1781141768144 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.29.3.1-h7d52dd6_0.conda - sha256: 46facf5f8442e407d4953ad993a5e16c4929d3a8f1d25eb5b433f3777761b2cf - md5: 2c5a62a7e72792a3af760f7016c3871c - depends: - - __glibc >=2.28,<3.0.a0 - - arm-variant * sbsa - - cuda-version >=13,<14.0a0 - - libgcc >=14 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - size: 271172034 - timestamp: 1770779652233 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.30.7.1-h2b99535_0.conda sha256: 9a3b9fc08e42350eb1228bd17db136d063f9fedd388316eabd2af3e99ab732b7 md5: f963884eca3abe4251b3d9dd40c78109 @@ -14999,20 +13889,6 @@ packages: purls: [] size: 9414790 timestamp: 1781071745579 -- conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.0-py314h9891dd4_0.conda - sha256: 620379ebc27e1c43b9a8defdb167442a3413de949a464305443833db32ba7a83 - md5: e13172f02effa3c9f07571ed0ddef44d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - typing-extensions >=4.12 - license: Apache-2.0 - license_family: Apache - size: 504345 - timestamp: 1771868359859 - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.1-py314h9891dd4_0.conda sha256: 0bc01fdc2dccad1a38f680249414c0f6a006ce3bd3c3043bde89711ec7b3d074 md5: 44ffc8b345a7844a847d4fdf469d64ea @@ -15029,20 +13905,6 @@ packages: - pkg:pypi/optree?source=hash-mapping size: 513161 timestamp: 1778047690925 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.0-py314hd7d8586_0.conda - sha256: 78deba0984ab747179c1aa87f024d6597ecfba75378c9b4601046d9c8ab59956 - md5: 214ab44a77f6135a6b0178c1c9cb5149 - depends: - - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - - typing-extensions >=4.12 - license: Apache-2.0 - license_family: Apache - size: 467867 - timestamp: 1771868413266 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.1-py314hd7d8586_0.conda sha256: 4c255c7f435badb89df01c9eba8d9e9df0b6f8d36fe85abe1da54b81aaf04ff3 md5: 1b70477fda9714b24e56bf5691dd8cdc @@ -15557,19 +14419,6 @@ packages: license_family: MIT size: 25766 timestamp: 1733236452235 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.1-pyh7a1b43c_0.conda - sha256: 2558727093f13d4c30e124724566d16badd7de532fd8ee7483628977117d02be - md5: 70ece62498c769280f791e836ac53fff - depends: - - python >=3.8 - - pybind11-global ==3.0.1 *_0 - - python - constrains: - - pybind11-abi ==11 - license: BSD-3-Clause - license_family: BSD - size: 232875 - timestamp: 1755953378112 - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-3.0.3-pyhfe8187e_0.conda sha256: 71a9524f44d6ac6304feae71e2bbe8d8ce0816f0be7a0271c15681ad1040965d md5: e0f4549ccb507d4af8ed5c5345210673 @@ -15593,19 +14442,6 @@ packages: purls: [] size: 14671 timestamp: 1752769938071 -- conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.1-pyhc7ab6ef_0.conda - sha256: f11a5903879fe3a24e0d28329cb2b1945127e85a4cdb444b45545cf079f99e2d - md5: fe10b422ce8b5af5dab3740e4084c3f9 - depends: - - python >=3.8 - - __unix - - python - constrains: - - pybind11-abi ==11 - license: BSD-3-Clause - license_family: BSD - size: 228871 - timestamp: 1755953338243 - conda: https://conda.anaconda.org/conda-forge/noarch/pybind11-global-3.0.3-pyh648e204_0.conda sha256: 97a0fbd2a81d95e90d714e5c628fe860b29a3caad53abcfb90add1965ad85bef md5: 7fdc3e18c14b862ae5f064c1ea8e2636 @@ -15633,16 +14469,6 @@ packages: - pkg:pypi/pyclibrary?source=hash-mapping size: 437505 timestamp: 1734953615203 -- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 - md5: 12c566707c80111f9799308d9e265aef - depends: - - python >=3.9 - - python - license: BSD-3-Clause - license_family: BSD - size: 110100 - timestamp: 1733195786147 - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda sha256: e27e0473fc6723311a0bd48b89b616fa1b996a2f7a2b555338cbbcfb9c640568 md5: 9c5491066224083c41b6d5635ed7107b @@ -16046,65 +14872,6 @@ packages: purls: [] size: 6989 timestamp: 1752805904792 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.10.0-cuda130_mkl_py314_h382c374_303.conda - sha256: d86f460bddc5b3c443b109e30a1c7f1f9b4044eabf6356c49f19dd660720e395 - md5: 1a0371ac3f70358740c260541508f0f5 - depends: - - __cuda - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - cuda-cudart >=13.0.96,<14.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - - cuda-nvrtc >=13.0.88,<14.0a0 - - cuda-nvtx >=13.0.85,<14.0a0 - - cuda-version >=13.0,<14 - - filelock - - fmt >=12.1.0,<12.2.0a0 - - fsspec - - jinja2 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libblas * *mkl - - libcblas >=3.11.0,<4.0a0 - - libcublas >=13.1.0.3,<14.0a0 - - libcudnn >=9.19.0.56,<10.0a0 - - libcudss >=0.7.1.4,<0.7.2.0a0 - - libcufft >=12.0.0.61,<13.0a0 - - libcufile >=1.15.1.6,<2.0a0 - - libcurand >=10.4.0.35,<11.0a0 - - libcusolver >=12.0.4.66,<13.0a0 - - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=14 - - libmagma >=2.9.0,<2.9.1.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - libtorch 2.10.0 cuda130_mkl_hb2e6204_303 - - libuv >=1.51.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=22.1.0 - - mkl >=2025.3.0,<2026.0a0 - - mpmath <1.4 - - nccl >=2.29.3.1,<3.0a0 - - networkx - - numpy >=1.23,<3 - - optree >=0.13.0 - - pybind11 <3.0.2 - - pybind11-abi 11 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - setuptools - - sleef >=3.9.0,<4.0a0 - - sympy >=1.13.3 - - triton 3.6.0 - - typing_extensions >=4.10.0 - constrains: - - pytorch-gpu 2.10.0 - - pytorch-cpu <0.0a0 - license: BSD-3-Clause - license_family: BSD - size: 25484211 - timestamp: 1772227839293 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.1-cuda130_mkl_py314_h5d99997_300.conda sha256: dabbecc8dcf3af4718a4c5a80a5d44f280811873f27daa4b041f3ec20d8f533c md5: b25f00231badfc906d431c515ce7ecc6 @@ -16166,67 +14933,6 @@ packages: - pkg:pypi/torch?source=hash-mapping size: 26990927 timestamp: 1781843342171 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h7cb4a1c_203.conda - sha256: 70b45b24d9591f943ff3a5ffff9419af85293e318a5f001be41cd9538d4e21c9 - md5: eec5f372504eec64c324446bbfc8442a - depends: - - __cuda - - __glibc >=2.28,<3.0.a0 - - _openmp_mutex * *_llvm - - _openmp_mutex >=4.5 - - arm-variant * sbsa - - cuda-cudart >=13.0.96,<14.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - - cuda-nvrtc >=13.0.88,<14.0a0 - - cuda-nvtx >=13.0.85,<14.0a0 - - cuda-version >=13.0,<14 - - filelock - - fmt >=12.1.0,<12.2.0a0 - - fsspec - - jinja2 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcublas >=13.1.0.3,<14.0a0 - - libcudnn >=9.19.0.56,<10.0a0 - - libcudss >=0.7.1.4,<0.7.2.0a0 - - libcufft >=12.0.0.61,<13.0a0 - - libcufile >=1.15.1.6,<2.0a0 - - libcurand >=10.4.0.35,<11.0a0 - - libcusolver >=12.0.4.66,<13.0a0 - - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=13 - - liblapack >=3.9.0,<4.0a0 - - libmagma >=2.9.0,<2.9.1.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=13 - - libtorch 2.10.0 cuda130_generic_he6ac1af_203 - - libuv >=1.51.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - llvm-openmp >=22.1.0 - - mpmath <1.4 - - nccl >=2.29.3.1,<3.0a0 - - networkx - - nomkl - - numpy >=1.23,<3 - - optree >=0.13.0 - - pybind11 <3.0.2 - - pybind11-abi 11 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - - setuptools - - sleef >=3.9.0,<4.0a0 - - sympy >=1.13.3 - - triton 3.6.0 - - typing_extensions >=4.10.0 - constrains: - - pytorch-cpu <0.0a0 - - pytorch-gpu 2.10.0 - license: BSD-3-Clause - license_family: BSD - size: 24872224 - timestamp: 1772302448327 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.12.1-cuda130_generic_py314_h1da07bd_200.conda sha256: 46688459ca322948021c689eff157a2f87d0235c08d49f086fbf3dda0b8870d0 md5: 1736ee7eb6b9e5a82dc025b3a013a6e2 @@ -16290,15 +14996,6 @@ packages: - pkg:pypi/torch?source=hash-mapping size: 26781142 timestamp: 1781843840773 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.10.0-cuda129_mkl_h0d04637_303.conda - sha256: 9807474ce5bbbf81e7a92dd724f38f0dffcfefe5494619c2e94f2df469553bf5 - md5: 1050dc8cf80cd0a9e63f361c12ee0e82 - depends: - - pytorch 2.10.0 cuda*_mkl*303 - license: BSD-3-Clause - license_family: BSD - size: 53576 - timestamp: 1772317256452 - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.1-cuda129_mkl_h0d04637_300.conda sha256: 6962557638794695e9368fec8358913138de6ac42263f4106b0b0d289aa8c90f md5: e0e4cda52c574ebc52a1433de2f64b42 @@ -16309,16 +15006,6 @@ packages: purls: [] size: 55687 timestamp: 1781849857048 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda130_generic_h63a1e35_203.conda - sha256: 98c965bf49b087129af7ac9df6c218dbd5c9b9cd1d63d9f19af7b5cb8031a41c - md5: 0f82b7f7e338cd8d5b04b9b29c9db41f - depends: - - arm-variant * sbsa - - pytorch 2.10.0 cuda*_generic*203 - license: BSD-3-Clause - license_family: BSD - size: 53542 - timestamp: 1772302593139 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.12.1-cuda129_generic_hda344be_200.conda sha256: 0c149b792c00a17accbc4f3b944090a95e95e02f9a7a93dc81f5775f4ed20b9d md5: be94b3604dab4bba2c92d71aaf10d5c3 @@ -17701,28 +16388,6 @@ packages: - pkg:pypi/traitlets?source=hash-mapping size: 110051 timestamp: 1733367480074 -- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.6.0-cuda130py314h1cdc6f0_1.conda - sha256: 8046a92b0ceb057d131c10f6c012f9e46b414978fb230403e10476e8a0220599 - md5: b855d8e91cb36e00ef5b7e6424de667f - depends: - - python - - setuptools - - cuda-nvcc-tools - - cuda-cuobjdump - - cuda-cudart - - cuda-cupti - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.28,<3.0.a0 - - cuda-version >=13.0,<14 - - zstd >=1.5.7,<1.6.0a0 - - python_abi 3.14.* *_cp314 - - libzlib >=1.3.1,<2.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - license: MIT - license_family: MIT - size: 236152104 - timestamp: 1771627549811 - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.1-cuda130py314h1cdc6f0_1.conda sha256: c526abff27dd48435fe15019c4fec3c8a31c0435ea1d1f9fb5a8145cdc4319f0 md5: 13491b40def8e902433945de06b88b85 @@ -17747,30 +16412,6 @@ packages: - pkg:pypi/triton?source=hash-mapping size: 40376689 timestamp: 1781881965775 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_1.conda - sha256: 7a5e51bea6dd90c2d59fcbf6b06f722289409ff34eeaece2362b0a1429b6c84f - md5: c1e928be7f75d193cb83923f60ebc07e - depends: - - python - - setuptools - - cuda-nvcc-tools - - cuda-cuobjdump - - cuda-cudart - - cuda-cupti - - __glibc >=2.28,<3.0.a0 - - python 3.14.* *_cp314 - - arm-variant * sbsa - - libstdcxx >=14 - - libgcc >=14 - - cuda-version >=13.0,<14 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - - cuda-cupti >=13.0.85,<14.0a0 - - python_abi 3.14.* *_cp314 - license: MIT - license_family: MIT - size: 244688202 - timestamp: 1771627574163 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.7.1-cuda130py314ha788bc0_1.conda sha256: 29a6a5028fd2d99a35886b268045da54d27b9b15b30b96cf4f351d4b5b43c2b0 md5: aaee2741e58071208ce075fd1f89e4e9 diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index d4e97b5aede..9ee85474f52 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -235,5 +235,5 @@ cmd = [ depends-on = [{ task = "build-cython-tests" }] [tasks.test-samples] -cmd = ["pytest", "-rxXs", "-v", "$PIXI_PROJECT_ROOT/../tests/samples"] +cmd = ["pytest", "-rxXs", "-v", "$PIXI_PROJECT_ROOT/tests/example_tests/test_samples.py"] default-environment = "samples" diff --git a/tests/samples/run_samples.py b/cuda_core/tests/example_tests/run_samples.py similarity index 93% rename from tests/samples/run_samples.py rename to cuda_core/tests/example_tests/run_samples.py index 6ba17b19ba1..10ca54e8100 100644 --- a/tests/samples/run_samples.py +++ b/cuda_core/tests/example_tests/run_samples.py @@ -2,20 +2,23 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 """ -Sample test orchestrator for samples under ./samples/. +Sample test orchestrator for the standalone samples under the repo-root +``samples/`` directory. -``samples//.py``, applies per-sample overrides from -``tests/samples/test_args.json`` (same schema used in cuda-samples, plus a -``python`` sub-object for Python-specific CLI args / launcher), and executes -each sample in its own subprocess. +Discovers ``samples//.py``, applies per-sample overrides from +``test_args.json`` (same schema used in cuda-samples, plus a ``python`` +sub-object for Python-specific CLI args / launcher), and executes each sample +in its own subprocess. + +This module lives in the cuda.core test suite so the samples are exercised as +part of ``pytest cuda_core/tests`` (see ``test_samples.py``), but it can also +be invoked directly as a standalone runner: + python cuda_core/tests/example_tests/run_samples.py [--samples-dir samples] [--config .../test_args.json] Exit-code contract (matches cuda-samples): 0 -> sample passed 2 -> sample waived (missing dependency / unmet hardware requirement) * -> sample failed - -The script can be invoked directly: - python tests/samples/run_samples.py [--samples-dir samples] [--config tests/samples/test_args.json] """ from __future__ import annotations @@ -35,7 +38,9 @@ # Default timeout per sample run (seconds). Match cuda-samples. DEFAULT_TIMEOUT = 300 EXIT_WAIVED = 2 -REPO_ROOT = Path(__file__).resolve().parent.parent.parent +# This file lives at ``cuda_core/tests/example_tests/run_samples.py``; the +# repo root (which holds the top-level ``samples/`` directory) is four levels up. +REPO_ROOT = Path(__file__).resolve().parent.parent.parent.parent DEFAULT_SAMPLES_DIR = REPO_ROOT / "samples" DEFAULT_CONFIG = Path(__file__).resolve().parent / "test_args.json" @@ -361,7 +366,7 @@ def main(argv: list[str] | None = None) -> int: "--config", type=Path, default=DEFAULT_CONFIG, - help="Path to test_args.json (default: tests/samples/test_args.json)", + help="Path to test_args.json (default: alongside this script)", ) parser.add_argument( "--parallel", diff --git a/tests/samples/test_args.json b/cuda_core/tests/example_tests/test_args.json similarity index 100% rename from tests/samples/test_args.json rename to cuda_core/tests/example_tests/test_args.json diff --git a/tests/samples/test_samples.py b/cuda_core/tests/example_tests/test_samples.py similarity index 72% rename from tests/samples/test_samples.py rename to cuda_core/tests/example_tests/test_samples.py index 343d8fd388a..ea2a961f5d5 100644 --- a/tests/samples/test_samples.py +++ b/cuda_core/tests/example_tests/test_samples.py @@ -1,12 +1,14 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 """ -Pytest wrapper for samples under ./samples/. - -The samples themselves should be plain runnable scripts. - -This module uses ``run_samples.py`` to run the samples, which is a -convenience wrapper around the ``cuda_bindings.samples.run_samples`` module. +Pytest wrapper that runs the standalone samples under the repo-root +``samples/`` directory as part of the cuda.core test suite. + +The samples themselves are plain runnable scripts (they are periodically synced +to NVIDIA/cuda-samples). Each discovered sample is parametrized into its own +test id and executed in a subprocess via the ``run_samples`` orchestrator, so +this runs alongside the other cuda.core example tests under +``pytest cuda_core/tests``. """ from __future__ import annotations @@ -39,6 +41,9 @@ def _collect_samples() -> list[str]: _GPU_COUNT = get_gpu_count() if _SAMPLES else 0 +# Samples launch full GPU workloads in their own subprocess, so keep them +# serialized when the suite is run under pytest-run-parallel. +@pytest.mark.parallel_threads_limit(1) @pytest.mark.parametrize("sample_name", _SAMPLES) def test_sample(sample_name: str) -> None: if _GPU_COUNT == 0: diff --git a/pytest.ini b/pytest.ini index 2e025401e29..f99657dbafa 100644 --- a/pytest.ini +++ b/pytest.ini @@ -13,14 +13,13 @@ testpaths = cuda_bindings/tests cuda_core/tests tests/integration - tests/samples ci/tools/tests markers = pathfinder: tests for cuda_pathfinder bindings: tests for cuda_bindings core: tests for cuda_core - samples: tests for the standalone samples under ./samples + samples: tests for the standalone samples under ./samples (run within the cuda_core suite) cython: cython tests smoke: meta-level smoke tests flaky: mark test as flaky (provided by pytest-rerunfailures) diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 19a698394f4..7d46a39f85f 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -24,10 +24,9 @@ Usage: scripts/run_tests.sh [options] [target] Targets: all (default) Run pathfinder → bindings → core - core Run cuda_core tests + core Run cuda_core tests (includes the ./samples tests) bindings Run cuda_bindings tests pathfinder Run cuda_pathfinder tests - samples Run samples tests (tests/samples) smoke Run meta-level smoke tests (tests/integration) Options: @@ -262,14 +261,6 @@ PY add_result "smoke" "${rc}" } -run_samples() { - echo "[tests] samples" - cd "${repo_root}" - run_pytest tests/samples - local rc=$? - add_result "samples" "${rc}" -} - case "${target}" in all) run_pathfinder @@ -282,8 +273,6 @@ case "${target}" in run_bindings ;; pathfinder) run_pathfinder ;; - samples) - run_samples ;; smoke) run_smoke ;; *) diff --git a/tests/samples/__init__.py b/tests/samples/__init__.py deleted file mode 100644 index e5725ea5a48..00000000000 --- a/tests/samples/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 diff --git a/toolshed/check_spdx.py b/toolshed/check_spdx.py index 1bf3afebbd9..541fcbc0ddd 100644 --- a/toolshed/check_spdx.py +++ b/toolshed/check_spdx.py @@ -34,7 +34,6 @@ "qa": "LicenseRef-NVIDIA-SOFTWARE-LICENSE", "samples": "Apache-2.0", "scripts": "Apache-2.0", - "tests": "Apache-2.0", "toolshed": "Apache-2.0", } From 0b2728ee7f7a69d6c36f21344961bb3a199ec027 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 16 Jul 2026 11:28:23 -0500 Subject: [PATCH 04/11] Drop duplicated samples and add missing content to /samples --- cuda_bindings/docs/source/conf.py | 8 + cuda_bindings/docs/source/examples.rst | 11 +- .../examples/0_Introduction/simple_p2p.py | 249 --------------- .../0_Introduction/simple_zero_copy.py | 196 ------------ cuda_core/docs/source/conf.py | 8 + cuda_core/docs/source/examples.rst | 51 +-- cuda_core/docs/source/getting-started.rst | 4 +- cuda_core/examples/cuda_graphs.py | 182 ----------- cuda_core/examples/graph_update.py | 100 ------ cuda_core/examples/jit_lto_fractal.py | 301 ------------------ cuda_core/examples/memory_ops.py | 149 --------- cuda_core/examples/memory_pool_resources.py | 141 -------- cuda_core/examples/pytorch_example.py | 118 ------- cuda_core/examples/saxpy.py | 132 -------- cuda_core/examples/show_device_properties.py | 251 --------------- cuda_core/examples/tma_tensor_map.py | 189 ----------- cuda_core/examples/vector_add.py | 76 ----- .../example_tests/test_basic_examples.py | 44 +-- samples/cudaGraphs/README.md | 19 +- samples/cudaGraphs/cudaGraphs.py | 85 ++--- samples/deviceQuery/README.md | 18 ++ samples/deviceQuery/deviceQuery.py | 216 ++++++++++++- samples/jitLtoLinking/README.md | 19 +- samples/jitLtoLinking/jitLtoLinking.py | 71 +++-- samples/memoryResources/README.md | 29 +- samples/memoryResources/memoryResources.py | 120 +++++++ samples/vectorAdd/README.md | 34 +- samples/vectorAdd/vectorAdd.py | 136 +++++--- 28 files changed, 660 insertions(+), 2297 deletions(-) delete mode 100644 cuda_bindings/examples/0_Introduction/simple_p2p.py delete mode 100644 cuda_bindings/examples/0_Introduction/simple_zero_copy.py delete mode 100644 cuda_core/examples/cuda_graphs.py delete mode 100644 cuda_core/examples/graph_update.py delete mode 100644 cuda_core/examples/jit_lto_fractal.py delete mode 100644 cuda_core/examples/memory_ops.py delete mode 100644 cuda_core/examples/memory_pool_resources.py delete mode 100644 cuda_core/examples/pytorch_example.py delete mode 100644 cuda_core/examples/saxpy.py delete mode 100644 cuda_core/examples/show_device_properties.py delete mode 100644 cuda_core/examples/tma_tensor_map.py delete mode 100644 cuda_core/examples/vector_add.py diff --git a/cuda_bindings/docs/source/conf.py b/cuda_bindings/docs/source/conf.py index 64f28ace24d..300b513a0bb 100644 --- a/cuda_bindings/docs/source/conf.py +++ b/cuda_bindings/docs/source/conf.py @@ -129,6 +129,14 @@ def _html_baseurl(): f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/cuda_bindings/examples%s", "%s", ), + "sample": ( + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/%s", + "%s", + ), + "samples": ( + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples%s", + "%s", + ), } intersphinx_mapping = { diff --git a/cuda_bindings/docs/source/examples.rst b/cuda_bindings/docs/source/examples.rst index a9a588a8502..125b8d205ab 100644 --- a/cuda_bindings/docs/source/examples.rst +++ b/cuda_bindings/docs/source/examples.rst @@ -17,10 +17,6 @@ Introduction kernel. - :cuda-bindings-example:`simple_cubemap_texture.py <0_Introduction/simple_cubemap_texture.py>` demonstrates cubemap texture sampling and transformation. -- :cuda-bindings-example:`simple_p2p.py <0_Introduction/simple_p2p.py>` - shows peer-to-peer memory access and transfers between multiple GPUs. -- :cuda-bindings-example:`simple_zero_copy.py <0_Introduction/simple_zero_copy.py>` - uses zero-copy mapped host memory for vector addition. - :cuda-bindings-example:`system_wide_atomics.py <0_Introduction/system_wide_atomics.py>` demonstrates system-wide atomic operations on managed memory. - :cuda-bindings-example:`vector_add_drv.py <0_Introduction/vector_add_drv.py>` @@ -29,6 +25,13 @@ Introduction uses virtual memory management APIs such as ``cuMemCreate`` and ``cuMemMap`` for vector addition. +Peer-to-peer and zero-copy patterns (``simple_p2p.py`` and +``simple_zero_copy.py``) are covered by the higher-level +:samples:`samples/simpleP2P/ ` and +:samples:`samples/simpleZeroCopy/ ` sample directories, +which use ``cuda.core``'s modern peer-access and pinned-memory APIs on top +of ``cuda.bindings``. + Concepts and techniques ----------------------- diff --git a/cuda_bindings/examples/0_Introduction/simple_p2p.py b/cuda_bindings/examples/0_Introduction/simple_p2p.py deleted file mode 100644 index f1548adc259..00000000000 --- a/cuda_bindings/examples/0_Introduction/simple_p2p.py +++ /dev/null @@ -1,249 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates peer-to-peer memory access and data transfer -# between multiple GPUs. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes -import platform -import sys - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, requirement_not_met - -simplep2p = """\ -extern "C" -__global__ void SimpleKernel(float *src, float *dst) -{ - // Just a dummy kernel, doing enough for us to verify that everything - // worked - const int idx = blockIdx.x * blockDim.x + threadIdx.x; - dst[idx] = src[idx] * 2.0f; -} -""" - - -def main(): - if platform.system() == "Darwin": - requirement_not_met("simpleP2P is not supported on Mac OSX") - - if platform.machine() == "armv7l": - requirement_not_met("simpleP2P is not supported on ARMv7") - - if platform.machine() == "aarch64": - requirement_not_met("simpleP2P is not supported on aarch64") - - if platform.machine() == "sbsa": - requirement_not_met("simpleP2P is not supported on sbsa") - - # Number of GPUs - print("Checking for multiple GPUs...") - gpu_n = check_cuda_errors(cudart.cudaGetDeviceCount()) - print(f"CUDA-capable device count: {gpu_n}") - - if gpu_n < 2: - requirement_not_met("Two or more GPUs with Peer-to-Peer access capability are required") - - prop = [check_cuda_errors(cudart.cudaGetDeviceProperties(i)) for i in range(gpu_n)] - # Check possibility for peer access - print("\nChecking GPU(s) for support of peer to peer memory access...") - - p2p_capable_gp_us = [-1, -1] - for i in range(gpu_n): - p2p_capable_gp_us[0] = i - for j in range(gpu_n): - if i == j: - continue - i_access_j = check_cuda_errors(cudart.cudaDeviceCanAccessPeer(i, j)) - j_access_i = check_cuda_errors(cudart.cudaDeviceCanAccessPeer(j, i)) - print( - "> Peer access from {} (GPU{}) -> {} (GPU{}) : {}\n".format( - prop[i].name, i, prop[j].name, j, "Yes" if i_access_j else "No" - ) - ) - print( - "> Peer access from {} (GPU{}) -> {} (GPU{}) : {}\n".format( - prop[j].name, j, prop[i].name, i, "Yes" if j_access_i else "No" - ) - ) - if i_access_j and j_access_i: - p2p_capable_gp_us[1] = j - break - if p2p_capable_gp_us[1] != -1: - break - - if p2p_capable_gp_us[0] == -1 or p2p_capable_gp_us[1] == -1: - requirement_not_met("Peer to Peer access is not available amongst GPUs in the system") - - # Use first pair of p2p capable GPUs detected - gpuid = [p2p_capable_gp_us[0], p2p_capable_gp_us[1]] - - # Enable peer access - print(f"Enabling peer access between GPU{gpuid[0]} and GPU{gpuid[1]}...") - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - check_cuda_errors(cudart.cudaDeviceEnablePeerAccess(gpuid[1], 0)) - check_cuda_errors(cudart.cudaSetDevice(gpuid[1])) - check_cuda_errors(cudart.cudaDeviceEnablePeerAccess(gpuid[0], 0)) - - # Allocate buffers - buf_size = 1024 * 1024 * 16 * np.dtype(np.float32).itemsize - print(f"Allocating buffers ({int(buf_size / 1024 / 1024)}MB on GPU{gpuid[0]}, GPU{gpuid[1]} and CPU Host)...") - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - g0 = check_cuda_errors(cudart.cudaMalloc(buf_size)) - check_cuda_errors(cudart.cudaSetDevice(gpuid[1])) - g1 = check_cuda_errors(cudart.cudaMalloc(buf_size)) - h0 = check_cuda_errors(cudart.cudaMallocHost(buf_size)) # Automatically portable with UVA - - # Create CUDA event handles - print("Creating event handles...") - eventflags = cudart.cudaEventBlockingSync - start_event = check_cuda_errors(cudart.cudaEventCreateWithFlags(eventflags)) - stop_event = check_cuda_errors(cudart.cudaEventCreateWithFlags(eventflags)) - - # P2P memcopy() benchmark - check_cuda_errors(cudart.cudaEventRecord(start_event, cudart.cudaStream_t(0))) - - for i in range(100): - # With UVA we don't need to specify source and target devices, the - # runtime figures this out by itself from the pointers - # Ping-pong copy between GPUs - if i % 2 == 0: - check_cuda_errors(cudart.cudaMemcpy(g1, g0, buf_size, cudart.cudaMemcpyKind.cudaMemcpyDefault)) - else: - check_cuda_errors(cudart.cudaMemcpy(g0, g1, buf_size, cudart.cudaMemcpyKind.cudaMemcpyDefault)) - - check_cuda_errors(cudart.cudaEventRecord(stop_event, cudart.cudaStream_t(0))) - check_cuda_errors(cudart.cudaEventSynchronize(stop_event)) - time_memcpy = check_cuda_errors(cudart.cudaEventElapsedTime(start_event, stop_event)) - print( - f"cudaMemcpyPeer / cudaMemcpy between GPU{gpuid[0]} and GPU{gpuid[1]}: {(1.0 / (time_memcpy / 1000.0)) * (100.0 * buf_size) / 1024.0 / 1024.0 / 1024.0:.2f}GB/s" - ) - - # Prepare host buffer and copy to GPU 0 - print(f"Preparing host buffer and memcpy to GPU{gpuid[0]}...") - - h0_local = (ctypes.c_float * int(buf_size / np.dtype(np.float32).itemsize)).from_address(h0) - for i in range(int(buf_size / np.dtype(np.float32).itemsize)): - h0_local[i] = i % 4096 - - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - check_cuda_errors(cudart.cudaMemcpy(g0, h0, buf_size, cudart.cudaMemcpyKind.cudaMemcpyDefault)) - - # Kernel launch configuration - threads = cudart.dim3() - threads.x = 512 - threads.y = 1 - threads.z = 1 - blocks = cudart.dim3() - blocks.x = (buf_size / np.dtype(np.float32).itemsize) / threads.x - blocks.y = 1 - blocks.z = 1 - - # Run kernel on GPU 1, reading input from the GPU 0 buffer, writing - # output to the GPU 1 buffer - print(f"Run kernel on GPU{gpuid[1]}, taking source data from GPU{gpuid[0]} and writing to GPU{gpuid[1]}...") - check_cuda_errors(cudart.cudaSetDevice(gpuid[1])) - - kernel_helper = [None] * 2 - _simple_kernel = [None] * 2 - kernel_args = [None] * 2 - - kernel_helper[1] = KernelHelper(simplep2p, gpuid[1]) - _simple_kernel[1] = kernel_helper[1].get_function(b"SimpleKernel") - kernel_args[1] = ((g0, g1), (ctypes.c_void_p, ctypes.c_void_p)) - check_cuda_errors( - cuda.cuLaunchKernel( - _simple_kernel[1], - blocks.x, - blocks.y, - blocks.z, - threads.x, - threads.y, - threads.z, - 0, - 0, - kernel_args[1], - 0, - ) - ) - - check_cuda_errors(cudart.cudaDeviceSynchronize()) - - # Run kernel on GPU 0, reading input from the GPU 1 buffer, writing - # output to the GPU 0 buffer - print(f"Run kernel on GPU{gpuid[0]}, taking source data from GPU{gpuid[1]} and writing to GPU{gpuid[0]}...") - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - kernel_helper[0] = KernelHelper(simplep2p, gpuid[0]) - _simple_kernel[0] = kernel_helper[0].get_function(b"SimpleKernel") - kernel_args[0] = ((g1, g0), (ctypes.c_void_p, ctypes.c_void_p)) - check_cuda_errors( - cuda.cuLaunchKernel( - _simple_kernel[0], - blocks.x, - blocks.y, - blocks.z, - threads.x, - threads.y, - threads.z, - 0, - 0, - kernel_args[0], - 0, - ) - ) - - check_cuda_errors(cudart.cudaDeviceSynchronize()) - - # Copy data back to host and verify - print(f"Copy data back to host from GPU{gpuid[0]} and verify results...") - check_cuda_errors(cudart.cudaMemcpy(h0, g0, buf_size, cudart.cudaMemcpyKind.cudaMemcpyDefault)) - - error_count = 0 - - for i in range(int(buf_size / np.dtype(np.float32).itemsize)): - # Re-generate input data and apply 2x '* 2.0f' computation of both - # kernel runs - if h0_local[i] != float(i % 4096) * 2.0 * 2.0: - print(f"Verification error @ element {i}: val = {h0_local[i]}, ref = {float(i % 4096) * 2.0 * 2.0}\n") - error_count += 1 - if error_count > 10: - break - - # Disable peer access (also unregisters memory for non-UVA cases) - print("Disabling peer access...") - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - check_cuda_errors(cudart.cudaDeviceDisablePeerAccess(gpuid[1])) - check_cuda_errors(cudart.cudaSetDevice(gpuid[1])) - check_cuda_errors(cudart.cudaDeviceDisablePeerAccess(gpuid[0])) - - # Cleanup and shutdown - print("Shutting down...") - check_cuda_errors(cudart.cudaEventDestroy(start_event)) - check_cuda_errors(cudart.cudaEventDestroy(stop_event)) - check_cuda_errors(cudart.cudaSetDevice(gpuid[0])) - check_cuda_errors(cudart.cudaFree(g0)) - check_cuda_errors(cudart.cudaSetDevice(gpuid[1])) - check_cuda_errors(cudart.cudaFree(g1)) - check_cuda_errors(cudart.cudaFreeHost(h0)) - - for i in range(gpu_n): - check_cuda_errors(cudart.cudaSetDevice(i)) - - if error_count != 0: - print("Test failed!", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/0_Introduction/simple_zero_copy.py b/cuda_bindings/examples/0_Introduction/simple_zero_copy.py deleted file mode 100644 index ff47696cb6c..00000000000 --- a/cuda_bindings/examples/0_Introduction/simple_zero_copy.py +++ /dev/null @@ -1,196 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates vector addition using zero-copy (mapped) host -# memory, allowing the GPU to access CPU memory directly. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes -import math -import platform -import random as rnd -import sys - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import ( - KernelHelper, - check_cmd_line_flag, - check_cuda_errors, - get_cmd_line_argument_int, - requirement_not_met, -) - -simple_zero_copy = """\ -extern "C" -__global__ void vectorAddGPU(float *a, float *b, float *c, int N) -{ - int idx = blockIdx.x*blockDim.x + threadIdx.x; - - if (idx < N) - { - c[idx] = a[idx] + b[idx]; - } -} -""" - - -def main(): - idev = 0 - b_pin_generic_memory = False - - if platform.system() == "Darwin": - requirement_not_met("simpleZeroCopy is not supported on Mac OSX") - - if platform.machine() == "armv7l": - requirement_not_met("simpleZeroCopy is not supported on ARMv7") - - if platform.machine() == "aarch64": - requirement_not_met("simpleZeroCopy is not supported on aarch64") - - if platform.machine() == "sbsa": - requirement_not_met("simpleZeroCopy is not supported on sbsa") - - if check_cmd_line_flag("help"): - print("Usage: simpleZeroCopy [OPTION]\n", file=sys.stderr) - print("Options:", file=sys.stderr) - print(" device=[device #] Specify the device to be used", file=sys.stderr) - print(" use_generic_memory (optional) use generic page-aligned for system memory", file=sys.stderr) - sys.exit(1) - - # Get the device selected by the user or default to 0, and then set it. - if check_cmd_line_flag("device="): - device_count = cudart.cudaGetDeviceCount() - idev = int(get_cmd_line_argument_int("device=")) - - if idev >= device_count or idev < 0: - print(f"Device number {idev} is invalid, will use default CUDA device 0.") - idev = 0 - - if check_cmd_line_flag("use_generic_memory"): - b_pin_generic_memory = True - - if b_pin_generic_memory: - print("> Using Generic System Paged Memory (malloc)") - else: - print("> Using CUDA Host Allocated (cudaHostAlloc)") - - check_cuda_errors(cudart.cudaSetDevice(idev)) - - # Verify the selected device supports mapped memory and set the device flags for mapping host memory. - device_prop = check_cuda_errors(cudart.cudaGetDeviceProperties(idev)) - - if not device_prop.canMapHostMemory: - requirement_not_met(f"Device {idev} does not support mapping CPU host memory!") - - check_cuda_errors(cudart.cudaSetDeviceFlags(cudart.cudaDeviceMapHost)) - - # Allocate mapped CPU memory - - nelem = 1048576 - num_bytes = nelem * np.dtype(np.float32).itemsize - - if b_pin_generic_memory: - a = np.empty(nelem, dtype=np.float32) - b = np.empty(nelem, dtype=np.float32) - c = np.empty(nelem, dtype=np.float32) - - check_cuda_errors(cudart.cudaHostRegister(a, num_bytes, cudart.cudaHostRegisterMapped)) - check_cuda_errors(cudart.cudaHostRegister(b, num_bytes, cudart.cudaHostRegisterMapped)) - check_cuda_errors(cudart.cudaHostRegister(c, num_bytes, cudart.cudaHostRegisterMapped)) - else: - flags = cudart.cudaHostAllocMapped - a_ptr = check_cuda_errors(cudart.cudaHostAlloc(num_bytes, flags)) - b_ptr = check_cuda_errors(cudart.cudaHostAlloc(num_bytes, flags)) - c_ptr = check_cuda_errors(cudart.cudaHostAlloc(num_bytes, flags)) - - a = (ctypes.c_float * nelem).from_address(a_ptr) - b = (ctypes.c_float * nelem).from_address(b_ptr) - c = (ctypes.c_float * nelem).from_address(c_ptr) - - # Initialize the vectors - for n in range(nelem): - a[n] = rnd.random() - b[n] = rnd.random() - - # Get the device pointers for the pinned CPU memory mapped into the GPU memory space - d_a = check_cuda_errors(cudart.cudaHostGetDevicePointer(a, 0)) - d_b = check_cuda_errors(cudart.cudaHostGetDevicePointer(b, 0)) - d_c = check_cuda_errors(cudart.cudaHostGetDevicePointer(c, 0)) - - # Call the GPU kernel using the CPU pointers residing in CPU mapped memory - print("> vectorAddGPU kernel will add vectors using mapped CPU memory...") - block = cudart.dim3() - block.x = 256 - block.y = 1 - block.z = 1 - grid = cudart.dim3() - grid.x = math.ceil(nelem / float(block.x)) - grid.y = 1 - grid.z = 1 - kernel_helper = KernelHelper(simple_zero_copy, idev) - _vector_add_gpu = kernel_helper.get_function(b"vectorAddGPU") - kernel_args = ( - (d_a, d_b, d_c, nelem), - (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int), - ) - check_cuda_errors( - cuda.cuLaunchKernel( - _vector_add_gpu, - grid.x, - grid.y, - grid.z, - block.x, - block.y, - block.z, - 0, - cuda.CU_STREAM_LEGACY, - kernel_args, - 0, - ) - ) - check_cuda_errors(cudart.cudaDeviceSynchronize()) - - print("> Checking the results from vectorAddGPU() ...") - # Compare the results - error_norm = 0.0 - ref_norm = 0.0 - - for n in range(nelem): - ref = a[n] + b[n] - diff = c[n] - ref - error_norm += diff * diff - ref_norm += ref * ref - - error_norm = math.sqrt(error_norm) - ref_norm = math.sqrt(ref_norm) - - # Memory clean up - - print("Releasing CPU memory...") - - if b_pin_generic_memory: - check_cuda_errors(cudart.cudaHostUnregister(a)) - check_cuda_errors(cudart.cudaHostUnregister(b)) - check_cuda_errors(cudart.cudaHostUnregister(c)) - else: - check_cuda_errors(cudart.cudaFreeHost(a)) - check_cuda_errors(cudart.cudaFreeHost(b)) - check_cuda_errors(cudart.cudaFreeHost(c)) - - if error_norm / ref_norm >= 1.0e-7: - print("FAILED", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_core/docs/source/conf.py b/cuda_core/docs/source/conf.py index 451eb8b4453..598981bdb17 100644 --- a/cuda_core/docs/source/conf.py +++ b/cuda_core/docs/source/conf.py @@ -129,6 +129,14 @@ def _html_baseurl(): f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/cuda_core/examples%s", "%s", ), + "sample": ( + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/%s", + "%s", + ), + "samples": ( + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples%s", + "%s", + ), } intersphinx_mapping = { diff --git a/cuda_core/docs/source/examples.rst b/cuda_core/docs/source/examples.rst index cf13961c6dc..bd693baa073 100644 --- a/cuda_core/docs/source/examples.rst +++ b/cuda_core/docs/source/examples.rst @@ -4,46 +4,25 @@ Examples ======== -This page links to the ``cuda.core`` examples shipped in the -:cuda-core-examples:`cuda-python repository `. -Use it as a quick index when you want a runnable starting point for a specific -workflow. +The canonical, runnable examples for ``cuda.core`` live under the top-level +:samples:`samples/ directory ` of the cuda-python repository. They are +self-contained scripts (each with a ``README.md`` and PEP 723 dependency +block) and are exercised as part of the ``cuda.core`` test suite. -Compilation and kernel launch ------------------------------ +Use the samples directory as your first stop when looking for a runnable +starting point for a specific workflow. The remaining entries below are the +few examples still hosted alongside the package that have not yet been +migrated to ``samples/``. -- :cuda-core-example:`vector_add.py ` - compiles and launches a simple vector-add kernel with CuPy arrays. -- :cuda-core-example:`saxpy.py ` - JIT-compiles a templated SAXPY kernel and launches both float and double - instantiations. -- :cuda-core-example:`pytorch_example.py ` - launches a CUDA kernel with PyTorch tensors and a wrapped PyTorch stream. - -Multi-device and advanced launch configuration ----------------------------------------------- +Not yet migrated to samples/ +---------------------------- - :cuda-core-example:`simple_multi_gpu_example.py ` compiles and launches kernels across multiple GPUs. - :cuda-core-example:`thread_block_cluster.py ` demonstrates thread block cluster launch configuration on Hopper-class GPUs. -- :cuda-core-example:`tma_tensor_map.py ` - demonstrates Tensor Memory Accelerator descriptors and TMA-based bulk copies. - -Linking and graphs ------------------- - -- :cuda-core-example:`jit_lto_fractal.py ` - uses JIT link-time optimization to link user-provided device code into a - fractal workflow at runtime. -- :cuda-core-example:`cuda_graphs.py ` - captures and replays a multi-kernel CUDA graph to reduce launch overhead. - -Interoperability and memory access ----------------------------------- - -- :cuda-core-example:`memory_ops.py ` - covers memory resources, pinned memory, device transfers, and DLPack interop. +- :cuda-core-example:`strided_memory_view_constructors.py ` + walks through the explicit ``StridedMemoryView.from_*`` constructors. - :cuda-core-example:`strided_memory_view_cpu.py ` uses ``StridedMemoryView`` with JIT-compiled CPU code via ``cffi``. - :cuda-core-example:`strided_memory_view_gpu.py ` @@ -51,9 +30,3 @@ Interoperability and memory access - :cuda-core-example:`gl_interop_plasma.py ` renders a CUDA-generated plasma effect through OpenGL interop without CPU copies. - -System inspection ------------------ - -- :cuda-core-example:`show_device_properties.py ` - prints a detailed report of the CUDA devices available on the system. diff --git a/cuda_core/docs/source/getting-started.rst b/cuda_core/docs/source/getting-started.rst index e03ce23782f..1976636f808 100644 --- a/cuda_core/docs/source/getting-started.rst +++ b/cuda_core/docs/source/getting-started.rst @@ -32,7 +32,7 @@ Example: Compiling and Launching a CUDA kernel ---------------------------------------------- To get a taste for ``cuda.core``, let's walk through a simple example that compiles and launches a vector addition kernel. -You can find the complete example in :cuda-core-example:`vector_add.py ` +You can find the complete example in :sample:`samples/vectorAdd/vectorAdd.py ` and browse the :doc:`examples page ` for the rest of the shipped workflows. @@ -80,7 +80,7 @@ Note the use of the ``name_expressions`` parameter to the :meth:`Program.compile Next, we retrieve the compiled kernel from the CUBIN and prepare the arguments and kernel configuration. We're using `CuPy `_ arrays as inputs for this example, but you can use PyTorch tensors too (see -:cuda-core-example:`pytorch_example.py ` +:sample:`samples/customPyTorchKernel/customPyTorchKernel.py ` and the :doc:`examples page `). .. code-block:: python diff --git a/cuda_core/examples/cuda_graphs.py b/cuda_core/examples/cuda_graphs.py deleted file mode 100644 index 57321dd48c8..00000000000 --- a/cuda_core/examples/cuda_graphs.py +++ /dev/null @@ -1,182 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates CUDA graphs to capture and execute multiple -# kernel launches with minimal overhead. The graph performs a sequence of -# vector operations: add, multiply, and subtract. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - -import sys -import time - -import cupy as cp - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch - - -def main(): - # CUDA kernels for vector operations - code = """ - template - __global__ void vector_add(const T* A, const T* B, T* C, size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { - C[i] = A[i] + B[i]; - } - } - - template - __global__ void vector_multiply(const T* A, const T* B, T* C, size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { - C[i] = A[i] * B[i]; - } - } - - template - __global__ void vector_subtract(const T* A, const T* B, T* C, size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { - C[i] = A[i] - B[i]; - } - } - """ - - # Initialize device and stream - dev = Device() - dev.set_current() - stream = dev.create_stream() - graph_builder = None - graph = None - # tell CuPy to use our stream as the current stream: - cp.cuda.ExternalStream(int(stream.handle)).use() - - try: - # Compile the program - program_options = ProgramOptions(std="c++17", arch=f"sm_{dev.arch}") - prog = Program(code, code_type="c++", options=program_options) - mod = prog.compile( - "cubin", name_expressions=("vector_add", "vector_multiply", "vector_subtract") - ) - - # Get kernel functions - add_kernel = mod.get_kernel("vector_add") - multiply_kernel = mod.get_kernel("vector_multiply") - subtract_kernel = mod.get_kernel("vector_subtract") - - # Prepare data - size = 1000000 - dtype = cp.float32 - - # Create input arrays - rng = cp.random.default_rng(42) # Fixed seed for reproducibility - a = rng.random(size, dtype=dtype) - b = rng.random(size, dtype=dtype) - c = rng.random(size, dtype=dtype) - - # Create output arrays - result1 = cp.empty_like(a) - result2 = cp.empty_like(a) - result3 = cp.empty_like(a) - - # Prepare launch configuration - block = 256 - grid = (size + block - 1) // block - config = LaunchConfig(grid=grid, block=block) - - # Sync before graph capture - dev.sync() - - print("Building CUDA graph...", file=sys.stderr) - - # Build the graph - graph_builder = stream.create_graph_builder() - graph_builder.begin_building() - - # Add multiple kernel launches to the graph - # Kernel 1: result1 = a + b - launch(graph_builder, config, add_kernel, a.data.ptr, b.data.ptr, result1.data.ptr, cp.uint64(size)) - - # Kernel 2: result2 = result1 * c - launch(graph_builder, config, multiply_kernel, result1.data.ptr, c.data.ptr, result2.data.ptr, cp.uint64(size)) - - # Kernel 3: result3 = result2 - a - launch(graph_builder, config, subtract_kernel, result2.data.ptr, a.data.ptr, result3.data.ptr, cp.uint64(size)) - - # Complete the graph - graph = graph_builder.end_building().complete() - - # Upload the graph to the stream - graph.upload(stream) - - # Execute the entire graph with a single launch - print("Executing graph...", file=sys.stderr) - start_time = time.time() - graph.launch(stream) - stream.sync() - end_time = time.time() - - graph_execution_time = end_time - start_time - if graph_execution_time == 0.0: - print("Graph execution time is too fast to measure accurately.") - graph_execution_time = 1e-9 # Assign a small value to avoid division by zero in speedup calculation - print(f"Graph execution time: {graph_execution_time:.6f} seconds") - - # Verify results - expected_result1 = a + b - expected_result2 = expected_result1 * c - expected_result3 = expected_result2 - a - - assert cp.allclose(result1, expected_result1, rtol=1e-5, atol=1e-5), "Result 1 mismatch" - assert cp.allclose(result2, expected_result2, rtol=1e-5, atol=1e-5), "Result 2 mismatch" - assert cp.allclose(result3, expected_result3, rtol=1e-5, atol=1e-5), "Result 3 mismatch" - - # Demonstrate performance benefit by running the same operations without graph - print("\nRunning same operations without graph for comparison...", file=sys.stderr) - - # Reset results - result1.fill(0) - result2.fill(0) - result3.fill(0) - - start_time = time.time() - - # Individual kernel launches - launch(stream, config, add_kernel, a.data.ptr, b.data.ptr, result1.data.ptr, cp.uint64(size)) - launch(stream, config, multiply_kernel, result1.data.ptr, c.data.ptr, result2.data.ptr, cp.uint64(size)) - launch(stream, config, subtract_kernel, result2.data.ptr, a.data.ptr, result3.data.ptr, cp.uint64(size)) - - stream.sync() - end_time = time.time() - - individual_execution_time = end_time - start_time - print(f"Individual kernel execution time: {individual_execution_time:.6f} seconds") - - # Calculate speedup - speedup = individual_execution_time / graph_execution_time - print(f"Graph provides {speedup:.2f}x speedup") - - # Verify results again - assert cp.allclose(result1, expected_result1, rtol=1e-5, atol=1e-5), "Result 1 mismatch" - assert cp.allclose(result2, expected_result2, rtol=1e-5, atol=1e-5), "Result 2 mismatch" - assert cp.allclose(result3, expected_result3, rtol=1e-5, atol=1e-5), "Result 3 mismatch" - - finally: - if graph is not None: - graph.close() - if graph_builder is not None: - graph_builder.close() - stream.close() - cp.cuda.Stream.null.use() # reset CuPy's current stream to the null stream - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/graph_update.py b/cuda_core/examples/graph_update.py deleted file mode 100644 index c4918877b55..00000000000 --- a/cuda_core/examples/graph_update.py +++ /dev/null @@ -1,100 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates Graph.update() by reusing the same executable graph -# with a new capture that has the same topology but different kernel arguments. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "numpy>=2.1"] -# /// - -import sys - -import numpy as np - -from cuda.core import ( - Device, - LaunchConfig, - LegacyPinnedMemoryResource, - Program, - ProgramOptions, - launch, -) - -code = """ -extern "C" __global__ void add_one(int* value) { - if (threadIdx.x == 0 && blockIdx.x == 0) { - *value += 1; - } -} -""" - - -def build_increment_graph(device, kernel, target_ptr): - builder = device.create_graph_builder().begin_building() - config = LaunchConfig(grid=1, block=1) - launch(builder, config, kernel, target_ptr) - launch(builder, config, kernel, target_ptr) - return builder.end_building() - - -def main(): - if np.lib.NumpyVersion(np.__version__) < "2.1.0": - print("This example requires NumPy 2.1.0 or later", file=sys.stderr) - sys.exit(1) - - device = Device() - device.set_current() - stream = device.create_stream() - pinned_mr = LegacyPinnedMemoryResource() - buffer = None - initial_capture = None - update_capture = None - graph = None - - try: - options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") - program = Program(code, code_type="c++", options=options) - module = program.compile("cubin") - kernel = module.get_kernel("add_one") - - buffer = pinned_mr.allocate(2 * np.dtype(np.int32).itemsize) - values = np.from_dlpack(buffer).view(np.int32) - values[:] = 0 - - initial_capture = build_increment_graph(device, kernel, values[0:].ctypes.data) - update_capture = build_increment_graph(device, kernel, values[1:].ctypes.data) - graph = initial_capture.complete() - - graph.upload(stream) - graph.launch(stream) - stream.sync() - assert tuple(values) == (2, 0) - - graph.update(update_capture) - graph.upload(stream) - graph.launch(stream) - stream.sync() - assert tuple(values) == (2, 2) - - print("Graph.update() reused the executable graph with a new target pointer.") - print(f"Final host values: {tuple(values)}") - finally: - if graph is not None: - graph.close() - if update_capture is not None: - update_capture.close() - if initial_capture is not None: - initial_capture.close() - if buffer is not None: - buffer.close() - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/jit_lto_fractal.py b/cuda_core/examples/jit_lto_fractal.py deleted file mode 100644 index 98fd402ee00..00000000000 --- a/cuda_core/examples/jit_lto_fractal.py +++ /dev/null @@ -1,301 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates the JIT LTO feature of the Linker class to link -# multiple objects together, allowing libraries to modify workflows at runtime. -# It mimics a library-user relationship: the user provides device code that -# generates art (Mandelbrot or Julia set), while the library handles device -# setup, launch config, and linking. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - -import argparse -import sys - -import cupy as cp - -from cuda.core import Device, LaunchConfig, Linker, LinkerOptions, Program, ProgramOptions, launch - - -# ################################################################################ -# -# This Mocklibrary is responsible for all steps involved launching the device code. -# -# The user is responsible for providing the device code that will be linked into the library's workflow. -# The provided device code must contain a function with the signature `void generate_art(float* Data)` -class MockLibrary: - def __init__(self): - # For this mock library, the main workflow is intentionally kept simple by limiting itself to only calling the - # externally defined generate_art function. More involved libraries have the option of applying pre and post - # processing steps before calling user-defined device code. Conversely, these responsibilities can be reversed - # such that the library owns the bulk of the workflow while allowing users to provide customized pre/post - # processing steps. - code_main = r""" - extern __device__ void generate_art(float* Data); - - extern "C" - __global__ - void main_workflow(float* Data) { - // Preprocessing steps can be called here - // ... - - // Call the user-defined device code - generate_art(Data); - - // Postprocessing steps can be called here - // ... - } - """ - - # Most of the launch configurations can be preemptively done before the user provides their device code - # Therefore lets compile our main workflow device code now, and link the remaining pieces at a later time - self.program_options = ProgramOptions(relocatable_device_code=True) - self.main_object_code = Program(code_main, "c++", options=self.program_options).compile("ptx") - - # Setup device state - self.dev = Device() - self.dev.set_current() - self.stream = self.dev.create_stream() - - # Setup a buffer to store the RGBA results for the width and height specified - self.width = 1024 - self.height = 512 - self.buffer = cp.empty(self.width * self.height * 4, dtype=cp.float32) - - # Setup the launch configuration such that each thread will be generating one pixel, and subdivide - # the problem into 16x16 chunks. - self.grid = (self.width // 16, self.height // 16, 1) - self.block = (16, 16, 1) - self.config = LaunchConfig(grid=self.grid, block=self.block) - - def close(self): - self.stream.close() - - def link(self, user_code, target_type): - if target_type == "ltoir": - program_options = ProgramOptions(link_time_optimization=True) - linker_options = LinkerOptions(link_time_optimization=True) - elif target_type == "ptx": - program_options = self.program_options - linker_options = LinkerOptions() - else: - raise AssertionError(f"Invalid {target_type=}") - - # First, user-defined code is compiled into a PTX object code - user_object_code = Program(user_code, "c++", options=program_options).compile(target_type) - - # Then a Linker is created to link the main object code with the user-defined code - linker = Linker(self.main_object_code, user_object_code, options=linker_options) - - # We emit the linked code as cubin - linked_code = linker.link("cubin") - - # Now we're ready to retrieve the main device function and execute our library's workflow - return linked_code.get_kernel("main_workflow") - - def run(self, kernel): - launch(self.stream, self.config, kernel, self.buffer.data.ptr) - self.stream.sync() - - # Return the result as a NumPy array (on host). - return cp.asnumpy(self.buffer).reshape(self.height, self.width, 4) - - -# Now lets proceed with code from the user's perspective! -# -# ################################################################################ - -# Simple implementation of Mandelbrot set from Wikipedia -# http://en.wikipedia.org/wiki/Mandelbrot_set -# -# Note that this kernel is meant to be a simple, straight-forward -# implementation. No attempt is made to optimize this GPU code. -code_mandelbrot = r""" -__device__ -void generate_art(float* Data) { - // Which pixel am I? - unsigned DataX = blockIdx.x * blockDim.x + threadIdx.x; - unsigned DataY = blockIdx.y * blockDim.y + threadIdx.y; - unsigned Width = gridDim.x * blockDim.x; - unsigned Height = gridDim.y * blockDim.y; - - float R, G, B, A; - - // Scale coordinates to (-2.5, 1) and (-1, 1) - - float NormX = (float)DataX / (float)Width; - NormX *= 3.5f; - NormX -= 2.5f; - - float NormY = (float)DataY / (float)Height; - NormY *= 2.0f; - NormY -= 1.0f; - - float X0 = NormX; - float Y0 = NormY; - - float X = 0.0f; - float Y = 0.0f; - - unsigned Iter = 0; - unsigned MaxIter = 1000; - - // Iterate - while(X*X + Y*Y < 4.0f && Iter < MaxIter) { - float XTemp = X*X - Y*Y + X0; - Y = 2.0f*X*Y + Y0; - - X = XTemp; - - Iter++; - } - - unsigned ColorG = Iter % 50; - unsigned ColorB = Iter % 25; - - R = 0.0f; - G = (float)ColorG / 50.0f; - B = (float)ColorB / 25.0f; - A = 1.0f; - - unsigned i = DataY*Width*4+DataX*4; - Data[i+0] = R; - Data[i+1] = G; - Data[i+2] = B; - Data[i+3] = A; -} -""" - -# Simple implementation of Julia set from Wikipedia -# http://en.wikipedia.org/wiki/Julia_set -# -# Note that this kernel is meant to be a simple, straight-forward -# implementation. No attempt is made to optimize this GPU code. -code_julia = r""" -__device__ -void generate_art(float* Data) { - // Which pixel am I? - unsigned DataX = blockIdx.x * blockDim.x + threadIdx.x; - unsigned DataY = blockIdx.y * blockDim.y + threadIdx.y; - unsigned Width = gridDim.x * blockDim.x; - unsigned Height = gridDim.y * blockDim.y; - - float R, G, B, A; - - // Scale coordinates to (-2, 2) for both x and y - // Scale coordinates to (-2.5, 1) and (-1, 1) - float X = (float)DataX / (float)Width; - X *= 4.0f; - X -= 2.0f; - - float Y = (float)DataY / (float)Height; - Y *= 2.0f; - Y -= 1.0f; - - // Julia set uses a fixed constant C - float Cx = -0.8f; // Try different values for different patterns - float Cy = 0.156f; // Try different values for different patterns - - unsigned Iter = 0; - unsigned MaxIter = 1000; - - // Iterate - while(X*X + Y*Y < 4.0f && Iter < MaxIter) { - float XTemp = X*X - Y*Y + Cx; - Y = 2.0f*X*Y + Cy; - X = XTemp; - Iter++; - } - - unsigned ColorG = Iter % 50; - unsigned ColorB = Iter % 25; - - R = 0.0f; - G = (float)ColorG / 50.0f; - B = (float)ColorB / 25.0f; - A = 1.0f; - - unsigned i = DataY*Width*4+DataX*4; - Data[i+0] = R; - Data[i+1] = G; - Data[i+2] = B; - Data[i+3] = A; -} -""" - - -def main(): - # Parse command line arguments - # Two different kernels are implemented with unique algorithms, and the user can choose which one should be used - # Both kernels fulfill the signature required by the MockLibrary: `void generate_art(float* Data)` - parser = argparse.ArgumentParser() - parser.add_argument( - "--target", - "-t", - type=str, - default="all", - choices=["mandelbrot", "julia", "all"], - help="Type of visualization to generate", - ) - parser.add_argument( - "--format", - "-f", - type=str, - default="ltoir", - choices=["ptx", "ltoir"], - help="Type of intermediate format for the device functions to be linked", - ) - parser.add_argument( - "--display", - "-d", - action="store_true", - help="Display the generated images", - ) - args = parser.parse_args() - - if args.display: - try: - import matplotlib.pyplot as plt - except ImportError: - print("this example requires matplotlib installed in order to display the image", file=sys.stderr) - sys.exit(1) - - result_to_display = [] - lib = MockLibrary() - try: - # Process mandelbrot option - if args.target in ("mandelbrot", "all"): - # The library will compile and link their main kernel with the provided Mandelbrot kernel - kernel = lib.link(code_mandelbrot, args.format) - result = lib.run(kernel) - result_to_display.append((result, "Mandelbrot")) - - # Process julia option - if args.target in ("julia", "all"): - # Likewise, the same library can be configured to instead use the provided Julia kernel - kernel = lib.link(code_julia, args.format) - result = lib.run(kernel) - result_to_display.append((result, "Julia")) - - # Display the generated images if requested - if args.display: - fig = plt.figure() - for i, (image, title) in enumerate(result_to_display): - axs = fig.add_subplot(len(result_to_display), 1, i + 1) - axs.imshow(image) - axs.set_title(title) - axs.axis("off") - plt.show() - finally: - lib.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/memory_ops.py b/cuda_core/examples/memory_ops.py deleted file mode 100644 index 549686b466a..00000000000 --- a/cuda_core/examples/memory_ops.py +++ /dev/null @@ -1,149 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates memory resources for allocation and management, -# copying data between device and pinned memory, and DLPack interop. Requires -# NumPy 2.1.0+. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - -import sys - -import cupy as cp -import numpy as np - -from cuda.core import ( - Device, - LaunchConfig, - LegacyPinnedMemoryResource, - Program, - ProgramOptions, - launch, -) - -# Kernel for memory operations -code = """ -extern "C" -__global__ void memory_ops(float* device_data, - float* pinned_data, - size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - if (tid < N) { - // Access device memory - device_data[tid] = device_data[tid] + 1.0f; - - // Access pinned memory (zero-copy from GPU) - pinned_data[tid] = pinned_data[tid] * 3.0f; - } -} -""" - - -def main(): - if np.__version__ < "2.1.0": - print("This example requires NumPy 2.1.0 or later", file=sys.stderr) - sys.exit(1) - - dev = Device() - dev.set_current() - stream = dev.create_stream() - # tell CuPy to use our stream as the current stream: - cp.cuda.ExternalStream(int(stream.handle)).use() - device_buffer = None - pinned_buffer = None - new_device_buffer = None - - try: - # Compile kernel - program_options = ProgramOptions(std="c++17", arch=f"sm_{dev.arch}") - prog = Program(code, code_type="c++", options=program_options) - mod = prog.compile("cubin") - kernel = mod.get_kernel("memory_ops") - - # Create different memory resources - device_mr = dev.memory_resource - pinned_mr = LegacyPinnedMemoryResource() - - # Allocate different types of memory - size = 1024 - dtype = cp.float32 - element_size = dtype().itemsize - total_size = size * element_size - - # 1. Device Memory (GPU-only) - device_buffer = device_mr.allocate(total_size, stream=stream) - device_array = cp.from_dlpack(device_buffer).view(dtype=dtype) - - # 2. Pinned Memory (CPU memory, GPU accessible) - pinned_buffer = pinned_mr.allocate(total_size) - pinned_array = np.from_dlpack(pinned_buffer).view(dtype=dtype) - - # Initialize data - rng = cp.random.default_rng() - device_array[:] = rng.random(size, dtype=dtype) - pinned_array[:] = rng.random(size, dtype=dtype).get() - - # Store original values for verification - device_original = device_array.copy() - pinned_original = pinned_array.copy() - - # Sync before kernel launch - stream.sync() - - # Launch kernel - block = 256 - grid = (size + block - 1) // block - config = LaunchConfig(grid=grid, block=block) - - launch(stream, config, kernel, device_buffer, pinned_buffer, cp.uint64(size)) - stream.sync() - - # Verify kernel operations - assert cp.allclose(device_array, device_original + 1.0), "Device memory operation failed" - assert cp.allclose(pinned_array, pinned_original * 3.0), "Pinned memory operation failed" - - # Copy data between different memory types - print("\nCopying data between memory types...", file=sys.stderr) - - # Copy from device to pinned memory - device_buffer.copy_to(pinned_buffer, stream=stream) - stream.sync() - - # Verify the copy operation - assert cp.allclose(pinned_array, device_array), "Device to pinned copy failed" - - # Create a new device buffer and copy from pinned - new_device_buffer = device_mr.allocate(total_size, stream=stream) - new_device_array = cp.from_dlpack(new_device_buffer).view(dtype=dtype) - - pinned_buffer.copy_to(new_device_buffer, stream=stream) - stream.sync() - - # Verify the copy operation - assert cp.allclose(new_device_array, pinned_array), "Pinned to device copy failed" - - print("Memory management example completed!") - finally: - # Clean up resources even if verification fails. - if new_device_buffer is not None: - new_device_buffer.close(stream) - assert new_device_buffer.handle == 0, "New device buffer should be closed" - if pinned_buffer is not None: - pinned_buffer.close(stream) - assert pinned_buffer.handle == 0, "Pinned buffer should be closed" - if device_buffer is not None: - device_buffer.close(stream) - assert device_buffer.handle == 0, "Device buffer should be closed" - stream.close() - cp.cuda.Stream.null.use() # reset CuPy's current stream to the null stream - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/memory_pool_resources.py b/cuda_core/examples/memory_pool_resources.py deleted file mode 100644 index cc992fc6c29..00000000000 --- a/cuda_core/examples/memory_pool_resources.py +++ /dev/null @@ -1,141 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates the newer memory-pool APIs by combining -# PinnedMemoryResource, ManagedMemoryResource, and GraphMemoryResource in one -# workflow. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "numpy>=2.1"] -# /// - -import sys - -import numpy as np - -from cuda.core import ( - Device, - GraphMemoryResource, - LaunchConfig, - ManagedMemoryResource, - ManagedMemoryResourceOptions, - PinnedMemoryResource, - PinnedMemoryResourceOptions, - Program, - ProgramOptions, - launch, -) - -code = """ -extern "C" __global__ void scale_and_bias(float* data, size_t size, float scale, float bias) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - const unsigned int stride = blockDim.x * gridDim.x; - for (size_t i = tid; i < size; i += stride) { - data[i] = data[i] * scale + bias; - } -} -""" - - -def main(): - if np.lib.NumpyVersion(np.__version__) < "2.1.0": - print("This example requires NumPy 2.1.0 or later", file=sys.stderr) - sys.exit(1) - - device = Device() - device.set_current() - stream = device.create_stream() - - managed_mr = None - pinned_mr = None - graph_mr = None - managed_buffer = None - pinned_buffer = None - graph_capture = None - graph = None - - try: - options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") - program = Program(code, code_type="c++", options=options) - module = program.compile("cubin") - kernel = module.get_kernel("scale_and_bias") - - size = 256 - dtype = np.float32 - nbytes = size * dtype().itemsize - config = LaunchConfig(grid=(size + 127) // 128, block=128) - - managed_options = ManagedMemoryResourceOptions( - preferred_location=device.device_id, - preferred_location_type="device", - ) - managed_mr = ManagedMemoryResource(options=managed_options) - - pinned_options = {"ipc_enabled": False} - host_numa_id = getattr(device.properties, "host_numa_id", -1) - if host_numa_id >= 0: - pinned_options["numa_id"] = host_numa_id - pinned_mr = PinnedMemoryResource(options=PinnedMemoryResourceOptions(**pinned_options)) - - graph_mr = GraphMemoryResource(device) - - managed_buffer = managed_mr.allocate(nbytes, stream=stream) - pinned_buffer = pinned_mr.allocate(nbytes, stream=stream) - - managed_array = np.from_dlpack(managed_buffer).view(np.float32) - pinned_array = np.from_dlpack(pinned_buffer).view(np.float32) - - managed_array[:] = np.arange(size, dtype=dtype) - managed_original = managed_array.copy() - stream.sync() - - managed_buffer.copy_to(pinned_buffer, stream=stream) - stream.sync() - assert np.array_equal(pinned_array, managed_original) - - graph_builder = device.create_graph_builder().begin_building("relaxed") - scratch_buffer = graph_mr.allocate(nbytes, stream=graph_builder) - scratch_buffer.copy_from(managed_buffer, stream=graph_builder) - launch(graph_builder, config, kernel, scratch_buffer, np.uint64(size), np.float32(2.0), np.float32(1.0)) - managed_buffer.copy_from(scratch_buffer, stream=graph_builder) - scratch_buffer.close() - - graph_capture = graph_builder.end_building() - graph = graph_capture.complete() - graph.upload(stream) - graph.launch(stream) - stream.sync() - - np.testing.assert_allclose(managed_array, managed_original * 2 + 1) - managed_buffer.copy_to(pinned_buffer, stream=stream) - stream.sync() - np.testing.assert_allclose(pinned_array, managed_original * 2 + 1) - - print(f"PinnedMemoryResource numa_id: {pinned_mr.numa_id}") - print(f"ManagedMemoryResource preferred_location: {managed_mr.preferred_location}") - print(f"GraphMemoryResource reserved high watermark: {graph_mr.attributes.reserved_mem_high}") - finally: - if graph is not None: - graph.close() - if graph_capture is not None: - graph_capture.close() - if pinned_buffer is not None: - pinned_buffer.close(stream) - if managed_buffer is not None: - managed_buffer.close(stream) - if graph_mr is not None: - graph_mr.close() - if pinned_mr is not None: - pinned_mr.close() - if managed_mr is not None: - managed_mr.close() - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/pytorch_example.py b/cuda_core/examples/pytorch_example.py deleted file mode 100644 index 5826c0a4421..00000000000 --- a/cuda_core/examples/pytorch_example.py +++ /dev/null @@ -1,118 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates how to use cuda.core to compile a CUDA kernel -# and launch it using PyTorch tensors as inputs. Requires PyTorch with CUDA. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "torch"] -# /// - -import sys - -import torch - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch - -# SAXPY kernel - passing a as a pointer to avoid any type issues -code = """ -template -__global__ void saxpy_kernel(const T* a, const T* x, const T* y, T* out, size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - if (tid < N) { - // Dereference a to get the scalar value - out[tid] = (*a) * x[tid] + y[tid]; - } -} -""" - - -# Create a wrapper class that implements __cuda_stream__ -class PyTorchStreamWrapper: - def __init__(self, pt_stream): - self.pt_stream = pt_stream - - def __cuda_stream__(self): - stream_id = self.pt_stream.cuda_stream - return (0, stream_id) # Return format required by CUDA Python - - -def main(): - dev = Device() - dev.set_current() - - pt_stream = torch.cuda.current_stream() - print(f"PyTorch stream: {pt_stream}", file=sys.stderr) - - stream = dev.create_stream(PyTorchStreamWrapper(pt_stream)) - - try: - # prepare program - program_options = ProgramOptions(std="c++11", arch=f"sm_{dev.arch}") - prog = Program(code, code_type="c++", options=program_options) - mod = prog.compile( - "cubin", - logs=sys.stdout, - name_expressions=("saxpy_kernel", "saxpy_kernel"), - ) - - # Run in single precision - kernel = mod.get_kernel("saxpy_kernel") - dtype = torch.float32 - - # prepare input/output - size = 64 - # Use a single element tensor for 'a' - a = torch.tensor([10.0], dtype=dtype, device="cuda") - x = torch.rand(size, dtype=dtype, device="cuda") - y = torch.rand(size, dtype=dtype, device="cuda") - out = torch.empty_like(x) - - # prepare launch - block = 32 - grid = int((size + block - 1) // block) - config = LaunchConfig(grid=grid, block=block) - kernel_args = (a.data_ptr(), x.data_ptr(), y.data_ptr(), out.data_ptr(), size) - - # launch kernel on our stream - launch(stream, config, kernel, *kernel_args) - - # check result - assert torch.allclose(out, a.item() * x + y) - - # let's repeat again with double precision - kernel = mod.get_kernel("saxpy_kernel") - dtype = torch.float64 - - # prepare input - size = 128 - # Use a single element tensor for 'a' - a = torch.tensor([42.0], dtype=dtype, device="cuda") - x = torch.rand(size, dtype=dtype, device="cuda") - y = torch.rand(size, dtype=dtype, device="cuda") - - # prepare output - out = torch.empty_like(x) - - # prepare launch - block = 64 - grid = int((size + block - 1) // block) - config = LaunchConfig(grid=grid, block=block) - kernel_args = (a.data_ptr(), x.data_ptr(), y.data_ptr(), out.data_ptr(), size) - - # launch kernel on PyTorch's stream - launch(stream, config, kernel, *kernel_args) - - # check result - assert torch.allclose(out, a * x + y) - finally: - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/saxpy.py b/cuda_core/examples/saxpy.py deleted file mode 100644 index 85737f84d42..00000000000 --- a/cuda_core/examples/saxpy.py +++ /dev/null @@ -1,132 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates a templated CUDA kernel (SAXPY) compiled and -# launched with cuda.core, using CuPy arrays. The kernel is instantiated -# for both float and double. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - - -import sys - -from cuda import pathfinder - -print(pathfinder.load_nvidia_dynamic_lib("nvrtc")) - -import cupy as cp - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch - -# compute out = a * x + y -code = """ -template -__global__ void saxpy(const T a, - const T* x, - const T* y, - T* out, - size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i=tid; i", "saxpy"), - ) - - # run in single precision - kernel = mod.get_kernel("saxpy") - dtype = cp.float32 - - # prepare input/output - size = cp.uint64(64) - a = dtype(10) - rng = cp.random.default_rng() - x = rng.random(size, dtype=dtype) - y = rng.random(size, dtype=dtype) - out = cp.empty_like(x) - dev.sync() # cupy runs on a different stream from stream, so sync before accessing - - # prepare launch - block = 32 - grid = int((size + block - 1) // block) - config = LaunchConfig(grid=grid, block=block) - kernel_args = (a, x.data.ptr, y.data.ptr, out.data.ptr, size) - - # launch kernel on stream - launch(stream, config, kernel, *kernel_args) - stream.sync() - - # check result - assert cp.allclose(out, a * x + y) - - # let's repeat again, this time allocates our own out buffer instead of cupy's - # run in double precision - kernel = mod.get_kernel("saxpy") - dtype = cp.float64 - - # prepare input - size = cp.uint64(128) - a = dtype(42) - x = rng.random(size, dtype=dtype) - y = rng.random(size, dtype=dtype) - dev.sync() - - # prepare output - buf = dev.allocate( - size * 8, # = dtype.itemsize - stream=stream, - ) - - # prepare launch - block = 64 - grid = int((size + block - 1) // block) - config = LaunchConfig(grid=grid, block=block) - kernel_args = (a, x.data.ptr, y.data.ptr, buf, size) - - # launch kernel on stream - launch(stream, config, kernel, *kernel_args) - stream.sync() - - # check result - # we wrap output buffer as a cupy array for simplicity - out = cp.ndarray( - size, dtype=dtype, memptr=cp.cuda.MemoryPointer(cp.cuda.UnownedMemory(int(buf.handle), buf.size, buf), 0) - ) - assert cp.allclose(out, a * x + y) - finally: - # cupy cleans up automatically the rest - if buf is not None: - buf.close(stream) - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/show_device_properties.py b/cuda_core/examples/show_device_properties.py deleted file mode 100644 index 566f6890948..00000000000 --- a/cuda_core/examples/show_device_properties.py +++ /dev/null @@ -1,251 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates how to use cuda.core to show the properties of -# CUDA devices in the system. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core"] -# /// - -import sys - -from cuda.core import Device, system - - -# Convert boolean to YES or NO string -def _yes_no(value: bool) -> str: - return "YES" if value else "NO" - - -# Convert value in bytes to MB or GB string -BYTES_TO_MBYTES = 1 / (1024 * 1024) -BYTES_TO_GBYTES = BYTES_TO_MBYTES / 1024 - - -def _bytes_to_mbytes(value): - return f"{value * BYTES_TO_MBYTES:.2f}MB" - - -def _bytes_to_gbytes(value): - return f"{value * BYTES_TO_GBYTES:.2f}GB" - - -# Convert value in KHz to GHz string -KHZ_TO_GHZ = 1e-6 - - -def _khz_to_ghz(value): - return f"{value * KHZ_TO_GHZ:.2f}GHz" - - -# Print device properties to stdout -def print_device_properties(properties): - print("Properties:\n------------") - print(f"- Can map host memory into the CUDA address space: {_yes_no(properties.can_map_host_memory)}") - print( - "- Can access host registered memory at the same virtual address as the CPU: " - + f"{_yes_no(properties.can_use_host_pointer_for_registered_mem)}" - ) - print(f"- Clock rate: {_khz_to_ghz(properties.clock_rate)}") - print(f"- Peak memory clock frequency: {_khz_to_ghz(properties.memory_clock_rate)}") - print( - "- Performance ratio (single precision)/(double precision): " - + f"{properties.single_to_double_precision_perf_ratio}" - ) - print( - f"- Compute capability: major={properties.compute_capability_major}, " - + f"minor={properties.compute_capability_minor}" - ) - print(f"- Compute mode: {properties.compute_mode} (0 - default, 2 - prohibited, 3 - exclusive process)") - print(f"- Support for Compute Preemption: {_yes_no(properties.compute_preemption_supported)}") - print( - "- Support for concurrent kernels execution within the same context: " - + f"{_yes_no(properties.concurrent_kernels)}" - ) - print( - "- Support for coherent access to managed memory concurrently with CPU: " - + f"{_yes_no(properties.concurrent_managed_access)}" - ) - print( - "- Support for deferred mapping in CUDA arrays and CUDA mipmapped arrays: " - + f"{_yes_no(properties.deferred_mapping_cuda_array_supported)}" - ) - print( - "- Support for direct access of managed memory on device without migration: " - + f"{_yes_no(properties.direct_managed_mem_access_from_host)}" - ) - print(f"- ECC enabled: {_yes_no(properties.ecc_enabled)}") - print(f"- Support for generic compression: {_yes_no(properties.generic_compression_supported)}") - print(f"- Support for caching globals in L1 cache: {_yes_no(properties.global_l1_cache_supported)}") - print(f"- Support for caching locals in L1 cache: {_yes_no(properties.local_l1_cache_supported)}") - print(f"- Global memory bus widths: {properties.global_memory_bus_width} bits") - print(f"- Support for GPUDirect RDMA: {_yes_no(properties.gpu_direct_rdma_supported)}") - print(f"- GPUDirect RDMA flush-writes options bitmask: 0b{properties.gpu_direct_rdma_flush_writes_options:032b}") - print( - f"- GPUDirect RDMA writes ordering: {properties.gpu_direct_rdma_writes_ordering} " - + "(0 - none, 100 - this device can consume remote writes, " - + "200 - any CUDA device can consume remote writes to this device)" - ) - print( - "- Can concurrently copy memory between host and device while executing kernel: " - + f"{_yes_no(properties.gpu_overlap)}" - ) - print( - "- Support for exporting memory to a posix file descriptor: " - + f"{_yes_no(properties.handle_type_posix_file_descriptor_supported)}" - ) - print( - "- Support for exporting memory to a Win32 NT handle: " - + f"{_yes_no(properties.handle_type_win32_handle_supported)}" - ) - print( - "- Support for exporting memory to a Win32 KMT handle: " - + f"{_yes_no(properties.handle_type_win32_kmt_handle_supported)}" - ) - print( - "- Link between device and host supports native atomic operations: " - + f"{_yes_no(properties.host_native_atomic_supported)}" - ) - print(f"- Device is integrated with memory subsystem: {_yes_no(properties.integrated)}") - print(f"- Kernel execution timeout: {_yes_no(properties.kernel_exec_timeout)}") - print(f"- L2 cache size: {_bytes_to_mbytes(properties.l2_cache_size)}") - print(f"- Max L2 persisting lines capacity: {_bytes_to_mbytes(properties.max_persisting_l2_cache_size)}") - print(f"- Support for managed memory allocation: {_yes_no(properties.managed_memory)}") - print(f"- Max access policy window size: {_bytes_to_mbytes(properties.max_access_policy_window_size)}") - print(f"- Max x-dimension of a block: {properties.max_block_dim_x}") - print(f"- Max y-dimension of a block: {properties.max_block_dim_y}") - print(f"- Max z-dimension of a block: {properties.max_block_dim_z}") - print(f"- Max blocks in a multiprocessor: {properties.max_blocks_per_multiprocessor}") - print(f"- Max x-dimension of a grid: {properties.max_grid_dim_x}") - print(f"- Max y-dimension of a grid: {properties.max_grid_dim_y}") - print(f"- Max z-dimension of a grid: {properties.max_grid_dim_z}") - print(f"- Max pitch allowed by the memory copy functions: {_bytes_to_gbytes(properties.max_pitch)}") - print(f"- Max number of 32-bit registers per block: {properties.max_registers_per_block}") - print(f"- Max number of 32-bit registers in a multiprocessor: {properties.max_registers_per_multiprocessor}") - print(f"- Max shared memory per block: {properties.max_shared_memory_per_block}B") - print(f"- Max optin shared memory per block: {properties.max_shared_memory_per_block_optin}B") - print(f"- Max shared memory available to a multiprocessor: {properties.max_shared_memory_per_multiprocessor}B") - print(f"- Max threads per block: {properties.max_threads_per_block}") - print(f"- Max threads per multiprocessor: {properties.max_threads_per_multiprocessor}") - print(f"- Warp size: {properties.warp_size}") - print(f"- Max 1D surface width: {properties.maximum_surface1d_width}") - print(f"- Max layers in 1D layered surface: {properties.maximum_surface1d_layered_layers}") - print(f"- Max 1D layered surface width: {properties.maximum_surface1d_layered_width}") - print(f"- Max 2D surface width: {properties.maximum_surface2d_width}") - print(f"- Max 2D surface height: {properties.maximum_surface2d_height}") - print(f"- Max layers in 2D layered surface: {properties.maximum_surface2d_layered_layers}") - print(f"- Max 2D layered surface width: {properties.maximum_surface2d_layered_width}") - print(f"- Max 2D layered surface height: {properties.maximum_surface2d_layered_height}") - print(f"- Max 3D surface width: {properties.maximum_surface3d_width}") - print(f"- Max 3D surface height: {properties.maximum_surface3d_height}") - print(f"- Max 3D surface depth: {properties.maximum_surface3d_depth}") - print(f"- Max cubemap surface width: {properties.maximum_surfacecubemap_width}") - print(f"- Max layers in a cubemap layered surface: {properties.maximum_surfacecubemap_layered_layers}") - print(f"- Max cubemap layered surface width: {properties.maximum_surfacecubemap_layered_width}") - print(f"- Max 1D texture width: {properties.maximum_texture1d_width}") - print(f"- Max width for a 1D texture bound to linear memory: {properties.maximum_texture1d_linear_width}") - print(f"- Max layers in 1D layered texture: {properties.maximum_texture1d_layered_layers}") - print(f"- Max 1D layered texture width: {properties.maximum_texture1d_layered_width}") - print(f"- Max mipmapped 1D texture width: {properties.maximum_texture1d_mipmapped_width}") - print(f"- Max 2D texture width: {properties.maximum_texture2d_width}") - print(f"- Max 2D texture height: {properties.maximum_texture2d_height}") - print(f"- Max width for a 2D texture bound to linear memory: {properties.maximum_texture2d_linear_width}") - print(f"- Max height for a 2D texture bound to linear memory: {properties.maximum_texture2d_linear_height}") - print( - "- Max pitch for a 2D texture bound to linear memory: " - + f"{_bytes_to_mbytes(properties.maximum_texture2d_linear_pitch)}" - ) - print(f"- Max layers in 2D layered texture: {properties.maximum_texture2d_layered_layers}") - print(f"- Max 2D layered texture width: {properties.maximum_texture2d_layered_width}") - print(f"- Max 2D layered texture height: {properties.maximum_texture2d_layered_height}") - print(f"- Max mipmapped 2D texture width: {properties.maximum_texture2d_mipmapped_width}") - print(f"- Max mipmapped 2D texture height: {properties.maximum_texture2d_mipmapped_height}") - print(f"- Max 3D texture width: {properties.maximum_texture3d_width}") - print(f"- Max 3D texture height: {properties.maximum_texture3d_height}") - print(f"- Max 3D texture depth: {properties.maximum_texture3d_depth}") - print(f"- Alternate max 3D texture width: {properties.maximum_texture3d_width_alternate}") - print(f"- Alternate max 3D texture height: {properties.maximum_texture3d_height_alternate}") - print(f"- Alternate max 3D texture depth: {properties.maximum_texture3d_depth_alternate}") - print(f"- Max cubemap texture width or height: {properties.maximum_texturecubemap_width}") - print(f"- Max layers in a cubemap layered texture: {properties.maximum_texturecubemap_layered_layers}") - print(f"- Max cubemap layered texture width or height: {properties.maximum_texturecubemap_layered_width}") - print(f"- Texture base address alignment requirement: {properties.texture_alignment}B") - print( - "- Pitch alignment requirement for 2D texture references bound to pitched memory: " - + f"{properties.texture_pitch_alignment}B" - ) - print(f"- Support for memory pools: {_yes_no(properties.memory_pools_supported)}") - print( - "- Bitmask of handle types supported with memory pool-based IPC: " - + f"0b{properties.mempool_supported_handle_types:032b}" - ) - print(f"- Multi-GPU board: {_yes_no(properties.multi_gpu_board)}") - print(f"- Multi-GPU board group ID: {properties.multi_gpu_board_group_id}") - print(f"- Support for switch multicast and reduction operations: {_yes_no(properties.multicast_supported)}") - print(f"- Number of multiprocessors: {properties.multiprocessor_count}") - print(f"- NUMA configuration: {properties.numa_config}") - print(f"- NUMA node ID of GPU memory: {properties.numa_id}") - print(f"- Support for coherently accessing pageable memory: {_yes_no(properties.pageable_memory_access)}") - print( - "- Access pageable memory via host's page tables: " - + f"{_yes_no(properties.pageable_memory_access_uses_host_page_tables)}" - ) - print(f"- PCI bus ID: {properties.pci_bus_id}") - print(f"- PCI device (slot) ID: {properties.pci_device_id}") - print(f"- PCI domain ID: {properties.pci_domain_id}") - print( - "- Support for registering memory that must be mapped to GPU as read-only: " - + f"{_yes_no(properties.read_only_host_register_supported)}" - ) - print( - "- Amount of shared memory per block reserved by CUDA driver: " - + f"{properties.reserved_shared_memory_per_block}B" - ) - print( - "- Support for sparse CUDA arrays and sparse CUDA mipmapped arrays: " - + f"{_yes_no(properties.sparse_cuda_array_supported)}" - ) - print(f"- Using TCC driver: {_yes_no(properties.tcc_driver)}") - print(f"- Constant memory available: {properties.total_constant_memory}B") - print(f"- Support for unified address space with host: {_yes_no(properties.unified_addressing)}") - print(f"- Support for virtual memory management: {_yes_no(properties.virtual_memory_management_supported)}") - - -# Print info about all CUDA devices in the system -def show_device_properties(): - ndev = system.get_num_devices() - print(f"Number of GPUs: {ndev}") - - for device_id in range(ndev): - device = Device(device_id) - print(f"DEVICE {device.name} (id={device_id})") - - device.set_current() - # Extend example to show device context information after #189 is resolved. - # ctx = device.context - - cc = device.compute_capability - prop = device.properties - - print(f"Device compute capability: major={cc[0]}, minor={cc[1]}") - print(f"Architecture: sm_{cc[0]}{cc[1]}") - print(f"PCI bus id={device.pci_bus_id}") - print_device_properties(prop) - print("*****************************************************\n\n") - - -def main(): - if len(sys.argv) != 1: - print("no command-line arguments expected", file=sys.stderr) - sys.exit(1) - show_device_properties() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/tma_tensor_map.py b/cuda_core/examples/tma_tensor_map.py deleted file mode 100644 index 8c048d4a15d..00000000000 --- a/cuda_core/examples/tma_tensor_map.py +++ /dev/null @@ -1,189 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates how to use TMA (Tensor Memory Accelerator) -# descriptors with cuda.core on Hopper+ GPUs (compute capability >= 9.0). -# -# TMA enables efficient bulk data movement between global and shared memory -# using hardware-managed tensor map descriptors. This example shows: -# -# 1. Creating a TMA tiled descriptor from a CuPy device array -# 2. Passing the descriptor to a kernel via launch() -# 3. Using libcudacxx TMA/barrier wrappers instead of raw PTX -# 4. Reusing the same descriptor with replace_address() -# -# Requirements: -# - Hopper or later GPU (compute capability >= 9.0) -# - CuPy -# - CUDA toolkit headers (CUDA_PATH or CUDA_HOME set) -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core>0.6.0", "cupy-cuda13x"] -# /// - -import os -import sys - -import cupy as cp -import numpy as np - -from cuda.core import ( - Device, - LaunchConfig, - Program, - ProgramOptions, - launch, -) -from cuda.core.utils import StridedMemoryView -from cuda.pathfinder import get_cuda_path_or_home - -# --------------------------------------------------------------------------- -# CUDA kernel that uses TMA to load a 1-D tile into shared memory, then -# copies the tile to an output buffer so we can verify correctness. -# -# The CUtensorMap struct (128 bytes) is defined inline so the kernel can be -# compiled with NVRTC without pulling in the full driver-API header. The -# kernel uses libcudacxx's `cuda::barrier` and TMA wrapper helpers rather -# than embedding raw PTX strings. -# -# Key points: -# - The tensor map is passed by value with __grid_constant__ so the TMA -# hardware can read it from grid-constant memory. -# - Thread 0 in each block issues the TMA load and waits on the barrier. -# - All threads synchronize before copying from shared to global memory. -# --------------------------------------------------------------------------- -TILE_SIZE = 128 # elements per tile (must match the kernel constant) - -code = r""" -#include - -// Minimal definition of the 128-byte opaque tensor map struct. -struct __align__(64) TensorMap { unsigned long long opaque[16]; }; - -static constexpr int TILE_SIZE = 128; -using TmaBarrier = cuda::barrier; - -extern "C" -__global__ void tma_copy( - const __grid_constant__ TensorMap tensor_map, - float* output, - int N) -{ - __shared__ __align__(128) float smem[TILE_SIZE]; - __shared__ TmaBarrier bar; - - const int tid = threadIdx.x; - const int tile_start = blockIdx.x * TILE_SIZE; - - if (tid == 0) - { - init(&bar, 1); - } - __syncthreads(); - - if (tid == 0) - { - cuda::device::experimental::cp_async_bulk_tensor_1d_global_to_shared( - smem, - reinterpret_cast(&tensor_map), - tile_start, - bar); - bar.wait(cuda::device::barrier_arrive_tx(bar, 1, TILE_SIZE * sizeof(float))); - } - __syncthreads(); - - if (tid < TILE_SIZE) - { - const int idx = tile_start + tid; - if (idx < N) - output[idx] = smem[tid]; - } -} -""" - - -def _get_cccl_include_paths(): - cuda_path = get_cuda_path_or_home() - if cuda_path is None: - print("This example requires CUDA_PATH or CUDA_HOME to point to a CUDA toolkit.", file=sys.stderr) - sys.exit(1) - - cuda_include = os.path.join(cuda_path, "include") - if not os.path.isdir(cuda_include): - print(f"CUDA include directory not found: {cuda_include}", file=sys.stderr) - sys.exit(1) - - include_path = [cuda_include] - cccl_include = os.path.join(cuda_include, "cccl") - if os.path.isdir(cccl_include): - include_path.insert(0, cccl_include) - return include_path - - -def main(): - # ----------------------------------------------------------------------- - # Check for Hopper+ GPU - # ----------------------------------------------------------------------- - dev = Device() - arch = dev.compute_capability - if arch < (9, 0): - print( - "TMA requires compute capability >= 9.0 (Hopper or later)", - file=sys.stderr, - ) - sys.exit(0) - dev.set_current() - include_path = _get_cccl_include_paths() - - # ----------------------------------------------------------------------- - # Compile the kernel - # ----------------------------------------------------------------------- - prog = Program( - code, - code_type="c++", - options=ProgramOptions(std="c++17", arch=f"sm_{dev.arch}", include_path=include_path), - ) - mod = prog.compile("cubin") - ker = mod.get_kernel("tma_copy") - - # ----------------------------------------------------------------------- - # 1) Prepare input data and verify the initial TMA copy - # ----------------------------------------------------------------------- - n = 1024 - src = cp.arange(n, dtype=cp.float32) - output = cp.zeros(n, dtype=cp.float32) - dev.sync() # CuPy uses its own stream - - tensor_map = StridedMemoryView.from_any_interface(src, stream_ptr=-1).as_tensor_map(box_dim=(TILE_SIZE,)) - - n_tiles = n // TILE_SIZE - config = LaunchConfig(grid=n_tiles, block=TILE_SIZE) - launch(dev.default_stream, config, ker, tensor_map, output.data.ptr, np.int32(n)) - dev.sync() - - assert cp.array_equal(output, src), "TMA copy produced incorrect results" - print(f"TMA copy verified: {n} elements across {n_tiles} tiles") - - # ----------------------------------------------------------------------- - # 2) Demonstrate replace_address() without rebuilding the descriptor - # ----------------------------------------------------------------------- - replacement = cp.full(n, fill_value=42.0, dtype=cp.float32) - dev.sync() - - tensor_map.replace_address(replacement) - - output2 = cp.zeros(n, dtype=cp.float32) - launch(dev.default_stream, config, ker, tensor_map, output2.data.ptr, np.int32(n)) - dev.sync() - - assert cp.array_equal(output2, replacement), "replace_address produced incorrect results" - print("replace_address verified: descriptor reused with new source tensor") - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/vector_add.py b/cuda_core/examples/vector_add.py deleted file mode 100644 index adb2bebcf89..00000000000 --- a/cuda_core/examples/vector_add.py +++ /dev/null @@ -1,76 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates how to use cuda.core to compile and launch a -# simple vector addition kernel. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - -import cupy as cp - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch - -# compute c = a + b -code = """ -template -__global__ void vector_add(const T* A, - const T* B, - T* C, - size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i=tid; i",)) - - # run in single precision - kernel = mod.get_kernel("vector_add") - dtype = cp.float32 - - # prepare input/output - size = 50000 - rng = cp.random.default_rng() - a = rng.random(size, dtype=dtype) - b = rng.random(size, dtype=dtype) - c = cp.empty_like(a) - - # cupy runs on a different stream from stream, so sync before accessing - dev.sync() - - # prepare launch - block = 256 - grid = (size + block - 1) // block - config = LaunchConfig(grid=grid, block=block) - - # launch kernel on stream - launch(stream, config, kernel, a.data.ptr, b.data.ptr, c.data.ptr, cp.uint64(size)) - stream.sync() - - # check result - assert cp.allclose(c, a + b) - finally: - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/tests/example_tests/test_basic_examples.py b/cuda_core/tests/example_tests/test_basic_examples.py index c8d15677a54..646d783c2f6 100644 --- a/cuda_core/tests/example_tests/test_basic_examples.py +++ b/cuda_core/tests/example_tests/test_basic_examples.py @@ -5,15 +5,12 @@ import glob import os -import platform import subprocess import sys -import warnings import pytest -from cuda.core import Device, ManagedMemoryResource, system -from cuda.core._program import _can_load_generated_ptx +from cuda.core import Device, system try: from cuda.bindings._test_helpers.pep723 import has_package_requirements_or_skip @@ -41,57 +38,18 @@ def is_not_windows() -> bool: return sys.platform != "win32" -def is_x86_64() -> bool: - return platform.machine() == "x86_64" - - def has_cuda_path() -> bool: return os.environ.get("CUDA_PATH", os.environ.get("CUDA_HOME")) is not None -def has_recent_memory_pool_support() -> bool: - device = Device() - - try: - if not device.properties.host_memory_pools_supported: - return False - if not device.properties.memory_pools_supported: - return False - if not device.properties.concurrent_managed_access: - return False - except AttributeError: - return False - - try: - with warnings.catch_warnings(): - warnings.simplefilter("ignore") - mr = ManagedMemoryResource() - except RuntimeError as exc: - if "requires CUDA 13.0" in str(exc): - return False - if "managed allocations" in str(exc): - return False - raise - else: - mr.close() - return True - - # Specific system requirements for each of the examples. SYSTEM_REQUIREMENTS = { - "memory_pool_resources.py": has_recent_memory_pool_support, "gl_interop_plasma.py": has_display, - "jit_lto_fractal.py": _can_load_generated_ptx, - "pytorch_example.py": lambda: ( - has_compute_capability_9_or_higher() and is_x86_64() - ), # PyTorch only provides CUDA support for x86_64 - "saxpy.py": has_compute_capability_9_or_higher, "simple_multi_gpu_example.py": has_multiple_devices, "strided_memory_view_cpu.py": is_not_windows, "thread_block_cluster.py": lambda: has_compute_capability_9_or_higher() and has_cuda_path(), - "tma_tensor_map.py": has_cuda_path, } diff --git a/samples/cudaGraphs/README.md b/samples/cudaGraphs/README.md index 60b8c5bdc78..4879dd80dc3 100644 --- a/samples/cudaGraphs/README.md +++ b/samples/cudaGraphs/README.md @@ -6,19 +6,24 @@ This sample demonstrates how to capture a multi-stage kernel pipeline as a CUDA graph with `cuda.core` and replay it with a single driver call. The sample runs a three-stage elementwise pipeline -`r3 = (a + b) * c - a` in two modes: +`r3 = (a + b) * c - a` in three phases: 1. **Individual launches** - one `launch(stream, ...)` per stage, repeated for every iteration of the pipeline. 2. **CUDA graph replay** - the same three launches are recorded into a `Graph` once and replayed with `graph.launch(stream)` on each iteration. +3. **`Graph.update()`** - a fresh capture with the same topology but a + different destination pointer is applied to the existing executable + graph in place, avoiding a full rebuild. -Both paths are timed over N iterations and their results are verified -against a reference computation. The sample also re-launches the graph +Phases 1 and 2 are timed over N iterations and their results are verified +against a reference computation. Phase 2 also re-launches the graph after mutating the input buffers to show that the graph captures pointers (not data), so the same graph can process new inputs without -rebuilding. +rebuilding. Phase 3 covers the argument-swap case where the *pointers* +themselves change: `Graph.update()` swaps the new node arguments in +place without paying the cost of rebuilding the executable graph. ## What You'll Learn @@ -28,6 +33,7 @@ rebuilding. - Replaying the graph with `graph.launch(stream)` - Measuring the launch-overhead savings for small kernels - Re-running the same graph against updated input data +- Reusing an executable graph with new kernel arguments via `Graph.update()` ## Key Libraries @@ -44,6 +50,7 @@ rebuilding. - `GraphBuilder.complete()` - produce an executable `Graph` - `Graph.upload(stream)` - upload the graph structure to the device - `Graph.launch(stream)` - replay the entire graph +- `Graph.update(new_capture)` - apply a new capture (same topology, new args) to an existing executable graph - `launch(graph_builder, config, kernel, ...)` - record a kernel launch into the graph being built ### From `cuda_samples_utils` @@ -119,6 +126,9 @@ Graph speedup: 2.49x Graph replay on updated data verified (same graph, new buffer contents) +Building update capture with a new output pointer... +Graph.update() reused the executable graph with new kernel arguments + Done ``` @@ -136,5 +146,4 @@ your GPU and host CPU. - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.core` graphs API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda-graphs) -- Upstream `cuda.core` example: [`cuda_graphs.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/cuda_graphs.py) - [CUDA Graphs programming guide](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cuda-graphs) diff --git a/samples/cudaGraphs/cudaGraphs.py b/samples/cudaGraphs/cudaGraphs.py index 5b6c7f58464..b7aaf0bd567 100644 --- a/samples/cudaGraphs/cudaGraphs.py +++ b/samples/cudaGraphs/cudaGraphs.py @@ -36,16 +36,19 @@ this can significantly reduce CPU-side launch overhead. This sample runs a three-stage elementwise pipeline (add -> multiply -> -subtract) in two modes: +subtract) in three phases: 1. Individually launched kernels on a stream. 2. A single CUDA graph that captures the same three launches and is replayed with ``graph.launch(stream)``. - -We then measure the wall-clock time of each mode across many iterations to -illustrate the graph replay advantage for short kernels, and demonstrate that -a graph can be relaunched against new data (the pointers are baked in, but -the contents of those buffers are not). + 3. A ``Graph.update()`` call that swaps in a new capture with the same + topology but different kernel arguments (fresh output pointers), + reusing the executable graph without rebuilding it. + +Phase 1 vs 2 illustrates the launch-overhead savings for short kernels. +Phase 2 also demonstrates that a graph can be relaunched against new data +(the pointers are baked in, but the contents of those buffers are not). +Phase 3 covers the argument-swap case where the pointers themselves change. """ import sys @@ -105,41 +108,26 @@ def run_pipeline_individual(stream, kernels, config, buffers, size, n_iters): return time.perf_counter() - t0 -def build_graph(stream, kernels, config, buffers, size): - """Capture the 3-stage pipeline into a CUDA graph and return it.""" +def capture_pipeline(builder, kernels, config, buffers, size): + """Record the 3-stage `(a+b)*c - a` pipeline into `builder`. + + Takes an already-created builder so the same helper can produce both the + initial capture and any update captures used by ``Graph.update()``. + """ add_k, mul_k, sub_k = kernels a, b, c, r1, r2, r3 = buffers + builder.begin_building() + launch(builder, config, add_k, a.data.ptr, b.data.ptr, r1.data.ptr, np.uint64(size)) + launch(builder, config, mul_k, r1.data.ptr, c.data.ptr, r2.data.ptr, np.uint64(size)) + launch(builder, config, sub_k, r2.data.ptr, a.data.ptr, r3.data.ptr, np.uint64(size)) + builder.end_building() + return builder + +def build_graph(stream, kernels, config, buffers, size): + """Capture the 3-stage pipeline into a CUDA graph and return it.""" graph_builder = stream.create_graph_builder() - graph_builder.begin_building() - launch( - graph_builder, - config, - add_k, - a.data.ptr, - b.data.ptr, - r1.data.ptr, - np.uint64(size), - ) - launch( - graph_builder, - config, - mul_k, - r1.data.ptr, - c.data.ptr, - r2.data.ptr, - np.uint64(size), - ) - launch( - graph_builder, - config, - sub_k, - r2.data.ptr, - a.data.ptr, - r3.data.ptr, - np.uint64(size), - ) - graph_builder.end_building() + capture_pipeline(graph_builder, kernels, config, buffers, size) graph = graph_builder.complete() graph.upload(stream) return graph_builder, graph @@ -183,7 +171,7 @@ def main() -> int: # below is serialized with the kernels we launch. cp.cuda.Stream.from_external(stream).use() - graph_builder = graph = None + graph_builder = graph = update_builder = None try: program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") program = Program(PIPELINE_KERNELS, code_type="c++", options=program_options) @@ -239,11 +227,32 @@ def main() -> int: assert cp.allclose(r3, 8.0), "Graph replay with new data produced wrong result" print("\nGraph replay on updated data verified (same graph, new buffer contents)") + # Phase 3: Graph.update() with a fresh capture that has the same + # topology (three kernel nodes in the same order) but different kernel + # arguments -- specifically, the output pointer is now r2 instead of + # r3. update() rewires the executable graph in place, so we do not pay + # the cost of rebuilding it from scratch. + print("\nBuilding update capture with a new output pointer...") + new_buffers = (a, b, c, r1, r3, r2) # swap r2 <-> r3 as the destination + update_builder = stream.create_graph_builder() + capture_pipeline(update_builder, kernels, config, new_buffers, N) + r2[:] = cp.zeros(N, dtype=cp.float32) + device.sync() + + graph.update(update_builder) + graph.upload(stream) + graph.launch(stream) + stream.sync() + assert cp.allclose(r2, 8.0), "Graph.update() produced wrong result in the new output buffer" + print("Graph.update() reused the executable graph with new kernel arguments") + print("\nDone") return 0 finally: if graph is not None: graph.close() + if update_builder is not None: + update_builder.close() if graph_builder is not None: graph_builder.close() stream.close() diff --git a/samples/deviceQuery/README.md b/samples/deviceQuery/README.md index 17e639c31ff..afc79b87c9d 100644 --- a/samples/deviceQuery/README.md +++ b/samples/deviceQuery/README.md @@ -4,6 +4,16 @@ Query and display detailed properties of all CUDA-capable devices in your system using the modern `cuda.core` API. +The sample has two output modes: + +- **Default** — the classic `nvidia-smi`/`deviceQuery`-style summary: compute + capability, memory, kernel launch limits, texture sizes, and the common + feature flags. +- **`--verbose` / `-v`** — additionally dumps the long-tail + `Device.properties` fields: L1/L2 caching flags, GPUDirect RDMA options, + memory-pool IPC handle bitmasks, NUMA info, surface limits, sparse/VMM + support, and more. Use this when you need a full capability report. + ## What You'll Learn - How to enumerate CUDA devices in the system @@ -11,6 +21,8 @@ Query and display detailed properties of all CUDA-capable devices in your system - Querying comprehensive device properties (compute capability, memory, limits) - Accessing low-level device attributes via `cuda.bindings` - Checking peer-to-peer (P2P) access capabilities between GPUs +- Reading the extended `Device.properties` surface (GPUDirect, NUMA, memory + pools, VMM, sparse arrays) via the `--verbose` flag ## Key Libraries @@ -120,6 +132,12 @@ python deviceQuery.py python deviceQuery.py --no-p2p ``` +### Verbose (long-tail properties): + +```bash +python deviceQuery.py --verbose +``` + ## Expected Output ``` diff --git a/samples/deviceQuery/deviceQuery.py b/samples/deviceQuery/deviceQuery.py index 0618dab8310..40c35cb08cf 100755 --- a/samples/deviceQuery/deviceQuery.py +++ b/samples/deviceQuery/deviceQuery.py @@ -31,7 +31,18 @@ """ Device Query using CUDA Core API -This sample enumerates the properties of the CUDA devices present in the system. +This sample enumerates the properties of the CUDA devices present in the +system. It has two output modes: + + * Default: the classic ``nvidia-smi``-style summary of compute + capability, memory, kernel launch limits, texture sizes, + and feature flags (roughly what the C-side ``deviceQuery`` + sample prints). + * ``--verbose``: additionally dumps the long-tail of + ``Device.properties`` fields -- surface/texture edge cases, + GPUDirect RDMA flags, NUMA info, memory-pool handle types, + sparse/virtual-memory support -- for callers who need a + full capability report. """ import platform @@ -130,11 +141,194 @@ def convert_sm_ver_to_cores(major, minor): return sm_to_cores.get((major, minor), 0) -def print_device_info(dev_id, device): +def print_verbose_extras(props): + """Print the long-tail of ``Device.properties`` fields. + + These are the fields that are useful for capability probing but too + numerous for the default ``nvidia-smi``-style summary. Kept alphabetized + within each subsection for easy scanning. + """ + print() + print(" Verbose device properties:") + # Memory / caching / addressing + print_property("Support for caching globals in L1:", fmt_yes_no(props.global_l1_cache_supported), indent=4) + print_property("Support for caching locals in L1:", fmt_yes_no(props.local_l1_cache_supported), indent=4) + print_property("Max persisting L2 cache size:", f"{props.max_persisting_l2_cache_size} bytes", indent=4) + print_property( + "Max access policy window size:", + f"{props.max_access_policy_window_size} bytes", + indent=4, + ) + print_property( + "Reserved shared memory per block:", + f"{props.reserved_shared_memory_per_block} bytes", + indent=4, + ) + print_property( + "Max shared memory per block (opt-in):", + f"{props.max_shared_memory_per_block_optin} bytes", + indent=4, + ) + + # Concurrency / preemption + print_property( + "Concurrent kernel execution (same context):", + fmt_yes_no(props.concurrent_kernels), + indent=4, + ) + print_property( + "Concurrent managed access (host + device):", + fmt_yes_no(props.concurrent_managed_access), + indent=4, + ) + print_property( + "Direct managed access from host (no migration):", + fmt_yes_no(props.direct_managed_mem_access_from_host), + indent=4, + ) + print_property( + "Pageable memory access:", + fmt_yes_no(props.pageable_memory_access), + indent=4, + ) + print_property( + "Pageable memory via host page tables:", + fmt_yes_no(props.pageable_memory_access_uses_host_page_tables), + indent=4, + ) + print_property( + "Host native atomic support:", + fmt_yes_no(props.host_native_atomic_supported), + indent=4, + ) + print_property( + "Can use host pointer for registered mem:", + fmt_yes_no(props.can_use_host_pointer_for_registered_mem), + indent=4, + ) + print_property( + "Read-only host-registered memory:", + fmt_yes_no(props.read_only_host_register_supported), + indent=4, + ) + + # GPUDirect / RDMA + print_property( + "GPUDirect RDMA:", + fmt_yes_no(props.gpu_direct_rdma_supported), + indent=4, + ) + print_property( + "GPUDirect RDMA flush-writes bitmask:", + f"0b{props.gpu_direct_rdma_flush_writes_options:032b}", + indent=4, + ) + print_property( + "GPUDirect RDMA writes ordering:", + props.gpu_direct_rdma_writes_ordering, + indent=4, + ) + + # Shareable handle support (IPC) + print_property( + "POSIX FD memory handle support:", + fmt_yes_no(props.handle_type_posix_file_descriptor_supported), + indent=4, + ) + print_property( + "Win32 NT handle support:", + fmt_yes_no(props.handle_type_win32_handle_supported), + indent=4, + ) + print_property( + "Win32 KMT handle support:", + fmt_yes_no(props.handle_type_win32_kmt_handle_supported), + indent=4, + ) + print_property( + "Memory pool IPC handle bitmask:", + f"0b{props.mempool_supported_handle_types:032b}", + indent=4, + ) + print_property( + "Memory pools supported:", + fmt_yes_no(props.memory_pools_supported), + indent=4, + ) + + # Multi-GPU / multicast + print_property("Multi-GPU board:", fmt_yes_no(props.multi_gpu_board), indent=4) + print_property("Multi-GPU board group ID:", props.multi_gpu_board_group_id, indent=4) + print_property( + "Switch multicast/reduction ops:", + fmt_yes_no(props.multicast_supported), + indent=4, + ) + + # NUMA + print_property("NUMA configuration:", props.numa_config, indent=4) + print_property("NUMA node ID of GPU memory:", props.numa_id, indent=4) + + # Surface limits (compact one-liners; textures are already covered above) + print_property( + "Max 1D surface width:", + props.maximum_surface1d_width, + indent=4, + ) + print_property( + "Max 2D surface (WxH):", + f"{props.maximum_surface2d_width}x{props.maximum_surface2d_height}", + indent=4, + ) + print_property( + "Max 3D surface (WxHxD):", + f"{props.maximum_surface3d_width}x{props.maximum_surface3d_height}x{props.maximum_surface3d_depth}", + indent=4, + ) + print_property( + "Max cubemap surface width:", + props.maximum_surfacecubemap_width, + indent=4, + ) + + # CUDA arrays / VMM / compression + print_property( + "Sparse CUDA arrays supported:", + fmt_yes_no(props.sparse_cuda_array_supported), + indent=4, + ) + print_property( + "Deferred mapping CUDA arrays:", + fmt_yes_no(props.deferred_mapping_cuda_array_supported), + indent=4, + ) + print_property( + "Virtual memory management supported:", + fmt_yes_no(props.virtual_memory_management_supported), + indent=4, + ) + print_property( + "Generic compression supported:", + fmt_yes_no(props.generic_compression_supported), + indent=4, + ) + + # Perf ratio (single vs double) + print_property( + "Single/double precision perf ratio:", + props.single_to_double_precision_perf_ratio, + indent=4, + ) + + +def print_device_info(dev_id, device, verbose=False): """ Print detailed information for a single CUDA device. Uses device.properties (cuda.core) for most fields; cuda.bindings for runtime version and global memory (not yet in high-level API). + + When ``verbose`` is True, appends the long-tail property list to the + per-device output. """ device.set_current() props = device.properties @@ -264,6 +458,9 @@ def print_device_info(dev_id, device): print_property("Compute Mode:", "") print(f" < {compute_modes.get(props.compute_mode, 'Unknown')} >") + if verbose: + print_verbose_extras(props) + def print_p2p_access_info(devices): """ @@ -287,7 +484,7 @@ def print_p2p_access_info(devices): print(f"Warning: Could not check peer access between device {i} and {j}: {e}") -def query_devices(show_p2p=True): +def query_devices(show_p2p=True, verbose=False): """ Query and display information about all CUDA devices. @@ -295,6 +492,9 @@ def query_devices(show_p2p=True): ---------- show_p2p : bool Whether to show peer-to-peer access information (default: True) + verbose : bool + When True, include the long-tail property dump for each device + (default: False). Returns ------- @@ -319,7 +519,7 @@ def query_devices(show_p2p=True): for dev_id, device in enumerate(devices): try: - print_device_info(dev_id, device) + print_device_info(dev_id, device, verbose=verbose) except Exception as e: print(f"Error: Failed to get information for device {dev_id}: {e}") import traceback @@ -344,10 +544,16 @@ def main(): formatter_class=argparse.RawDescriptionHelpFormatter, ) parser.add_argument("--no-p2p", action="store_true", help="Skip peer-to-peer access information") + parser.add_argument( + "--verbose", + "-v", + action="store_true", + help="Also dump the long-tail Device.properties fields (surfaces, GPUDirect flags, NUMA, etc.)", + ) args = parser.parse_args() - success = query_devices(show_p2p=not args.no_p2p) + success = query_devices(show_p2p=not args.no_p2p, verbose=args.verbose) if success: print("\nDone") diff --git a/samples/jitLtoLinking/README.md b/samples/jitLtoLinking/README.md index 8f7dc7aa4c6..84385391529 100644 --- a/samples/jitLtoLinking/README.md +++ b/samples/jitLtoLinking/README.md @@ -8,7 +8,7 @@ compiled translation units and link them at runtime with user-supplied device code as a plug-in without recompiling its own kernels from scratch. -The sample runs the same program in two linking modes: +The sample runs the same program in three phases: 1. **PTX linking** - each module is compiled with `ProgramOptions(relocatable_device_code=True)` down to PTX, and the @@ -19,10 +19,15 @@ The sample runs the same program in two linking modes: `Linker` is configured with `LinkerOptions(link_time_optimization=True)` so the optimizer runs again across both modules, typically matching the code generation of a single-source build. +3. **Plug-in swap** - the *same* library main kernel is re-linked + against a *different* `user_transform` implementation, producing a + new cubin without re-compiling the library main kernel. This + demonstrates the runtime-plug-in pattern that motivates the whole + library / user split. The "main" kernel `apply_transform` calls a `user_transform` device -function that lives in a separate source string, and the results of both -linking modes are verified against a NumPy reference. +function that lives in a separate source string, and the results of every +mode are verified against a NumPy reference. ## What You'll Learn @@ -31,6 +36,8 @@ linking modes are verified against a NumPy reference. - Choosing between `relocatable_device_code` and `link_time_optimization` - How a library's main kernel can call into user-supplied device code - When to prefer LTO over plain PTX linking +- Swapping the plug-in module without rebuilding the library main kernel's + intermediate representation ## Key Libraries @@ -113,7 +120,10 @@ Compute Capability: [2] LTO linking (link-time optimization) [lto] result verified against NumPy reference -Both PTX and LTO linked kernels produced matching results. Done +[3] Plug-in swap: re-link the same main kernel with a different user_transform + [swap] result verified against NumPy reference + +PTX, LTO, and plug-in-swap linked kernels all produced matching results. Done ``` **Note:** Device name and compute capability will vary based on your GPU. @@ -129,5 +139,4 @@ Both PTX and LTO linked kernels produced matching results. Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.core` compilation API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda-compilation-toolchain) -- Upstream `cuda.core` example: [`jit_lto_fractal.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/jit_lto_fractal.py) - [NVIDIA nvJitLink documentation](https://docs.nvidia.com/cuda/nvjitlink/index.html) diff --git a/samples/jitLtoLinking/jitLtoLinking.py b/samples/jitLtoLinking/jitLtoLinking.py index b5455107579..8530b64b09d 100644 --- a/samples/jitLtoLinking/jitLtoLinking.py +++ b/samples/jitLtoLinking/jitLtoLinking.py @@ -37,8 +37,8 @@ program. cuda.core exposes this pattern through ``Program`` (NVRTC compilation) -and ``Linker`` (JIT linking of multiple object codes). Two modes are -shown here: +and ``Linker`` (JIT linking of multiple object codes). This sample walks +through three demonstrations: * **PTX linking**: compile each translation unit with ``relocatable_device_code=True`` to PTX and link to a CUBIN. @@ -51,7 +51,14 @@ the optimizer across both modules and can inline the device function into the main kernel, typically matching a single-source build. -The same kernel math runs in both modes and is verified against a + * **Plug-in swap**: keep the same library main kernel and link it + against a different user-supplied ``user_transform`` implementation. + The main kernel is compiled once; only the plug-in module is + recompiled and re-linked to produce a new cubin. This is the pattern + a library would follow to accept user device code as a runtime + plug-in. + +The library kernel math runs in every mode and is verified against a NumPy reference. """ @@ -104,11 +111,12 @@ """ # -------------------------------------------------------------------------- -# Module B: the user-supplied "plug-in" device function. A different -# implementation of ``user_transform`` here produces different results without -# rebuilding MAIN_SRC. +# Module B: the user-supplied "plug-in" device function. Multiple +# implementations of ``user_transform`` produce different results without +# rebuilding MAIN_SRC. This mirrors how a real library would accept a +# user-provided kernel as a plug-in. # -------------------------------------------------------------------------- -USER_SRC = r""" +USER_SRC_QUADRATIC = r""" extern "C" __device__ float user_transform(float x) { @@ -119,27 +127,41 @@ } """ +USER_SRC_TANH = r""" +extern "C" __device__ +float user_transform(float x) +{ + // A different plug-in: soft-nonlinearity that the library main kernel + // consumes exactly the same way as USER_SRC_QUADRATIC. + return tanhf(x) + 0.5f * x; +} +""" + -def host_reference(x: np.ndarray) -> np.ndarray: +def host_reference_quadratic(x: np.ndarray) -> np.ndarray: y = x * x + 3.0 * x - 1.0 return np.where(y > 0.0, y, 0.0).astype(np.float32) -def link_ptx(device): +def host_reference_tanh(x: np.ndarray) -> np.ndarray: + return (np.tanh(x) + 0.5 * x).astype(np.float32) + + +def link_ptx(device, user_src=USER_SRC_QUADRATIC): """Compile both modules to PTX and link them into a cubin (no LTO).""" prog_opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}", relocatable_device_code=True) main_obj = Program(MAIN_SRC, "c++", options=prog_opts).compile("ptx") - user_obj = Program(USER_SRC, "c++", options=prog_opts).compile("ptx") + user_obj = Program(user_src, "c++", options=prog_opts).compile("ptx") linker = Linker(main_obj, user_obj, options=LinkerOptions(arch=f"sm_{device.arch}")) return linker.link("cubin") -def link_lto(device): +def link_lto(device, user_src=USER_SRC_QUADRATIC): """Compile both modules to LTO IR and link with LTO enabled.""" prog_opts = ProgramOptions(std="c++17", arch=f"sm_{device.arch}", link_time_optimization=True) main_obj = Program(MAIN_SRC, "c++", options=prog_opts).compile("ltoir") - user_obj = Program(USER_SRC, "c++", options=prog_opts).compile("ltoir") + user_obj = Program(user_src, "c++", options=prog_opts).compile("ltoir") linker_opts = LinkerOptions(arch=f"sm_{device.arch}", link_time_optimization=True) linker = Linker(main_obj, user_obj, options=linker_opts) @@ -191,26 +213,37 @@ def main() -> int: N = args.elements rng = np.random.default_rng(seed=0) host_in = rng.standard_normal(N).astype(np.float32) - expected = host_reference(host_in) + expected_quadratic = host_reference_quadratic(host_in) + expected_tanh = host_reference_tanh(host_in) d_in = cp.asarray(host_in) d_out = cp.empty(N, dtype=cp.float32) device.sync() print("\n[1] PTX linking (no LTO)") - ptx_module = link_ptx(device) - ok_ptx = run_one_mode("ptx", ptx_module, stream, d_in, d_out, N, expected) + ptx_module = link_ptx(device, USER_SRC_QUADRATIC) + ok_ptx = run_one_mode("ptx", ptx_module, stream, d_in, d_out, N, expected_quadratic) d_out.fill(0) device.sync() print("\n[2] LTO linking (link-time optimization)") - lto_module = link_lto(device) - ok_lto = run_one_mode("lto", lto_module, stream, d_in, d_out, N, expected) + lto_module = link_lto(device, USER_SRC_QUADRATIC) + ok_lto = run_one_mode("lto", lto_module, stream, d_in, d_out, N, expected_quadratic) + + d_out.fill(0) + device.sync() + + # Phase 3: swap in a different user_transform without rebuilding + # MAIN_SRC's cubin path. This mirrors how a library would accept a + # user-supplied device function as a runtime plug-in. + print("\n[3] Plug-in swap: re-link the same main kernel with a different user_transform") + lto_swap_module = link_lto(device, USER_SRC_TANH) + ok_swap = run_one_mode("swap", lto_swap_module, stream, d_in, d_out, N, expected_tanh) print() - if ok_ptx and ok_lto: - print("Both PTX and LTO linked kernels produced matching results. Done") + if ok_ptx and ok_lto and ok_swap: + print("PTX, LTO, and plug-in-swap linked kernels all produced matching results. Done") return 0 return 1 finally: diff --git a/samples/memoryResources/README.md b/samples/memoryResources/README.md index 6d6d6a94564..893f2208276 100644 --- a/samples/memoryResources/README.md +++ b/samples/memoryResources/README.md @@ -6,7 +6,7 @@ This sample demonstrates the `cuda.core` memory management model: a `MemoryResource` owns a pool of memory and hands out `Buffer` objects that can be passed to kernels, copied between resources with `Buffer.copy_to()`, and viewed as NumPy or CuPy arrays through DLPack. The -script exercises three common resources side-by-side: +script exercises four resource flavors side-by-side: 1. **`DeviceMemoryResource`** - device-local GPU memory. Every `Device` exposes a default pool via `Device.memory_resource`, and applications @@ -17,9 +17,14 @@ script exercises three common resources side-by-side: 3. **`ManagedMemoryResource`** - unified memory that the driver migrates between host and device on demand; host views see the GPU's writes without an explicit copy. +4. **Pool options + `GraphMemoryResource`** - passes structured + `ManagedMemoryResourceOptions` / `PinnedMemoryResourceOptions` to + control policy (preferred location, NUMA node, IPC), then allocates + *scratch* memory inside a CUDA graph so the alloc/free themselves + become graph nodes with lifetime tied to graph execution. -The same `scale_and_bias` kernel runs on each resource and every result is -verified on the host. +The same `scale_and_bias` kernel runs across every phase and every +result is verified on the host. ## What You'll Learn @@ -29,6 +34,9 @@ verified on the host. - Copying between buffers across resources with `Buffer.copy_to()` - Taking zero-copy NumPy or CuPy views of a `Buffer` via DLPack - Releasing buffers with stream-ordered `close(stream)` semantics +- Configuring resources with `ManagedMemoryResourceOptions` and + `PinnedMemoryResourceOptions` +- Allocating graph-scoped scratch with `GraphMemoryResource` ## Key Libraries @@ -42,8 +50,11 @@ verified on the host. - `Device.memory_resource` - default memory pool attached to a device - `DeviceMemoryResource`, `PinnedMemoryResource`, `ManagedMemoryResource` - allocate buffers of the corresponding memory kind +- `GraphMemoryResource(device)` - resource whose allocations live inside a captured graph +- `PinnedMemoryResourceOptions(numa_id=..., ipc_enabled=...)` - configure pinned host allocations +- `ManagedMemoryResourceOptions(preferred_location=..., preferred_location_type=...)` - hint managed memory placement - `MemoryResource.allocate(nbytes, stream=...)` - returns a `Buffer` -- `Buffer.copy_to(dst_buffer, stream=...)` - async, stream-ordered copy +- `Buffer.copy_to(dst_buffer, stream=...)` / `Buffer.copy_from(src_buffer, stream=...)` - async, stream-ordered copies - `Buffer.close(stream)` - stream-ordered deallocation - `Buffer` supports `__dlpack__` for zero-copy views @@ -131,7 +142,13 @@ Compute Capability: [3] Explicit DeviceMemoryResource Explicit DeviceMemoryResource allocation verified -All memory resource demos passed. +[4] Pool options + GraphMemoryResource (scratch inside a graph) + PinnedMemoryResource numa_id: + ManagedMemoryResource preferred_location: + GraphMemoryResource reserved high watermark: + Graph with in-graph scratch alloc/free verified + +Done ``` **Note:** Device name and compute capability will vary based on your GPU. @@ -147,5 +164,3 @@ All memory resource demos passed. - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.core` memory API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#memory-management) -- Upstream `cuda.core` example: [`memory_ops.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/memory_ops.py) -- Upstream `cuda.core` example: [`memory_pool_resources.py`](https://github.com/NVIDIA/cuda-python/blob/main/cuda_core/examples/memory_pool_resources.py) diff --git a/samples/memoryResources/memoryResources.py b/samples/memoryResources/memoryResources.py index 3680f7c9e02..92444862063 100644 --- a/samples/memoryResources/memoryResources.py +++ b/samples/memoryResources/memoryResources.py @@ -37,12 +37,19 @@ * ``PinnedMemoryResource`` - page-locked host memory accessible by the GPU * ``ManagedMemoryResource`` - unified memory that migrates between host and device on demand + * ``GraphMemoryResource`` - scratch buffers allocated inside a CUDA + graph and freed as part of graph execution Each resource hands out ``Buffer`` objects that can be: * passed to kernels as pointers * copied between each other with ``buffer.copy_to(...)`` * viewed as NumPy or CuPy arrays via DLPack (``__dlpack__``) +Later phases exercise the newer pool-based options +(``ManagedMemoryResourceOptions``, ``PinnedMemoryResourceOptions``) and +show how ``GraphMemoryResource`` lets a captured graph allocate its own +scratch memory as part of its execution. + The kernel below performs a fused scale + bias on both a device buffer and a pinned buffer, then we copy the result across resources to confirm each pathway works end-to-end. @@ -61,9 +68,12 @@ from cuda.core import ( Device, DeviceMemoryResource, + GraphMemoryResource, LaunchConfig, ManagedMemoryResource, + ManagedMemoryResourceOptions, PinnedMemoryResource, + PinnedMemoryResourceOptions, Program, ProgramOptions, launch, @@ -210,6 +220,115 @@ def demo_explicit_device_pool(device, stream, kernel, size): explicit_mr.close() +def demo_pool_options_and_graph_mr(device, stream, kernel, size): + """Configure resource options and allocate scratch inside a captured graph. + + This phase shows two orthogonal features of the memory-resource stack: + + * ``ManagedMemoryResourceOptions`` / ``PinnedMemoryResourceOptions`` -- + pass structured options to control preferred location, NUMA binding, + IPC exportability, and similar policy knobs when creating a resource. + * ``GraphMemoryResource`` -- allocate transient scratch memory *inside* + a CUDA graph. The allocation and the matching free become nodes in + the graph, so the scratch buffer's lifetime is tied to the graph + execution and the driver can reuse the storage across replays. + """ + print("\n[4] Pool options + GraphMemoryResource (scratch inside a graph)") + dtype = np.float32 + nbytes = size * dtype().itemsize + config = LaunchConfig(grid=(size + 127) // 128, block=128) + + # Pinned resource with optional NUMA binding. Fall back to default when the + # device does not report a preferred host NUMA node. + pinned_options = {"ipc_enabled": False} + host_numa_id = getattr(device.properties, "host_numa_id", -1) + if host_numa_id >= 0: + pinned_options["numa_id"] = host_numa_id + pinned_mr = PinnedMemoryResource(options=PinnedMemoryResourceOptions(**pinned_options)) + + # Managed resource with the GPU as the preferred backing location. Reads + # from the host will still succeed (the driver migrates on demand), but + # kernels will hit device-local memory without a page fault. + managed_options = ManagedMemoryResourceOptions( + preferred_location=device.device_id, + preferred_location_type="device", + ) + managed_mr = ManagedMemoryResource(options=managed_options) + + # A GraphMemoryResource is a pool tied to `device`; every allocate() call + # against it inside a graph builder produces a Buffer whose lifetime is a + # graph node, not a wall-clock call. + graph_mr = GraphMemoryResource(device) + + pinned_buffer = pinned_mr.allocate(nbytes, stream=stream) + managed_buffer = managed_mr.allocate(nbytes, stream=stream) + graph_capture = graph = None + try: + managed_array = np.from_dlpack(managed_buffer).view(dtype=dtype) + pinned_array = np.from_dlpack(pinned_buffer).view(dtype=dtype) + + managed_array[:] = np.arange(size, dtype=dtype) + managed_original = managed_array.copy() + stream.sync() + + # Sanity: copy_to across resources still works with the option-driven + # pinned / managed pool. + managed_buffer.copy_to(pinned_buffer, stream=stream) + stream.sync() + assert np.array_equal(pinned_array, managed_original) + + # Build a graph that: + # 1) allocates a scratch buffer from graph_mr, + # 2) copies the managed buffer into it, + # 3) runs scale_and_bias on the scratch buffer, + # 4) copies the result back into the managed buffer, + # 5) frees the scratch buffer. + # The alloc + free are graph nodes; there is no host-side malloc on + # every graph.launch() call. + graph_builder = device.create_graph_builder().begin_building("relaxed") + scratch_buffer = graph_mr.allocate(nbytes, stream=graph_builder) + scratch_buffer.copy_from(managed_buffer, stream=graph_builder) + launch( + graph_builder, + config, + kernel, + scratch_buffer, + np.uint64(size), + np.float32(2.0), + np.float32(1.0), + ) + managed_buffer.copy_from(scratch_buffer, stream=graph_builder) + scratch_buffer.close() + + graph_capture = graph_builder.end_building() + graph = graph_capture.complete() + graph.upload(stream) + graph.launch(stream) + stream.sync() + + expected = managed_original * 2 + 1 + np.testing.assert_allclose(managed_array, expected) + # And confirm the cross-resource copy still lines up. + managed_buffer.copy_to(pinned_buffer, stream=stream) + stream.sync() + np.testing.assert_allclose(pinned_array, expected) + + print(f" PinnedMemoryResource numa_id: {pinned_mr.numa_id}") + print(f" ManagedMemoryResource preferred_location: {managed_mr.preferred_location}") + print(f" GraphMemoryResource reserved high watermark: {graph_mr.attributes.reserved_mem_high}") + print(" Graph with in-graph scratch alloc/free verified") + finally: + if graph is not None: + graph.close() + if graph_capture is not None: + graph_capture.close() + pinned_buffer.close(stream) + managed_buffer.close(stream) + graph_mr.close() + pinned_mr.close() + managed_mr.close() + + def main(): import argparse @@ -246,6 +365,7 @@ def main(): demo_device_and_pinned(device, stream, kernel, args.elements) demo_managed(device, stream, kernel, args.elements) demo_explicit_device_pool(device, stream, kernel, args.elements) + demo_pool_options_and_graph_mr(device, stream, kernel, args.elements) print("\nDone") return 0 diff --git a/samples/vectorAdd/README.md b/samples/vectorAdd/README.md index 8abc4728e33..92da961f7ab 100644 --- a/samples/vectorAdd/README.md +++ b/samples/vectorAdd/README.md @@ -4,13 +4,29 @@ Run your first GPU kernel: add two vectors element-wise on the GPU using the [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) API with runtime compilation. +The sample compiles a *templated* kernel and instantiates it for two +element types in a single `Program.compile()` call (via +`name_expressions`), then runs two phases: + +1. `vectorAdd` against CuPy-allocated input and output buffers. +2. `vectorAdd` where the output buffer is allocated through + `Device.allocate()` and passed straight to the kernel. That raw + `Buffer` is then wrapped as a zero-copy CuPy view for verification. + +Phase 2 is the pattern to reach for when you want the kernel to write into +memory you own directly, without depending on CuPy's allocator for the +output. + ## What You'll Learn - Writing CUDA kernels in C++ with template support - Runtime compilation of CUDA kernels from Python +- Requesting multiple template instantiations via `name_expressions` - Using `cuda.core` for device management, programs, and launches - Configuring and launching kernels with grid and block dimensions - Using CuPy for GPU memory management +- Allocating your own output buffer with `Device.allocate()` and wrapping + it as a CuPy view - Verifying GPU results against CPU computation ## Key Libraries @@ -23,7 +39,9 @@ Run your first GPU kernel: add two vectors element-wise on the GPU using the [`c ### From `cuda.core` - `Device` — Initialize and manage CUDA device +- `Device.allocate(nbytes, stream=...)` — Allocate a raw `Buffer` from the device pool - `Program` — Create program from kernel source code +- `Program.compile("cubin", name_expressions=(...))` — Emit specific template instantiations - `ProgramOptions` — Set compilation options (C++ standard, architecture) - `LaunchConfig` — Configure kernel launch parameters - `launch` — Execute kernel on specified stream @@ -104,11 +122,17 @@ python vectorAdd.py --no-verify [Vector addition using CUDA Core API] Device: Compute Capability: sm_ -Compiling kernel 'vectorAdd'... -Kernel compiled successfully -[Vector addition of 50000 elements] -CUDA kernel launch with 196 blocks of 256 threads -Verifying result... +Compiling kernel 'vectorAdd' and 'vectorAdd'... +Kernels compiled successfully + +[1] vectorAdd on 50000 CuPy-allocated elements + CUDA kernel launch with 196 blocks of 256 threads + Verifying result... + +[2] vectorAdd on 25000 elements with device.allocate() output + CUDA kernel launch with 98 blocks of 256 threads + Verifying result... + Test PASSED Done diff --git a/samples/vectorAdd/vectorAdd.py b/samples/vectorAdd/vectorAdd.py index ec1eca0cf96..8915a145884 100755 --- a/samples/vectorAdd/vectorAdd.py +++ b/samples/vectorAdd/vectorAdd.py @@ -33,6 +33,17 @@ This sample demonstrates element-wise vector addition: C = A + B using cuda.core for runtime compilation and kernel launch. + +The kernel is templated on the element type ``T``. The sample compiles +two instantiations of the template in a single ``Program.compile()`` call +via the ``name_expressions`` argument, then launches: + + * ``vectorAdd`` against CuPy-allocated buffers + * ``vectorAdd`` against a buffer we allocate ourselves through + ``Device.allocate()`` (wrapped as a CuPy view for verification) + +The second phase illustrates how to hand a raw ``Buffer`` to a kernel and +zero-copy view it as a CuPy array to check the result. """ import sys @@ -72,6 +83,70 @@ """ +def _launch_add(stream, kernel, size, a_ptr, b_ptr, c_ptr, threads_per_block=256): + blocks_per_grid = (size + threads_per_block - 1) // threads_per_block + print(f" CUDA kernel launch with {blocks_per_grid} blocks of {threads_per_block} threads") + config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) + launch(stream, config, kernel, a_ptr, b_ptr, c_ptr, cp.int32(size)) + stream.sync() + + +def _demo_float_cupy(stream, kernel, num_elements, verify): + """Phase 1: `vectorAdd` with CuPy-managed buffers.""" + print(f"\n[1] vectorAdd on {num_elements} CuPy-allocated elements") + dtype = cp.float32 + + a = cp.random.rand(num_elements).astype(dtype) + b = cp.random.rand(num_elements).astype(dtype) + c = cp.empty(num_elements, dtype=dtype) + _launch_add(stream, kernel, num_elements, a.data.ptr, b.data.ptr, c.data.ptr) + + if verify: + print(" Verifying result...") + if not verify_array_result(c, a + b): + return False + return True + + +def _demo_double_owned_buffer(device, stream, kernel, num_elements, verify): + """Phase 2: `vectorAdd` with an output Buffer we own. + + Instead of letting CuPy allocate the output, we call ``device.allocate()`` + to get a raw ``Buffer``, pass it straight to the kernel, and then wrap it + as a CuPy array (through ``UnownedMemory``) purely for verification. + """ + print(f"\n[2] vectorAdd on {num_elements} elements with device.allocate() output") + dtype = cp.float64 + + a = cp.random.rand(num_elements).astype(dtype) + b = cp.random.rand(num_elements).astype(dtype) + + out_bytes = num_elements * dtype().itemsize + out_buf = device.allocate(out_bytes, stream=stream) + device.sync() + + try: + _launch_add(stream, kernel, num_elements, a.data.ptr, b.data.ptr, out_buf) + + if verify: + print(" Verifying result...") + # Wrap the raw Buffer as a CuPy array without copying so we can + # compare against the reference computed with CuPy. + c_view = cp.ndarray( + num_elements, + dtype=dtype, + memptr=cp.cuda.MemoryPointer( + cp.cuda.UnownedMemory(int(out_buf.handle), out_buf.size, out_buf), + 0, + ), + ) + if not verify_array_result(c_view, a + b): + return False + return True + finally: + out_buf.close(stream) + + def vector_add_cuda_core(num_elements=50000, device_id=0, verify=True): """ Perform vector addition using cuda.core API. @@ -90,6 +165,7 @@ def vector_add_cuda_core(num_elements=50000, device_id=0, verify=True): bool True if successful, False otherwise """ + stream = None try: # Initialize device print("[Vector addition using CUDA Core API]") @@ -101,52 +177,27 @@ def vector_add_cuda_core(num_elements=50000, device_id=0, verify=True): stream = device.create_stream() - # Compile kernel - print("Compiling kernel 'vectorAdd'...") + # Compile both template instantiations in a single call: name_expressions + # tells NVRTC which specializations to emit into the resulting cubin. + print("Compiling kernel 'vectorAdd' and 'vectorAdd'...") program_options = ProgramOptions(std="c++17", arch=f"sm_{device.arch}") program = Program(VECTOR_ADD_KERNEL, code_type="c++", options=program_options) - module = program.compile("cubin", name_expressions=("vectorAdd",)) - kernel = module.get_kernel("vectorAdd") - print("Kernel compiled successfully") - - # Allocate and initialize vectors - print(f"[Vector addition of {num_elements} elements]") - dtype = cp.float32 - - a = cp.random.rand(num_elements).astype(dtype) - b = cp.random.rand(num_elements).astype(dtype) - c = cp.empty(num_elements, dtype=dtype) - - # Synchronize before kernel launch - device.sync() - - # Configure and launch kernel - threads_per_block = 256 - blocks_per_grid = (num_elements + threads_per_block - 1) // threads_per_block - - print(f"CUDA kernel launch with {blocks_per_grid} blocks of {threads_per_block} threads") - - config = LaunchConfig(grid=blocks_per_grid, block=threads_per_block) - - # Launch kernel - launch( - stream, - config, - kernel, - a.data.ptr, - b.data.ptr, - c.data.ptr, - cp.int32(num_elements), + module = program.compile( + "cubin", + name_expressions=("vectorAdd", "vectorAdd"), ) - stream.sync() + float_kernel = module.get_kernel("vectorAdd") + double_kernel = module.get_kernel("vectorAdd") + print("Kernels compiled successfully") - # Verify result - if verify: - print("Verifying result...") - expected = a + b - if not verify_array_result(c, expected): - return False + if not _demo_float_cupy(stream, float_kernel, num_elements, verify): + return False + + # Half as many elements for the double demo to keep the sample fast. + if not _demo_double_owned_buffer(device, stream, double_kernel, max(num_elements // 2, 1), verify): + return False + print("\nTest PASSED") return True except Exception as e: @@ -155,6 +206,9 @@ def vector_add_cuda_core(num_elements=50000, device_id=0, verify=True): traceback.print_exc() return False + finally: + if stream is not None: + stream.close() def main(): From 9b0be3afe4d77e291d59530367464f539c637294 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 16 Jul 2026 11:51:15 -0500 Subject: [PATCH 05/11] Migrate existing cuda.core examples to /sampels --- cuda_core/docs/source/examples.rst | 133 +++++++-- .../examples/simple_multi_gpu_example.py | 148 ---------- .../strided_memory_view_constructors.py | 84 ------ cuda_core/examples/strided_memory_view_cpu.py | 133 --------- cuda_core/examples/strided_memory_view_gpu.py | 124 -------- cuda_core/examples/thread_block_cluster.py | 163 ----------- cuda_core/tests/example_tests/test_args.json | 3 + .../example_tests/test_basic_examples.py | 76 ----- samples/glInteropPlasma/README.md | 130 +++++++++ .../glInteropPlasma/glInteropPlasma.py | 266 ++++++++++-------- samples/glInteropPlasma/requirements.txt | 7 + samples/simpleMultiGpu/README.md | 102 +++++++ samples/simpleMultiGpu/requirements.txt | 6 + samples/simpleMultiGpu/simpleMultiGpu.py | 198 +++++++++++++ .../stridedMemoryViewConstructors/README.md | 112 ++++++++ .../requirements.txt | 7 + .../stridedMemoryViewConstructors.py | 145 ++++++++++ samples/stridedMemoryViewCpu/README.md | 108 +++++++ samples/stridedMemoryViewCpu/requirements.txt | 8 + .../stridedMemoryViewCpu.py | 155 ++++++++++ samples/stridedMemoryViewGpu/README.md | 100 +++++++ samples/stridedMemoryViewGpu/requirements.txt | 7 + .../stridedMemoryViewGpu.py | 145 ++++++++++ samples/threadBlockCluster/README.md | 126 +++++++++ samples/threadBlockCluster/requirements.txt | 6 + .../threadBlockCluster/threadBlockCluster.py | 214 ++++++++++++++ 26 files changed, 1831 insertions(+), 875 deletions(-) delete mode 100644 cuda_core/examples/simple_multi_gpu_example.py delete mode 100644 cuda_core/examples/strided_memory_view_constructors.py delete mode 100644 cuda_core/examples/strided_memory_view_cpu.py delete mode 100644 cuda_core/examples/strided_memory_view_gpu.py delete mode 100644 cuda_core/examples/thread_block_cluster.py delete mode 100644 cuda_core/tests/example_tests/test_basic_examples.py create mode 100644 samples/glInteropPlasma/README.md rename cuda_core/examples/gl_interop_plasma.py => samples/glInteropPlasma/glInteropPlasma.py (57%) create mode 100644 samples/glInteropPlasma/requirements.txt create mode 100644 samples/simpleMultiGpu/README.md create mode 100644 samples/simpleMultiGpu/requirements.txt create mode 100644 samples/simpleMultiGpu/simpleMultiGpu.py create mode 100644 samples/stridedMemoryViewConstructors/README.md create mode 100644 samples/stridedMemoryViewConstructors/requirements.txt create mode 100644 samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py create mode 100644 samples/stridedMemoryViewCpu/README.md create mode 100644 samples/stridedMemoryViewCpu/requirements.txt create mode 100644 samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py create mode 100644 samples/stridedMemoryViewGpu/README.md create mode 100644 samples/stridedMemoryViewGpu/requirements.txt create mode 100644 samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py create mode 100644 samples/threadBlockCluster/README.md create mode 100644 samples/threadBlockCluster/requirements.txt create mode 100644 samples/threadBlockCluster/threadBlockCluster.py diff --git a/cuda_core/docs/source/examples.rst b/cuda_core/docs/source/examples.rst index bd693baa073..5de94e805ac 100644 --- a/cuda_core/docs/source/examples.rst +++ b/cuda_core/docs/source/examples.rst @@ -5,28 +5,111 @@ Examples ======== The canonical, runnable examples for ``cuda.core`` live under the top-level -:samples:`samples/ directory ` of the cuda-python repository. They are -self-contained scripts (each with a ``README.md`` and PEP 723 dependency -block) and are exercised as part of the ``cuda.core`` test suite. - -Use the samples directory as your first stop when looking for a runnable -starting point for a specific workflow. The remaining entries below are the -few examples still hosted alongside the package that have not yet been -migrated to ``samples/``. - -Not yet migrated to samples/ ----------------------------- - -- :cuda-core-example:`simple_multi_gpu_example.py ` - compiles and launches kernels across multiple GPUs. -- :cuda-core-example:`thread_block_cluster.py ` - demonstrates thread block cluster launch configuration on Hopper-class GPUs. -- :cuda-core-example:`strided_memory_view_constructors.py ` - walks through the explicit ``StridedMemoryView.from_*`` constructors. -- :cuda-core-example:`strided_memory_view_cpu.py ` - uses ``StridedMemoryView`` with JIT-compiled CPU code via ``cffi``. -- :cuda-core-example:`strided_memory_view_gpu.py ` - uses ``StridedMemoryView`` with JIT-compiled GPU code and foreign GPU buffers. -- :cuda-core-example:`gl_interop_plasma.py ` - renders a CUDA-generated plasma effect through OpenGL interop without CPU - copies. +:samples:`samples/ directory ` of the cuda-python repository. Each sample +is a self-contained directory with its own ``README.md``, ``requirements.txt``, +and PEP 723 dependency block, and every sample is exercised as part of the +``cuda.core`` test suite. + +Getting started +--------------- + +- :sample:`vectorAdd ` + compiles and launches a templated vector-add kernel and demonstrates + ``Device.allocate()`` and ``name_expressions``. +- :sample:`deviceQuery ` + enumerates every CUDA device with an ``nvidia-smi``-style summary and an + optional ``--verbose`` mode for the long-tail property list. +- :sample:`systemInfo ` + reports system-wide CUDA information (driver / runtime / NVML). + +Kernels and launch configuration +-------------------------------- + +- :sample:`launchConfigTuning ` + explores how launch-configuration choices affect kernel performance. +- :sample:`threadBlockCluster ` + demonstrates ``LaunchConfig(cluster=...)`` on Hopper-class GPUs. +- :sample:`tmaTensorMap ` + uses Tensor Memory Accelerator descriptors for bulk data movement. +- :sample:`greenContext ` + partitions SMs across kernels with green contexts. +- :sample:`kernelNsysProfile ` + annotates kernel launches with NVTX markers for Nsight Systems. + +Memory management and interop +----------------------------- + +- :sample:`memoryResources ` + covers ``DeviceMemoryResource``, ``PinnedMemoryResource``, + ``ManagedMemoryResource``, and ``GraphMemoryResource``, plus configurable + resource options. +- :sample:`copyImageArraytoGPU ` + stages host-to-device copies through ``PinnedMemoryResource``. +- :sample:`blurImageUnifiedMemory ` + applies a stencil kernel over unified memory. +- :sample:`stridedMemoryViewConstructors ` + walks through the four ``StridedMemoryView.from_*`` constructors. +- :sample:`stridedMemoryViewCpu ` + dispatches to a JIT-compiled CPU function via ``cffi``. +- :sample:`stridedMemoryViewGpu ` + dispatches to an NVRTC-compiled GPU kernel through the same decorator. +- :sample:`ipcMemoryPool ` + shares an IPC-enabled ``DeviceMemoryResource`` across processes. + +CUDA graphs and linking +----------------------- + +- :sample:`cudaGraphs ` + captures and replays a multi-kernel graph, then reuses it via ``Graph.update()``. +- :sample:`jitLtoLinking ` + links two device modules with PTX vs LTO and swaps in a runtime plug-in. + +Framework interop and compute algorithms +---------------------------------------- + +- :sample:`customPyTorchKernel ` + launches a cuda.core kernel from a PyTorch autograd function. +- :sample:`customTensorFlowKernel ` + wires a cuda.core kernel into a TensorFlow custom op. +- :sample:`numpyVsCupy ` + compares NumPy and CuPy execution paths side-by-side. +- :sample:`fftSignalAnalysis ` + runs a CuPy FFT-based signal analysis pipeline. +- :sample:`binarySearch `, + :sample:`prefixSum `, + :sample:`reduction `, + :sample:`parallelReduction `, + :sample:`reductionMultiBlockCG `, + :sample:`parallelHistogram `, + :sample:`blockwiseSum `, + :sample:`matrixMulSharedMem `, + :sample:`cudaComputeLambdas `, + :sample:`pageRank ` -- classic parallel-algorithm building blocks. + +Multi-GPU and streams +--------------------- + +- :sample:`simpleMultiGpu ` + runs independent kernels on two GPUs in the same process. +- :sample:`simpleP2P ` + demonstrates peer-to-peer memory access between GPUs. +- :sample:`multiGPUGradientAverage ` + averages gradients across GPUs with MPI. +- :sample:`streamingCopyComputeOverlap ` + overlaps copies and compute across multiple streams. +- :sample:`simpleZeroCopy ` + runs kernels against zero-copy mapped host memory. +- :sample:`processCheckpoint ` + checkpoints and restores CUDA process state. + +Graphics interop +---------------- + +- :sample:`glInteropPlasma ` + writes CUDA-generated pixels into an OpenGL PBO with zero CPU round-trip. + +Simple utilities +---------------- + +- :sample:`simplePrint ` + minimal kernel that prints from the device. diff --git a/cuda_core/examples/simple_multi_gpu_example.py b/cuda_core/examples/simple_multi_gpu_example.py deleted file mode 100644 index e4d7a1ccfb5..00000000000 --- a/cuda_core/examples/simple_multi_gpu_example.py +++ /dev/null @@ -1,148 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates how to use cuda.core to compile and launch -# kernels on multiple GPUs. Requires at least 2 GPUs. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "cupy-cuda13x"] -# /// - -import sys - -import cupy as cp - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch, system - -dtype = cp.float32 -size = 50000 - - -# This adaptor ensures that any foreign stream (ex: from CuPy) that has not yet -# supported the __cuda_stream__ protocol can still be recognized by cuda.core. -class StreamAdaptor: - def __init__(self, obj): - self.obj = obj - - def __cuda_stream__(self): - # Note: CuPy streams have a .ptr attribute - return (0, self.obj.ptr) - - -def main(): - if system.get_num_devices() < 2: - print("this example requires at least 2 GPUs", file=sys.stderr) - sys.exit(1) - - # Set GPU 0 - dev0 = Device(0) - dev0.set_current() - stream0 = dev0.create_stream() - stream1 = None - cp_stream0 = None - cp_stream1 = None - - try: - # Compile a kernel targeting GPU 0 to compute c = a + b - code_add = """ -extern "C" -__global__ void vector_add(const float* A, - const float* B, - float* C, - size_t N) { - const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; - for (size_t i=tid; i=2.1"] -# /// - -import sys - -import cupy as cp -import numpy as np - -from cuda.core import Device -from cuda.core.utils import StridedMemoryView - - -def dense_c_strides(shape): - if not shape: - return () - - strides = [1] * len(shape) - for index in range(len(shape) - 2, -1, -1): - strides[index] = strides[index + 1] * shape[index + 1] - return tuple(strides) - - -def main(): - if np.lib.NumpyVersion(np.__version__) < "2.1.0": - print("This example requires NumPy 2.1.0 or later", file=sys.stderr) - sys.exit(1) - - device = Device() - device.set_current() - stream = device.create_stream() - buffer = None - - try: - host_array = np.arange(12, dtype=np.int16).reshape(3, 4) - host_view = StridedMemoryView.from_array_interface(host_array) - host_dlpack_view = StridedMemoryView.from_dlpack(host_array, stream_ptr=-1) - - assert host_view.shape == host_array.shape - assert host_view.size == host_array.size - assert not host_view.is_device_accessible - assert np.array_equal(np.from_dlpack(host_view), host_array) - assert np.array_equal(np.from_dlpack(host_dlpack_view), host_array) - - gpu_array = cp.arange(12, dtype=cp.float32).reshape(3, 4) - dlpack_view = StridedMemoryView.from_dlpack(gpu_array, stream_ptr=stream.handle) - cai_view = StridedMemoryView.from_cuda_array_interface(gpu_array, stream_ptr=stream.handle) - - cp.testing.assert_array_equal(cp.from_dlpack(dlpack_view), gpu_array) - cp.testing.assert_array_equal(cp.from_dlpack(cai_view), gpu_array) - - buffer = device.memory_resource.allocate(gpu_array.nbytes, stream=stream) - buffer_array = cp.from_dlpack(buffer).view(dtype=cp.float32).reshape(gpu_array.shape) - buffer_array[...] = gpu_array - device.sync() - - buffer_view = StridedMemoryView.from_buffer( - buffer, - shape=gpu_array.shape, - strides=dense_c_strides(gpu_array.shape), - dtype=np.dtype(np.float32), - ) - cp.testing.assert_array_equal(cp.from_dlpack(buffer_view), gpu_array) - - print("Constructed StridedMemoryView objects from array, DLPack, CAI, and Buffer inputs.") - finally: - if buffer is not None: - buffer.close(stream) - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/strided_memory_view_cpu.py b/cuda_core/examples/strided_memory_view_cpu.py deleted file mode 100644 index 3acebac3f12..00000000000 --- a/cuda_core/examples/strided_memory_view_cpu.py +++ /dev/null @@ -1,133 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates StridedMemoryView for interfacing with foreign -# C/C++ functions, using JIT-compiled CPU code via cffi. Requires cffi. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "cffi", "setuptools"] -# /// - -import importlib -import string -import sys -import tempfile -from contextlib import contextmanager - -try: - from cffi import FFI -except ImportError: - print("cffi is not installed, this example requires cffi", file=sys.stderr) - sys.exit(1) -import numpy as np - -from cuda.core.utils import StridedMemoryView, args_viewable_as_strided_memory - -# ################################################################################ -# -# Usually this entire code block is in a separate file, built as a Python extension -# module that can be imported by users at run time. For illustrative purposes we -# use JIT compilation to make this demo self-contained. -# -# Here we assume an in-place operation, equivalent to the following NumPy code: -# -# >>> arr = ... -# >>> assert arr.dtype == np.int32 -# >>> assert arr.ndim == 1 -# >>> arr += np.arange(arr.size, dtype=arr.dtype) -# -# is implemented for both CPU and GPU at low-level, with the following C function -# signature: -func_name = "inplace_plus_arange_N" -func_sig = f"void {func_name}(int* data, size_t N)" - - -# Now we are prepared to run the code from the user's perspective! -# -# ################################################################################ - - -# Below, as a user we want to perform the said in-place operation on a CPU -# or GPU, by calling the corresponding function implemented "elsewhere" -# (in the body of run function). - - -# We assume the 0-th argument supports either DLPack or CUDA Array Interface (both -# of which are supported by StridedMemoryView). -@args_viewable_as_strided_memory((0,)) -def my_func(arr, cpu_prog, cpu_func): - # Create a memory view over arr (assumed to be a 1D array of int32). The stream - # ordering is taken care of, so that arr can be safely accessed on our work - # stream (ordered after a data stream on which arr is potentially prepared). - view = arr.view(-1) - assert isinstance(view, StridedMemoryView) - assert len(view.shape) == 1 - assert view.dtype == np.int32 - assert not view.is_device_accessible - - size = view.shape[0] - # DLPack also supports host arrays. We want to know if the array data is - # accessible from the GPU, and dispatch to the right routine accordingly. - cpu_func(cpu_prog.cast("int*", view.ptr), size) - - -def _create_cpu_program(): - # Here is a concrete (very naive!) implementation on CPU: - cpu_code = string.Template(r""" - extern "C" - $func_sig { - for (size_t i = 0; i < N; i++) { - data[i] += i; - } - } - """).substitute(func_sig=func_sig) - # This is cffi's way of JIT compiling & loading a CPU function. cffi builds an - # extension module that has the Python binding to the underlying C function. - # For more details, please refer to cffi's documentation. - cpu_prog = FFI() - cpu_prog.cdef(f"{func_sig};") - cpu_prog.set_source( - "_cpu_obj", - cpu_code, - source_extension=".cpp", - extra_compile_args=["-std=c++11"], - ) - return cpu_prog - - -@contextmanager -def _compiled_cpu_func(cpu_prog, temp_dir): - saved_sys_path = sys.path.copy() - try: - cpu_prog.compile(tmpdir=temp_dir) - sys.path.append(temp_dir) - cpu_func = getattr(importlib.import_module("_cpu_obj.lib"), func_name) - yield cpu_func - finally: - sys.path = saved_sys_path - # Ensure cffi modules are unloadable before removing the temp build dir. - sys.modules.pop("_cpu_obj.lib", None) - sys.modules.pop("_cpu_obj", None) - - -def _run_example(cpu_prog, cpu_func): - arr_cpu = np.zeros(1024, dtype=np.int32) - print(f"before: {arr_cpu[:10]=}", file=sys.stderr) - my_func(arr_cpu, cpu_prog, cpu_func) - print(f"after: {arr_cpu[:10]=}", file=sys.stderr) - assert np.allclose(arr_cpu, np.arange(1024, dtype=np.int32)) - - -def main(): - cpu_prog = _create_cpu_program() - with tempfile.TemporaryDirectory() as temp_dir, _compiled_cpu_func(cpu_prog, temp_dir) as cpu_func: - _run_example(cpu_prog, cpu_func) - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/strided_memory_view_gpu.py b/cuda_core/examples/strided_memory_view_gpu.py deleted file mode 100644 index b481ae8060c..00000000000 --- a/cuda_core/examples/strided_memory_view_gpu.py +++ /dev/null @@ -1,124 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates StridedMemoryView for interfacing with foreign -# C/C++ functions, using JIT-compiled GPU code. Requires cupy. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core", "nvidia-cuda-nvrtc", "cupy-cuda13x"] -# /// - -import string -import sys - -try: - import cupy as cp -except ImportError: - print("cupy is not installed, this example requires cupy", file=sys.stderr) - sys.exit(1) -import numpy as np - -from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch -from cuda.core.utils import StridedMemoryView, args_viewable_as_strided_memory - -# ################################################################################ -# -# Usually this entire code block is in a separate file, built as a Python extension -# module that can be imported by users at run time. For illustrative purposes we -# use JIT compilation to make this demo self-contained. -# -# Here we assume an in-place operation, equivalent to the following NumPy code: -# -# >>> arr = ... -# >>> assert arr.dtype == np.int32 -# >>> assert arr.ndim == 1 -# >>> arr += np.arange(arr.size, dtype=arr.dtype) -# -# is implemented for both CPU and GPU at low-level, with the following C function -# signature: -func_name = "inplace_plus_arange_N" -func_sig = f"void {func_name}(int* data, size_t N)" - -# Now we are prepared to run the code from the user's perspective! -# -# ################################################################################ - - -# Below, as a user we want to perform the said in-place operation on either CPU -# or GPU, by calling the corresponding function implemented "elsewhere" (done above). - - -# We assume the 0-th argument supports either DLPack or CUDA Array Interface (both -# of which are supported by StridedMemoryView). -@args_viewable_as_strided_memory((0,)) -def my_func(arr, work_stream, kernel): - # Create a memory view over arr (assumed to be a 1D array of int32). The stream - # ordering is taken care of, so that arr can be safely accessed on our work - # stream (ordered after a data stream on which arr is potentially prepared). - view = arr.view(work_stream.handle if work_stream else -1) - assert isinstance(view, StridedMemoryView) - assert len(view.shape) == 1 - assert view.dtype == np.int32 - assert view.is_device_accessible - - size = view.shape[0] - # DLPack also supports host arrays. We want to know if the array data is - # accessible from the GPU, and dispatch to the right routine accordingly. - block = 256 - grid = (size + block - 1) // block - config = LaunchConfig(grid=grid, block=block) - launch(work_stream, config, kernel, view.ptr, np.uint64(size)) - # Here we're being conservative and synchronize over our work stream, - # assuming we do not know the data stream; if we know then we could - # just order the data stream after the work stream here, e.g. - # - # data_stream.wait(work_stream) - # - # without an expensive synchronization (with respect to the host). - work_stream.sync() - - -def main(): - global my_func - # Here is a concrete (very naive!) implementation on GPU: - gpu_code = string.Template(r""" - extern "C" - __global__ $func_sig { - const size_t tid = threadIdx.x + blockIdx.x * blockDim.x; - const size_t stride_size = gridDim.x * blockDim.x; - for (size_t i = tid; i < N; i += stride_size) { - data[i] += i; - } - } - """).substitute(func_sig=func_sig) - - # To know the GPU's compute capability, we need to identify which GPU to use. - dev = Device(0) - dev.set_current() - prog = Program(gpu_code, code_type="c++", options=ProgramOptions(arch=f"sm_{dev.arch}", std="c++11")) - mod = prog.compile(target_type="cubin") - kernel = mod.get_kernel(func_name) - - stream = dev.create_stream() - try: - # Create input array on GPU - arr_gpu = cp.ones(1024, dtype=cp.int32) - print(f"before: {arr_gpu[:10]=}") - - # Run the workload - my_func(arr_gpu, stream, kernel) - - # Check the result - print(f"after: {arr_gpu[:10]=}") - assert cp.allclose(arr_gpu, 1 + cp.arange(1024, dtype=cp.int32)) - finally: - stream.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/examples/thread_block_cluster.py b/cuda_core/examples/thread_block_cluster.py deleted file mode 100644 index 078407ac6be..00000000000 --- a/cuda_core/examples/thread_block_cluster.py +++ /dev/null @@ -1,163 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates thread block clusters in the CUDA launch -# configuration and verifies that the correct grid size is passed to the kernel. -# Requires compute capability >= 9.0 and CUDA_PATH. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings", "cuda_core"] -# /// - -import os -import sys - -import numpy as np - -from cuda.core import ( - Device, - LaunchConfig, - LegacyPinnedMemoryResource, - Program, - ProgramOptions, - launch, -) -from cuda.pathfinder import get_cuda_path_or_home - -# print cluster info using a kernel and store results in pinned memory -code = r""" -#include - -namespace cg = cooperative_groups; - -extern "C" -__global__ void check_cluster_info(unsigned int* grid_dims, unsigned int* cluster_dims, unsigned int* block_dims) { - auto g = cg::this_grid(); - auto b = cg::this_thread_block(); - - if (g.cluster_rank() == 0 && g.block_rank() == 0 && g.thread_rank() == 0) { - // Store grid dimensions (in blocks) - grid_dims[0] = g.dim_blocks().x; - grid_dims[1] = g.dim_blocks().y; - grid_dims[2] = g.dim_blocks().z; - - // Store cluster dimensions - cluster_dims[0] = g.dim_clusters().x; - cluster_dims[1] = g.dim_clusters().y; - cluster_dims[2] = g.dim_clusters().z; - - // Store block dimensions (in threads) - block_dims[0] = b.dim_threads().x; - block_dims[1] = b.dim_threads().y; - block_dims[2] = b.dim_threads().z; - - // Also print to console - printf("grid dim: (%u, %u, %u)\n", g.dim_blocks().x, g.dim_blocks().y, g.dim_blocks().z); - printf("cluster dim: (%u, %u, %u)\n", g.dim_clusters().x, g.dim_clusters().y, g.dim_clusters().z); - printf("block dim: (%u, %u, %u)\n", b.dim_threads().x, b.dim_threads().y, b.dim_threads().z); - } -} -""" - - -def main(): - if np.lib.NumpyVersion(np.__version__) < "2.2.5": - print("This example requires NumPy 2.2.5 or later", file=sys.stderr) - sys.exit(1) - - cuda_path = get_cuda_path_or_home() - if cuda_path is None: - print("This example requires CUDA_PATH or CUDA_HOME to point to a CUDA toolkit.", file=sys.stderr) - sys.exit(1) - cuda_include = os.path.join(cuda_path, "include") - if not os.path.isdir(cuda_include): - print(f"CUDA include directory not found: {cuda_include}", file=sys.stderr) - sys.exit(1) - include_path = [cuda_include] - cccl_include = os.path.join(cuda_include, "cccl") - if os.path.isdir(cccl_include): - include_path.insert(0, cccl_include) - - dev = Device() - arch = dev.compute_capability - if arch < (9, 0): - print( - "this example requires compute capability >= 9.0 (since thread block cluster is a hardware feature)", - file=sys.stderr, - ) - sys.exit(1) - arch = "".join(f"{i}" for i in arch) - - # prepare program & compile kernel - dev.set_current() - prog = Program( - code, - code_type="c++", - options=ProgramOptions(arch=f"sm_{arch}", std="c++17", include_path=include_path), - ) - mod = prog.compile(target_type="cubin") - kernel = mod.get_kernel("check_cluster_info") - - # prepare launch config - grid = 4 - cluster = 2 - block = 32 - config = LaunchConfig(grid=grid, cluster=cluster, block=block) - - # allocate pinned memory to store kernel results - pinned_mr = LegacyPinnedMemoryResource() - element_size = np.dtype(np.uint32).itemsize - grid_buffer = None - cluster_buffer = None - block_buffer = None - - try: - # allocate 3 uint32 values each for grid, cluster, and block dimensions - grid_buffer = pinned_mr.allocate(3 * element_size) - cluster_buffer = pinned_mr.allocate(3 * element_size) - block_buffer = pinned_mr.allocate(3 * element_size) - - # create NumPy arrays from the pinned memory - grid_dims = np.from_dlpack(grid_buffer).view(dtype=np.uint32) - cluster_dims = np.from_dlpack(cluster_buffer).view(dtype=np.uint32) - block_dims = np.from_dlpack(block_buffer).view(dtype=np.uint32) - - # initialize arrays to zero - grid_dims[:] = 0 - cluster_dims[:] = 0 - block_dims[:] = 0 - - # launch kernel on the default stream - launch(dev.default_stream, config, kernel, grid_buffer, cluster_buffer, block_buffer) - dev.sync() - - # verify results - print("\nResults stored in pinned memory:") - print(f"Grid dimensions (blocks): {tuple(grid_dims)}") - print(f"Cluster dimensions: {tuple(cluster_dims)}") - print(f"Block dimensions (threads): {tuple(block_dims)}") - - # verify that grid conversion worked correctly: - # LaunchConfig(grid=4, cluster=2) should result in 8 total blocks (4 clusters * 2 blocks/cluster) - expected_grid_blocks = grid * cluster # 4 * 2 = 8 - actual_grid_blocks = grid_dims[0] - - assert actual_grid_blocks == expected_grid_blocks, ( - f"Grid conversion failed: expected {expected_grid_blocks} total blocks, got {actual_grid_blocks}" - ) - finally: - if block_buffer is not None: - block_buffer.close() - if cluster_buffer is not None: - cluster_buffer.close() - if grid_buffer is not None: - grid_buffer.close() - - -if __name__ == "__main__": - main() diff --git a/cuda_core/tests/example_tests/test_args.json b/cuda_core/tests/example_tests/test_args.json index 3c2013c14a1..7af35e54b91 100644 --- a/cuda_core/tests/example_tests/test_args.json +++ b/cuda_core/tests/example_tests/test_args.json @@ -2,6 +2,9 @@ "simpleP2P": { "min_gpus": 2 }, + "simpleMultiGpu": { + "min_gpus": 2 + }, "reductionMultiBlockCG": { "python": { "args": ["--cuda-include-dir=$CUDA_HOME/include:$CUDA_HOME/include/cccl"] diff --git a/cuda_core/tests/example_tests/test_basic_examples.py b/cuda_core/tests/example_tests/test_basic_examples.py deleted file mode 100644 index 646d783c2f6..00000000000 --- a/cuda_core/tests/example_tests/test_basic_examples.py +++ /dev/null @@ -1,76 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: Apache-2.0 - -# If we have subcategories of examples in the future, this file can be split along those lines - -import glob -import os -import subprocess -import sys - -import pytest - -from cuda.core import Device, system - -try: - from cuda.bindings._test_helpers.pep723 import has_package_requirements_or_skip -except ImportError: - # If the import fails, we define a dummy function that will cause all tests to be skipped. - def has_package_requirements_or_skip(example): - pytest.skip("PEP 723 test helper is not available") - - -def has_compute_capability_9_or_higher() -> bool: - return Device().compute_capability >= (9, 0) - - -def has_multiple_devices() -> bool: - return system.get_num_devices() >= 2 - - -def has_display() -> bool: - # We assume that we don't want to open any windows during testing, - # so we always return False - return False - - -def is_not_windows() -> bool: - return sys.platform != "win32" - - -def has_cuda_path() -> bool: - return os.environ.get("CUDA_PATH", os.environ.get("CUDA_HOME")) is not None - - -# Specific system requirements for each of the examples. - - -SYSTEM_REQUIREMENTS = { - "gl_interop_plasma.py": has_display, - "simple_multi_gpu_example.py": has_multiple_devices, - "strided_memory_view_cpu.py": is_not_windows, - "thread_block_cluster.py": lambda: has_compute_capability_9_or_higher() and has_cuda_path(), -} - - -samples_path = os.path.join(os.path.dirname(__file__), "..", "..", "examples") -sample_files = [os.path.basename(x) for x in glob.glob(samples_path + "**/*.py", recursive=True)] - - -@pytest.mark.parametrize("example", sample_files) -@pytest.mark.parallel_threads_limit(8) -def test_example(example): - example_path = os.path.join(samples_path, example) - has_package_requirements_or_skip(example_path) - - system_requirement = SYSTEM_REQUIREMENTS.get(example, lambda: True) - if not system_requirement(): - pytest.skip(f"Skipping {example} due to unmet system requirement") - - process = subprocess.run([sys.executable, example_path], capture_output=True) # noqa: S603 - if process.returncode != 0: - if process.stdout: - print(process.stdout.decode(errors="replace")) - if process.stderr: - print(process.stderr.decode(errors="replace"), file=sys.stderr) - raise AssertionError(f"`{example}` failed ({process.returncode})") diff --git a/samples/glInteropPlasma/README.md b/samples/glInteropPlasma/README.md new file mode 100644 index 00000000000..d01cd709551 --- /dev/null +++ b/samples/glInteropPlasma/README.md @@ -0,0 +1,130 @@ +# Sample: OpenGL Interop Plasma (Python) + +## Description + +A CUDA kernel writes pixel colors directly into an OpenGL Pixel Buffer +Object (PBO) with zero copies through the CPU. The PBO is then blitted +into a texture and drawn on a fullscreen quad, producing an animated +"plasma" effect (layered sine waves). + +Without CUDA / OpenGL interop, moving GPU-computed pixels onto the screen +would require: + +``` +CUDA -> CPU memory -> OpenGL (two slow copies across the PCIe bus) +``` + +Using `cuda.core.GraphicsResource.from_gl_buffer()` eliminates the +CPU round-trip: the PBO stays on the GPU the entire time, and CUDA and +OpenGL take turns accessing the same buffer. + +Each frame: + +1. `resource.map(stream=...)` gives CUDA a device pointer into the PBO. +2. A CUDA kernel writes RGBA pixels into that pointer. +3. The context manager `unmap()`s the resource on exit; OpenGL now owns + the PBO again. +4. `glTexSubImage2D` copies the PBO into a texture (GPU-to-GPU, fast). +5. OpenGL draws the texture on a fullscreen quad. + +## What You'll Learn + +- Registering an OpenGL PBO with CUDA via `GraphicsResource.from_gl_buffer()` +- Mapping/unmapping a graphics resource with a context manager +- Launching a CUDA kernel that writes directly into GPU-side OpenGL memory +- Blitting a PBO into a GL texture without a CPU round-trip +- Running an interactive real-time visualization from Python + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Pythonic access to CUDA runtime, programs, and graphics interop +- `pyglet` (>=2.0) - windowing and OpenGL bindings +- `numpy` - kernel argument construction + +## Key APIs + +### From `cuda.core` + +- `GraphicsResource.from_gl_buffer(gl_buffer_id, flags="write_discard")` - register an OpenGL buffer with CUDA +- `GraphicsResource.map(stream=...)` - context manager yielding a `Buffer` that CUDA can write to +- `Program`, `ProgramOptions`, `LaunchConfig`, `launch` - standard cuda.core compile/launch flow + +### From pyglet + +- `pyglet.window.Window` - open a GL context +- `pyglet.graphics.shader.Shader` / `ShaderProgram` - build the passthrough shader used to draw the texture + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher +- A display (X11 on Linux, native window server on macOS/Windows). Headless + Linux environments (no `$DISPLAY`) will waive the sample. + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `numpy` (>=2.3.2) +- `pyglet` (>=2.0) + +## Installation + +Install the required packages from `requirements.txt`: + +```bash +pip install -r requirements.txt +``` + +## How to Run + +### Default (bounded run, exits after N frames): + +```bash +python glInteropPlasma.py # 60 frames, then exits +python glInteropPlasma.py --frames 300 # 300 frames +``` + +### Interactive (window stays open until closed): + +```bash +python glInteropPlasma.py --interactive +``` + +### Choose a specific GPU: + +```bash +python glInteropPlasma.py --device 1 +``` + +## Expected Output + +A window titled *GraphicsResource Example - CUDA Plasma* opens and shows +smoothly animated, colorful swirling patterns. The window title updates +every second with the current FPS. In non-interactive mode the window +closes automatically after `--frames` frames: + +``` +Rendered 60 frames via CUDA/OpenGL interop. Done +``` + +On a headless Linux runner the sample self-waives with: + +``` +No DISPLAY available; waiving GL interop sample. +``` + +## Files + +- `glInteropPlasma.py` - Python implementation using `cuda.core.GraphicsResource` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` GraphicsResource API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#module-cuda.core) +- [pyglet Documentation](https://pyglet.readthedocs.io/en/latest/) diff --git a/cuda_core/examples/gl_interop_plasma.py b/samples/glInteropPlasma/glInteropPlasma.py similarity index 57% rename from cuda_core/examples/gl_interop_plasma.py rename to samples/glInteropPlasma/glInteropPlasma.py index d303abdc253..7d447ceebe8 100644 --- a/cuda_core/examples/gl_interop_plasma.py +++ b/samples/glInteropPlasma/glInteropPlasma.py @@ -1,97 +1,106 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# SPDX-License-Identifier: Apache-2.0 - -# ################################################################################ -# -# This example demonstrates cuda.core.GraphicsResource for CUDA/OpenGL -# interop: a CUDA kernel writes pixels directly into an OpenGL PBO with -# zero copies through the CPU. Requires pyglet. -# -# ################################################################################ - -# What this example teaches -# ========================= -# How to use cuda.core.GraphicsResource to let a CUDA kernel write pixels -# directly into an OpenGL buffer with zero copies through the CPU. -# -# How it works -# ============ -# Normally, getting CUDA results onto the screen would require: -# CUDA -> CPU memory -> OpenGL (two slow copies across the PCIe bus) -# -# GraphicsResource eliminates the CPU round-trip. The pixel data stays -# on the GPU the entire time: -# -# 1. OpenGL allocates a PBO (Pixel Buffer Object) -- a raw GPU buffer. -# 2. GraphicsResource.from_gl_buffer() registers that PBO with CUDA. -# Now both CUDA and OpenGL have access to the same GPU memory. -# -# +----------------------+ +---------------------+ -# | OpenGL PBO | | GraphicsResource | -# | (pixel buffer on GPU)| <---> | (CUDA handle to | -# +----------------------+ | the same memory) | -# +---------------------+ -# -# EACH FRAME (all on GPU -- nothing touches the CPU or PCIe bus) -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# 1. map() -- CUDA gets a device pointer into the PBO -# 2. launch kernel -- CUDA writes pixel colors into that memory -# 3. unmap() -- ownership returns to OpenGL -# 4. glTexSubImage2D -- OpenGL copies PBO into a texture (GPU-to-GPU) -# 5. draw -- OpenGL renders the texture to the window -# -# Why is there a copy in step 4? OpenGL can only render from a -# texture object, not from a raw buffer. The glTexSubImage2D step -# copies the PBO bytes into a texture, but this happens entirely on -# the GPU and it is very fast. The big win from GraphicsResource is -# that we never copy pixels from the CPU to the GPU and then back. -# -# What you should see -# =================== -# A window showing smoothly animated, colorful swirling patterns (a plasma -# effect popular in the demoscene). The window title shows the current FPS. -# Close the window or press Escape to exit. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings", "cuda_core>0.6.0", "pyglet"] +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2", "pyglet>=2.0"] # /// +""" +CUDA / OpenGL interop with cuda.core.GraphicsResource + +A CUDA kernel writes pixel colors directly into an OpenGL Pixel Buffer Object +(PBO) with zero copies through the CPU. The PBO is then blitted into a +texture and drawn to the window. + +The classic way to display CUDA output would be: + CUDA -> CPU memory -> OpenGL (two slow copies across the PCIe bus) + +``GraphicsResource.from_gl_buffer()`` eliminates the CPU round-trip. The +pixel data stays on the GPU the entire time: + + 1. OpenGL allocates a PBO -- a raw GPU buffer. + 2. ``GraphicsResource.from_gl_buffer()`` registers that PBO with CUDA; + now both CUDA and OpenGL have access to the same GPU memory. + 3. Each frame we ``map()`` the resource (CUDA gets a device pointer into + the PBO), launch the kernel, and let the context manager ``unmap()`` + the resource so OpenGL can render it. + 4. ``glTexSubImage2D`` copies the PBO into a texture (a fast, GPU-to-GPU + step) and OpenGL draws the texture on a fullscreen quad. + +The animation is a "plasma" effect: layered sine waves that produce +swirling colors. Close the window (or press Escape) to exit. + +By default this sample runs for a bounded number of frames so it is +CI-friendly; pass ``--interactive`` to run until the window is closed. +Headless environments (no ``DISPLAY``) waive the sample with exit code 2. +""" + +import argparse import ctypes +import os +import platform import sys import time -import numpy as np +try: + import numpy as np + + from cuda.core import ( + Device, + GraphicsResource, + LaunchConfig, + Program, + ProgramOptions, + launch, + ) +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) -from cuda.core import ( - Device, - GraphicsResource, - LaunchConfig, - Program, - ProgramOptions, - launch, -) # --------------------------------------------------------------------------- # Window dimensions (feel free to change these) # --------------------------------------------------------------------------- WIDTH = 800 HEIGHT = 600 +EXIT_WAIVED = 2 # ============================= Helper functions ============================= -# -# The functions below set up CUDA and OpenGL. If you're here to learn about +# The functions below set up CUDA and OpenGL. If you're here to learn about # GraphicsResource, you can skip straight to main() -- the interesting part -# is there. These helpers exist so that main() reads like a short story -# instead of a wall of boilerplate. +# is there. # ============================================================================ -def setup_cuda(kernel_source): +def setup_cuda(kernel_source, device_id=0): """Compile the CUDA kernel and return (device, stream, kernel, launch_config).""" - dev = Device(0) + dev = Device(device_id) dev.set_current() stream = dev.create_stream() @@ -112,7 +121,7 @@ def setup_cuda(kernel_source): def create_window(): - """Open a pyglet window and return (window, gl_module).""" + """Open a pyglet window and return (window, gl_module, pyglet).""" try: import pyglet from pyglet.gl import gl as _gl @@ -135,25 +144,21 @@ def create_window(): def create_display_resources(gl, width, height): """Create the GL objects needed to show a texture on screen. - This sets up a shader program, a fullscreen quad, and an - empty texture. None of this is CUDA-specific as it's standard - OpenGL boilerplate for rendering a textured quad to the - screen. + Standard OpenGL boilerplate: a passthrough shader program, a fullscreen + quad, and an empty texture. Nothing CUDA-specific. - Returns (shader_program, vertex_array_id, texture_id). - The shader_program is a pyglet ShaderProgram object (must be kept alive). + Returns (shader_program, vao_id, texture_id). """ from pyglet.graphics.shader import Shader, ShaderProgram - # Shader program -- just passes texture coordinates through vert = Shader(VERTEX_SHADER_SOURCE, "vertex") frag = Shader(FRAGMENT_SHADER_SOURCE, "fragment") shader_prog = ShaderProgram(vert, frag) - # Fullscreen quad (two triangles covering the entire window) + # Fullscreen quad (two triangles covering the entire window). quad_verts = np.array( [ - # x, y, s, t (position + texture coordinate) + # x, y, s, t (position + texture coordinate) -1, -1, 0, @@ -207,7 +212,6 @@ def create_display_resources(gl, width, height): gl.glBindVertexArray(0) - # Empty texture (will be filled each frame from the PBO) tex = ctypes.c_uint(0) gl.glGenTextures(1, ctypes.byref(tex)) gl.glBindTexture(gl.GL_TEXTURE_2D, tex.value) @@ -231,8 +235,8 @@ def create_display_resources(gl, width, height): def create_pixel_buffer(gl, width, height): """Create a Pixel Buffer Object (PBO) -- the bridge between CUDA and OpenGL. - A PBO is a GPU-side buffer that OpenGL can read from when uploading pixels - to a texture. By registering this same buffer with CUDA, the CUDA kernel can + A PBO is GPU-side memory that OpenGL can read from when uploading pixels + to a texture. Registering this same buffer with CUDA lets the kernel write directly into it. Returns (pbo_gl_name, size_in_bytes). @@ -278,67 +282,91 @@ def draw_fullscreen_quad(gl, shader_prog, vao_id, tex_id): def main(): + parser = argparse.ArgumentParser(description="CUDA/OpenGL interop plasma demo") + parser.add_argument( + "--frames", + type=int, + default=60, + help="Number of frames to render before exiting (default: 60). Ignored in --interactive mode.", + ) + parser.add_argument( + "--interactive", + action="store_true", + help="Run until the window is closed instead of stopping after --frames", + ) + parser.add_argument("--device", type=int, default=0, help="CUDA device id") + args = parser.parse_args() + + # Waive the sample when there is no display available. On Linux we look + # at $DISPLAY; on other platforms we just try and let pyglet fail below + # if it cannot open a window. + if platform.system() == "Linux" and not os.environ.get("DISPLAY"): + print("No DISPLAY available; waiving GL interop sample.", file=sys.stderr) + sys.exit(EXIT_WAIVED) + # --- Step 1: Set up CUDA (compile kernel, create stream) --- - dev, stream, kernel, config = setup_cuda(PLASMA_KERNEL_SOURCE) + _dev, stream, kernel, config = setup_cuda(PLASMA_KERNEL_SOURCE, device_id=args.device) # --- Step 2: Open a window --- - window, gl, pyglet = create_window() + try: + window, gl, pyglet = create_window() + except Exception as e: + print(f"Could not open a pyglet window ({e}); waiving GL interop sample.", file=sys.stderr) + sys.exit(EXIT_WAIVED) # --- Step 3: Create GL resources for drawing a texture to screen --- - # (This is standard OpenGL boilerplate -- not CUDA-specific.) shader_prog, quad_vao, tex_id = create_display_resources(gl, WIDTH, HEIGHT) # --- Step 4: Create the Pixel Buffer Object (PBO) --- - # A PBO is GPU memory owned by OpenGL. It's the bridge between the - # two worlds: CUDA will write into it, and OpenGL will read from it. - pbo_id, nbytes = create_pixel_buffer(gl, WIDTH, HEIGHT) + # A PBO is GPU memory owned by OpenGL. It bridges the two worlds: + # CUDA will write into it, and OpenGL will read from it. + pbo_id, _ = create_pixel_buffer(gl, WIDTH, HEIGHT) # --- Step 5: Register the PBO with CUDA --- - # THIS IS THE KEY LINE. GraphicsResource.from_gl_buffer() tells the - # CUDA driver "I want to access this OpenGL buffer from CUDA kernels." - # WRITE_DISCARD means CUDA will overwrite the entire buffer each frame. + # KEY LINE. GraphicsResource.from_gl_buffer() tells the CUDA driver + # "I want to access this OpenGL buffer from CUDA kernels." WRITE_DISCARD + # means CUDA will overwrite the entire buffer each frame. resource = GraphicsResource.from_gl_buffer(pbo_id, flags="write_discard") # --- Step 6: Render loop --- start_time = time.monotonic() frame_count = 0 fps_time = start_time + frames_rendered = 0 @window.event def on_draw(): - nonlocal frame_count, fps_time + nonlocal frame_count, fps_time, frames_rendered window.clear() t = time.monotonic() - start_time - # (a) Map the PBO so CUDA can write to it. - # This gives us a Buffer whose .handle is a CUDA device pointer - # pointing directly into the OpenGL PBO's GPU memory. + # (a) Map the PBO so CUDA can write to it. This gives us a Buffer + # whose .handle is a CUDA device pointer pointing directly into + # the OpenGL PBO's GPU memory. with resource.map(stream=stream) as buf: # (b) Launch the plasma kernel -- it writes RGBA pixels into buf. launch( stream, config, kernel, - buf.handle, # pointer to PBO memory (on GPU) + buf.handle, np.int32(WIDTH), np.int32(HEIGHT), - np.float32(t), # animation time + np.float32(t), ) # (c) Unmap happens automatically when the `with` block exits. - # The PBO now belongs to OpenGL again. No stream.sync() is - # needed here -- cuGraphicsUnmapResources guarantees that all - # CUDA work on the stream completes before OpenGL can use the - # buffer. + # cuGraphicsUnmapResources guarantees CUDA work on the stream + # completes before OpenGL can use the buffer. - # (d) Tell OpenGL to copy the PBO contents into our texture (GPU-to-GPU). + # (d) Copy PBO -> texture (GPU-to-GPU). copy_pbo_to_texture(gl, pbo_id, tex_id, WIDTH, HEIGHT) # (e) Draw the texture to the screen. draw_fullscreen_quad(gl, shader_prog, quad_vao, tex_id) - # FPS counter (shown in window title) frame_count += 1 + frames_rendered += 1 now = time.monotonic() if now - fps_time >= 1.0: fps = frame_count / (now - fps_time) @@ -350,26 +378,26 @@ def on_draw(): frame_count = 0 fps_time = now + # Terminate after --frames iterations when not interactive. + if not args.interactive and frames_rendered >= args.frames: + window.close() + @window.event def on_close(): resource.close() pyglet.app.run(interval=0) + print(f"\nRendered {frames_rendered} frames via CUDA/OpenGL interop. Done") + return 0 # ======================== GPU code (CUDA + GLSL) ============================ +# PLASMA_KERNEL_SOURCE is CUDA C++ that runs on the GPU. It computes a color +# for each pixel based on layered sine waves (the "plasma" effect) and writes +# RGBA bytes into the output buffer. # -# These source strings are kept at the bottom of the file so they don't -# distract from the Python logic above. The important thing to know: -# -# - PLASMA_KERNEL_SOURCE is CUDA C++ that runs on the GPU. It computes a -# color for each pixel based on layered sine waves (the "plasma" effect) -# and writes RGBA bytes into the output buffer. -# -# - VERTEX_SHADER_SOURCE / FRAGMENT_SHADER_SOURCE are GLSL (OpenGL's shader -# language). They simply draw a texture onto a rectangle that covers the -# entire window. Nothing interesting happens here. -# +# VERTEX_SHADER_SOURCE / FRAGMENT_SHADER_SOURCE are GLSL. They draw a texture +# onto a rectangle that covers the entire window. # ============================================================================ PLASMA_KERNEL_SOURCE = r""" @@ -401,14 +429,11 @@ def on_close(): float cy2 = v - 0.5f + 0.3f * cosf(t * 0.4f); val += sinf(sqrtf(cx2*cx2 + cy2*cy2) * 15.0f + t * 1.5f); - // val now ranges roughly from -5 to +5. Normalize to [0, 1]. + // val now ranges roughly from -5 to +5. Normalize to [0, 1]. val = (val + 5.0f) / 10.0f; // --- Convert to RGB --- // Three sine waves offset by 120 degrees (2*PI/3) give smooth color cycling. - // 2*PI = 6.2831853 - // 2*PI / 3 = 2.094 (120 degree offset for green) - // 4*PI / 3 = 4.189 (240 degree offset for blue) float r = sinf(val * 6.2831853f) * 0.5f + 0.5f; float g = sinf(val * 6.2831853f + 2.094f) * 0.5f + 0.5f; float b = sinf(val * 6.2831853f + 4.189f) * 0.5f + 0.5f; @@ -422,9 +447,6 @@ def on_close(): } """ -# GLSL shaders -- these just display a texture on a fullscreen rectangle. -# Nothing CUDA-specific here. - VERTEX_SHADER_SOURCE = """#version 330 core in vec2 position; in vec2 texcoord; @@ -446,4 +468,4 @@ def on_close(): if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/samples/glInteropPlasma/requirements.txt b/samples/glInteropPlasma/requirements.txt new file mode 100644 index 00000000000..d280c6a4258 --- /dev/null +++ b/samples/glInteropPlasma/requirements.txt @@ -0,0 +1,7 @@ +# glInteropPlasma Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 +pyglet>=2.0 diff --git a/samples/simpleMultiGpu/README.md b/samples/simpleMultiGpu/README.md new file mode 100644 index 00000000000..f88110f68e0 --- /dev/null +++ b/samples/simpleMultiGpu/README.md @@ -0,0 +1,102 @@ +# Sample: Simple Multi-GPU (Python) + +## Description + +Compile and launch two different kernels on two GPUs concurrently using +`cuda.core`. Each GPU has its own `Program`, `Stream`, and CuPy-allocated +buffers. There is no peer-to-peer access, no MPI, and no host-side +communication between the two GPUs beyond starting and waiting for them. + +- GPU 0 computes `c = a + b` (float32). +- GPU 1 computes `z = x - y` (float32). + +The sample also demonstrates the **`StreamAdaptor`** idiom for bridging a +foreign stream (CuPy's current stream) into `cuda.core`. That lets us make +our `cuda.core` stream wait on the stream that CuPy used to initialize the +input buffers, so the kernels see fully-materialized data. + +## What You'll Learn + +- Managing multiple `Device` contexts in the same Python process +- Compiling one `Program` per device +- Building an ad-hoc `StreamAdaptor` that implements `__cuda_stream__` to + bridge CuPy's current stream into `cuda.core` +- Ordering `cuda.core` work against a foreign stream via `Stream.wait()` +- Running independent kernel launches concurrently on two GPUs + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - Pythonic access to CUDA runtime, programs, and streams +- `cupy` - GPU array library used for buffer allocation and result verification + +## Key APIs + +### From `cuda.core` + +- `system.get_num_devices()` - count of visible CUDA devices +- `Device(device_id)` / `Device.set_current()` - select and activate a device +- `Device.create_stream()` - create a `cuda.core` stream on the current device +- `Device.create_stream(adaptor)` - wrap a foreign stream via the `__cuda_stream__` protocol +- `Stream.wait(other_stream)` - order this stream after another stream +- `Program`, `ProgramOptions`, `LaunchConfig`, `launch` - standard compile / launch flow + +### From CuPy + +- `cp.cuda.get_current_stream()` - the CuPy stream that owns recent allocations +- `cp.random.default_rng().random(...)` - GPU random buffers on the current device + +## Requirements + +### Hardware + +- **At least 2 CUDA-capable devices** in the system. The sample waives + itself (exit code 2) when only one GPU is visible. +- Compute Capability 7.0 or higher on both devices. + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python simpleMultiGpu.py +``` + +The sample has no CLI arguments; it always uses device 0 and device 1. + +## Expected Output + +``` +GPU 0: vector_add on 50000 elements verified +GPU 1: vector_sub on 50000 elements verified +Done +``` + +On single-GPU systems the sample waives: + +``` +This sample requires at least 2 CUDA-capable devices (found 1). Waiving. +``` + +## Files + +- `simpleMultiGpu.py` - Python implementation using `cuda.core` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` API](https://nvidia.github.io/cuda-python/cuda-core/latest/) +- [CuPy Documentation](https://docs.cupy.dev/) diff --git a/samples/simpleMultiGpu/requirements.txt b/samples/simpleMultiGpu/requirements.txt new file mode 100644 index 00000000000..b7f6c1cb39e --- /dev/null +++ b/samples/simpleMultiGpu/requirements.txt @@ -0,0 +1,6 @@ +# simpleMultiGpu Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 diff --git a/samples/simpleMultiGpu/simpleMultiGpu.py b/samples/simpleMultiGpu/simpleMultiGpu.py new file mode 100644 index 00000000000..697cf7956f0 --- /dev/null +++ b/samples/simpleMultiGpu/simpleMultiGpu.py @@ -0,0 +1,198 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0"] +# /// + +""" +Independent Multi-GPU launches with cuda.core + +Compile and launch different kernels on two GPUs concurrently, each running +against its own CuPy-allocated buffers and its own ``cuda.core.Stream``. + +The sample does not use MPI, peer-to-peer, or any inter-GPU +communication. It just shows the plain "same host process, two independent +GPUs" pattern: + + * GPU 0 computes ``c = a + b`` (float32). + * GPU 1 computes ``z = x - y`` (float32). + +Each GPU has its own ``Program``, ``Stream``, and CuPy buffers. The sample +also demonstrates the ``StreamAdaptor`` idiom for bridging a foreign stream +(CuPy's current stream) into ``cuda.core`` so that memory initialized by +CuPy is ordered before the kernel launch on our ``cuda.core`` stream. + +Waives with exit code 2 when fewer than 2 CUDA-capable devices are +available. +""" + +import sys + +try: + import cupy as cp + + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch, system +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +EXIT_WAIVED = 2 + +DTYPE = cp.float32 +SIZE = 50000 + + +# Bridge foreign streams (e.g. CuPy) that do not yet implement +# __cuda_stream__ into cuda.core. CuPy streams expose a ``.ptr`` attribute +# holding the raw CUstream handle. +class StreamAdaptor: + def __init__(self, obj): + self.obj = obj + + def __cuda_stream__(self): + return (0, self.obj.ptr) + + +ADD_KERNEL = """ +extern "C" +__global__ void vector_add(const float* A, + const float* B, + float* C, + size_t N) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { + C[i] = A[i] + B[i]; + } +} +""" + +SUB_KERNEL = """ +extern "C" +__global__ void vector_sub(const float* A, + const float* B, + float* C, + size_t N) { + const unsigned int tid = threadIdx.x + blockIdx.x * blockDim.x; + for (size_t i = tid; i < N; i += gridDim.x * blockDim.x) { + C[i] = A[i] - B[i]; + } +} +""" + + +def _compile(device, source): + prog = Program( + source, + code_type="c++", + options=ProgramOptions(std="c++17", arch=f"sm_{device.arch}"), + ) + return prog.compile("cubin") + + +def main(): + num_devices = system.get_num_devices() + if num_devices < 2: + print( + f"This sample requires at least 2 CUDA-capable devices (found {num_devices}). Waiving.", + file=sys.stderr, + ) + sys.exit(EXIT_WAIVED) + + dev0 = Device(0) + dev0.set_current() + stream0 = dev0.create_stream() + stream1 = None + cp_stream0 = None + cp_stream1 = None + + try: + # ---- GPU 0: compile the add kernel ---- + add_kernel = _compile(dev0, ADD_KERNEL).get_kernel("vector_add") + + # ---- GPU 1: switch context and compile the subtract kernel ---- + dev1 = Device(1) + dev1.set_current() + stream1 = dev1.create_stream() + sub_kernel = _compile(dev1, SUB_KERNEL).get_kernel("vector_sub") + + # One launch config per GPU; both grids target the same problem size. + block = 256 + grid = (SIZE + block - 1) // block + config = LaunchConfig(grid=grid, block=block) + + # ---- Allocate on GPU 0 (uses CuPy's current stream on GPU 0) ---- + dev0.set_current() + rng = cp.random.default_rng() + a = rng.random(SIZE, dtype=DTYPE) + b = rng.random(SIZE, dtype=DTYPE) + c = cp.empty_like(a) + # Wrap CuPy's current stream as a cuda.core Stream so we can wait on + # it: this guarantees the random initialization completes before our + # kernel touches these buffers on stream0. + cp_stream0 = dev0.create_stream(StreamAdaptor(cp.cuda.get_current_stream())) + stream0.wait(cp_stream0) + + launch(stream0, config, add_kernel, a.data.ptr, b.data.ptr, c.data.ptr, cp.uint64(SIZE)) + + # ---- Allocate on GPU 1 (uses CuPy's current stream on GPU 1) ---- + dev1.set_current() + rng = cp.random.default_rng() + x = rng.random(SIZE, dtype=DTYPE) + y = rng.random(SIZE, dtype=DTYPE) + z = cp.empty_like(x) + cp_stream1 = dev1.create_stream(StreamAdaptor(cp.cuda.get_current_stream())) + stream1.wait(cp_stream1) + + launch(stream1, config, sub_kernel, x.data.ptr, y.data.ptr, z.data.ptr, cp.uint64(SIZE)) + + # ---- Synchronize both GPUs and verify ---- + dev0.set_current() + stream0.sync() + assert cp.allclose(c, a + b), "GPU 0 vector_add produced incorrect results" + dev1.set_current() + stream1.sync() + assert cp.allclose(z, x - y), "GPU 1 vector_sub produced incorrect results" + + print(f"GPU 0: vector_add on {SIZE} elements verified") + print(f"GPU 1: vector_sub on {SIZE} elements verified") + print("Done") + return 0 + finally: + if cp_stream1 is not None: + cp_stream1.close() + if cp_stream0 is not None: + cp_stream0.close() + if stream1 is not None: + stream1.close() + stream0.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/stridedMemoryViewConstructors/README.md b/samples/stridedMemoryViewConstructors/README.md new file mode 100644 index 00000000000..f2d298721c7 --- /dev/null +++ b/samples/stridedMemoryViewConstructors/README.md @@ -0,0 +1,112 @@ +# Sample: StridedMemoryView Constructors (Python) + +## Description + +`cuda.core.utils.StridedMemoryView` is the type a library uses when it +wants to accept "any array-like object" and describe its memory layout +without dictating whether the caller uses NumPy, CuPy, PyTorch, DLPack, or a +raw `cuda.core.Buffer`. + +This sample walks through the four explicit `from_*` constructors and +verifies each round-trips its input via DLPack: + +1. `from_array_interface(host_numpy_array)` — NumPy's `__array_interface__` +2. `from_dlpack(any_array, stream_ptr=...)` — the DLPack protocol (host or device) +3. `from_cuda_array_interface(gpu_array, stream_ptr=...)` — `__cuda_array_interface__` +4. `from_buffer(buf, shape=..., strides=..., dtype=...)` — a raw + `cuda.core.Buffer` plus explicit layout metadata + +Companion samples show how a library actually *consumes* these views: +[`stridedMemoryViewCpu/`](../stridedMemoryViewCpu/) dispatches to a +JIT-compiled CPU function via `cffi`, and +[`stridedMemoryViewGpu/`](../stridedMemoryViewGpu/) dispatches to an NVRTC +kernel. + +## What You'll Learn + +- Constructing a `StridedMemoryView` from each of the four supported inputs +- Inspecting a view's `shape`, `dtype`, `size`, and `is_device_accessible` +- Building your own explicit layout (`shape`/`strides`/`dtype`) for a raw + `Buffer` +- Round-tripping a view via DLPack back to NumPy or CuPy + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - `Device`, `Buffer`, `StridedMemoryView` +- `numpy` (>=2.1) - host arrays and DLPack round-trip +- `cupy` - GPU arrays and DLPack / CAI round-trip + +## Key APIs + +### From `cuda.core.utils` + +- `StridedMemoryView.from_array_interface(obj)` +- `StridedMemoryView.from_dlpack(obj, stream_ptr=-1)` (host) or `stream_ptr=stream.handle` (device) +- `StridedMemoryView.from_cuda_array_interface(obj, stream_ptr=stream.handle)` +- `StridedMemoryView.from_buffer(buf, shape=..., strides=..., dtype=...)` + +### From `cuda.core` + +- `Device.memory_resource.allocate(nbytes, stream=...)` - obtain a `Buffer` for the `from_buffer` demo + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 5.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=2.1) — the DLPack round-trip requires NumPy 2.1+ + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python stridedMemoryViewConstructors.py +``` + +## Expected Output + +``` +[1] from_array_interface(host_numpy_array) + host_view: shape=(3, 4), dtype=int16, size=12 (host-only) + +[2] from_dlpack(host_array, stream_ptr=-1) + host_dlpack_view: shape=(3, 4), dtype=int16, size=12 (host-only) + +[3] from_dlpack(gpu_array) and from_cuda_array_interface(gpu_array) + dlpack_view (gpu): shape=(3, 4), dtype=float32, size=12 (device-accessible) + cai_view (gpu): shape=(3, 4), dtype=float32, size=12 (device-accessible) + +[4] from_buffer(buf, shape=..., strides=..., dtype=...) + buffer_view: shape=(3, 4), dtype=float32, size=12 (device-accessible) + +Constructed StridedMemoryView from array_interface, DLPack, CAI, and Buffer inputs. +Done +``` + +## Files + +- `stridedMemoryViewConstructors.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` StridedMemoryView API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda.core.utils.StridedMemoryView) +- [DLPack Protocol](https://dmlc.github.io/dlpack/latest/) +- [`__cuda_array_interface__`](https://numba.readthedocs.io/en/stable/cuda/cuda_array_interface.html) +- [`stridedMemoryViewCpu/`](../stridedMemoryViewCpu/) - CPU-side foreign-function consumer +- [`stridedMemoryViewGpu/`](../stridedMemoryViewGpu/) - GPU-side foreign-function consumer diff --git a/samples/stridedMemoryViewConstructors/requirements.txt b/samples/stridedMemoryViewConstructors/requirements.txt new file mode 100644 index 00000000000..fd1415a58ba --- /dev/null +++ b/samples/stridedMemoryViewConstructors/requirements.txt @@ -0,0 +1,7 @@ +# stridedMemoryViewConstructors Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.1 diff --git a/samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py b/samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py new file mode 100644 index 00000000000..24b45bc56ec --- /dev/null +++ b/samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py @@ -0,0 +1,145 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.1"] +# /// + +""" +StridedMemoryView constructors with cuda.core + +``cuda.core.utils.StridedMemoryView`` is the type a library reaches for when +it wants to accept "any array-like object" and describe its memory layout +without dictating whether the caller uses NumPy, CuPy, PyTorch, DLPack, or a +raw ``Buffer``. + +This sample exercises the four explicit ``from_*`` constructors: + + * ``from_array_interface(host_array)`` -- NumPy's ``__array_interface__`` + * ``from_dlpack(any_array, stream_ptr=...)`` -- the DLPack protocol + (works for host and device arrays) + * ``from_cuda_array_interface(gpu_array, ...)`` -- ``__cuda_array_interface__`` + * ``from_buffer(buf, shape=..., strides=..., dtype=...)`` -- raw ``cuda.core.Buffer`` + +For each, the sample constructs a view, prints its shape / dtype / +device-accessibility, and reads the underlying data back through DLPack to +verify the round-trip. +""" + +import sys + +try: + import cupy as cp + import numpy as np + + from cuda.core import Device + from cuda.core.utils import StridedMemoryView +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +def dense_c_strides(shape): + """Compute contiguous C strides for ``shape`` (in elements, not bytes).""" + if not shape: + return () + strides = [1] * len(shape) + for index in range(len(shape) - 2, -1, -1): + strides[index] = strides[index + 1] * shape[index + 1] + return tuple(strides) + + +def _describe(name, view): + kind = "device-accessible" if view.is_device_accessible else "host-only" + print(f" {name}: shape={view.shape}, dtype={view.dtype}, size={view.size} ({kind})") + + +def main(): + if np.lib.NumpyVersion(np.__version__) < "2.1.0": + print("This example requires NumPy 2.1.0 or later", file=sys.stderr) + sys.exit(2) + + device = Device() + device.set_current() + stream = device.create_stream() + buffer = None + + try: + # ---- 1) __array_interface__ (host NumPy array) ---- + print("[1] from_array_interface(host_numpy_array)") + host_array = np.arange(12, dtype=np.int16).reshape(3, 4) + host_view = StridedMemoryView.from_array_interface(host_array) + _describe("host_view", host_view) + assert host_view.shape == host_array.shape + assert host_view.size == host_array.size + assert not host_view.is_device_accessible + assert np.array_equal(np.from_dlpack(host_view), host_array) + + # ---- 2) DLPack (host_array) ---- + print("\n[2] from_dlpack(host_array, stream_ptr=-1)") + host_dlpack_view = StridedMemoryView.from_dlpack(host_array, stream_ptr=-1) + _describe("host_dlpack_view", host_dlpack_view) + assert np.array_equal(np.from_dlpack(host_dlpack_view), host_array) + + # ---- 3) DLPack (GPU) and __cuda_array_interface__ (GPU) ---- + print("\n[3] from_dlpack(gpu_array) and from_cuda_array_interface(gpu_array)") + gpu_array = cp.arange(12, dtype=cp.float32).reshape(3, 4) + dlpack_view = StridedMemoryView.from_dlpack(gpu_array, stream_ptr=stream.handle) + cai_view = StridedMemoryView.from_cuda_array_interface(gpu_array, stream_ptr=stream.handle) + _describe("dlpack_view (gpu)", dlpack_view) + _describe("cai_view (gpu)", cai_view) + cp.testing.assert_array_equal(cp.from_dlpack(dlpack_view), gpu_array) + cp.testing.assert_array_equal(cp.from_dlpack(cai_view), gpu_array) + + # ---- 4) from_buffer (raw cuda.core.Buffer) ---- + print("\n[4] from_buffer(buf, shape=..., strides=..., dtype=...)") + buffer = device.memory_resource.allocate(gpu_array.nbytes, stream=stream) + buffer_array = cp.from_dlpack(buffer).view(dtype=cp.float32).reshape(gpu_array.shape) + buffer_array[...] = gpu_array + device.sync() + + buffer_view = StridedMemoryView.from_buffer( + buffer, + shape=gpu_array.shape, + strides=dense_c_strides(gpu_array.shape), + dtype=np.dtype(np.float32), + ) + _describe("buffer_view", buffer_view) + cp.testing.assert_array_equal(cp.from_dlpack(buffer_view), gpu_array) + + print("\nConstructed StridedMemoryView from array_interface, DLPack, CAI, and Buffer inputs.") + print("Done") + return 0 + finally: + if buffer is not None: + buffer.close(stream) + stream.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/stridedMemoryViewCpu/README.md b/samples/stridedMemoryViewCpu/README.md new file mode 100644 index 00000000000..80277b3e078 --- /dev/null +++ b/samples/stridedMemoryViewCpu/README.md @@ -0,0 +1,108 @@ +# Sample: StridedMemoryView + Foreign CPU Function (Python) + +## Description + +Model a library that accepts "any array-like object" and dispatches to a +JIT-compiled **CPU** implementation. `cuda.core.utils.StridedMemoryView` ++ the `@args_viewable_as_strided_memory` decorator hide the caller's array +protocol from the library, so the library only needs to know: + +- how many elements are in the array (`view.shape`) +- what type they are (`view.dtype`) +- whether they are on the host or the device (`view.is_device_accessible`) +- and a raw pointer to the data (`view.ptr`) + +The sample compiles a small C function + +```c +void inplace_plus_arange_N(int* data, size_t N); // data[i] += i +``` + +via `cffi` at runtime, wraps it in a decorated Python function, and calls +it against a NumPy array. Result verified against +`np.arange(1024, dtype=np.int32)`. + +The GPU counterpart lives in +[`../stridedMemoryViewGpu/`](../stridedMemoryViewGpu/); the constructor +tour lives in +[`../stridedMemoryViewConstructors/`](../stridedMemoryViewConstructors/). + +## What You'll Learn + +- Building a library entry point with `@args_viewable_as_strided_memory((0,))` +- Reading `view.ptr`, `view.shape`, `view.dtype`, + `view.is_device_accessible` inside the library +- JIT-compiling a small C function with `cffi` and calling it through the + view's raw pointer + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - `StridedMemoryView`, `args_viewable_as_strided_memory` +- `cffi` - JIT-compile the C function +- `numpy` - test array and reference computation + +## Key APIs + +### From `cuda.core.utils` + +- `StridedMemoryView` - describes the layout of an array-like object +- `@args_viewable_as_strided_memory((argument_index,))` - decorator that + materializes the annotated arguments as `StridedMemoryView` instances + inside the wrapped function + +### From `cffi` + +- `FFI()`, `FFI.cdef()`, `FFI.set_source()`, `FFI.compile(tmpdir=...)` - JIT-compile a shared library +- `FFI.cast("int*", ptr)` - reinterpret an integer pointer as a typed C pointer + +## Requirements + +### Hardware + +- CPU only. No GPU work is performed on the array itself; a valid CUDA + install is only needed because `cuda.core` is imported. + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `numpy` (>=2.3.2) +- `cffi` +- `setuptools` (needed by `cffi` for the JIT build step) +- A working C++ compiler on `PATH` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python stridedMemoryViewCpu.py +``` + +## Expected Output + +``` +before: arr_cpu[:10]=array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32) +after: arr_cpu[:10]=array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32) +Done +``` + +## Files + +- `stridedMemoryViewCpu.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` StridedMemoryView API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda.core.utils.StridedMemoryView) +- [`stridedMemoryViewConstructors/`](../stridedMemoryViewConstructors/) - the four `from_*` constructors +- [`stridedMemoryViewGpu/`](../stridedMemoryViewGpu/) - GPU counterpart using NVRTC +- [`cffi` documentation](https://cffi.readthedocs.io/) diff --git a/samples/stridedMemoryViewCpu/requirements.txt b/samples/stridedMemoryViewCpu/requirements.txt new file mode 100644 index 00000000000..045e4404961 --- /dev/null +++ b/samples/stridedMemoryViewCpu/requirements.txt @@ -0,0 +1,8 @@ +# stridedMemoryViewCpu Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 +cffi +setuptools diff --git a/samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py b/samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py new file mode 100644 index 00000000000..1f83365361b --- /dev/null +++ b/samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py @@ -0,0 +1,155 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2", "cffi", "setuptools"] +# /// + +""" +StridedMemoryView + foreign CPU function via cffi + +This sample models a library that accepts "any array-like object" and +dispatches to a JIT-compiled CPU implementation. The library exposes a +single decorator, ``@args_viewable_as_strided_memory``, which turns the +selected function arguments into ``StridedMemoryView`` instances at call +time -- regardless of whether the caller passed a NumPy array, a CuPy +array, a DLPack capsule, or a raw ``Buffer``. + +The C-side operation: + + void inplace_plus_arange_N(int* data, size_t N); + +adds ``i`` to ``data[i]`` for each ``i`` in ``[0, N)``. It is compiled to a +native shared library via ``cffi`` at runtime, then invoked from Python +through the pointer that ``StridedMemoryView`` provides. + +Together with `stridedMemoryViewGpu/` this is the "practical" side of the +StridedMemoryView story: the library never needs to know which array +protocol its caller uses. +""" + +import importlib +import string +import sys +import tempfile +from contextlib import contextmanager + +try: + import numpy as np + from cffi import FFI + + from cuda.core.utils import StridedMemoryView, args_viewable_as_strided_memory +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# --------------------------------------------------------------------------- +# The C function we JIT compile. In a real library this lives in a compiled +# extension module and is imported at run time; here we build it in a temp +# directory to keep the sample self-contained. +# --------------------------------------------------------------------------- +func_name = "inplace_plus_arange_N" +func_sig = f"void {func_name}(int* data, size_t N)" + + +# --------------------------------------------------------------------------- +# The library-facing entry point. +# +# ``@args_viewable_as_strided_memory((0,))`` says "take argument 0 and make +# it available as a StridedMemoryView on the callee side". Stream ordering +# is handled by the decorator so the library can safely access the memory +# on its own work stream. +# --------------------------------------------------------------------------- +@args_viewable_as_strided_memory((0,)) +def my_func(arr, cpu_prog, cpu_func): + """In-place ``arr += arange(len(arr))`` via a foreign CPU function.""" + view = arr.view(-1) # -1: no stream ordering required (host memory) + assert isinstance(view, StridedMemoryView) + assert len(view.shape) == 1 + assert view.dtype == np.int32 + assert not view.is_device_accessible + + size = view.shape[0] + # Convert the raw pointer inside the view into a cffi ``int*`` and call + # the compiled function. This is the only line that touches the pointer. + cpu_func(cpu_prog.cast("int*", view.ptr), size) + + +# --------------------------------------------------------------------------- +# JIT compilation of the C function via cffi. +# --------------------------------------------------------------------------- +def _create_cpu_program(): + cpu_code = string.Template(r""" + extern "C" + $func_sig { + for (size_t i = 0; i < N; i++) { + data[i] += i; + } + } + """).substitute(func_sig=func_sig) + cpu_prog = FFI() + cpu_prog.cdef(f"{func_sig};") + cpu_prog.set_source( + "_cpu_obj", + cpu_code, + source_extension=".cpp", + extra_compile_args=["-std=c++11"], + ) + return cpu_prog + + +@contextmanager +def _compiled_cpu_func(cpu_prog, temp_dir): + saved_sys_path = sys.path.copy() + try: + cpu_prog.compile(tmpdir=temp_dir) + sys.path.append(temp_dir) + cpu_func = getattr(importlib.import_module("_cpu_obj.lib"), func_name) + yield cpu_func + finally: + sys.path = saved_sys_path + # Ensure cffi modules are unloadable before the temp dir is removed. + sys.modules.pop("_cpu_obj.lib", None) + sys.modules.pop("_cpu_obj", None) + + +def main(): + cpu_prog = _create_cpu_program() + with tempfile.TemporaryDirectory() as temp_dir, _compiled_cpu_func(cpu_prog, temp_dir) as cpu_func: + arr_cpu = np.zeros(1024, dtype=np.int32) + print(f"before: {arr_cpu[:10]=}") + my_func(arr_cpu, cpu_prog, cpu_func) + print(f"after: {arr_cpu[:10]=}") + assert np.allclose(arr_cpu, np.arange(1024, dtype=np.int32)) + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/stridedMemoryViewGpu/README.md b/samples/stridedMemoryViewGpu/README.md new file mode 100644 index 00000000000..ddd0a08715b --- /dev/null +++ b/samples/stridedMemoryViewGpu/README.md @@ -0,0 +1,100 @@ +# Sample: StridedMemoryView + Foreign GPU Kernel (Python) + +## Description + +GPU counterpart to [`../stridedMemoryViewCpu/`](../stridedMemoryViewCpu/). +Same library-style entry point (a Python function decorated with +`@args_viewable_as_strided_memory((0,))`) but this time the wrapped +function dispatches to a **CUDA kernel** compiled at runtime with NVRTC +via `cuda.core.Program`. + +The kernel signature + +```c +__global__ void inplace_plus_arange_N(int* data, size_t N); +``` + +adds `i` to `data[i]`. Because `StridedMemoryView` carries a raw device +pointer (`view.ptr`) plus shape/dtype/device-accessibility metadata, the +library can launch the kernel without ever knowing that the caller used +CuPy (or a DLPack capsule, or a raw `Buffer`, or anything else). + +The constructor tour lives in +[`../stridedMemoryViewConstructors/`](../stridedMemoryViewConstructors/). + +## What You'll Learn + +- Building a library entry point with `@args_viewable_as_strided_memory((0,))` + that dispatches to a CUDA kernel +- Ordering a `StridedMemoryView` against a caller's data stream by passing + `view = arr.view(work_stream.handle)` +- Reading `view.ptr` inside the library and using it as the kernel's `int*` + argument via `launch(...)` +- Compiling and launching a kernel via `cuda.core.Program` / NVRTC + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - `Device`, `Program`, `LaunchConfig`, `launch`, `StridedMemoryView`, `args_viewable_as_strided_memory` +- `cupy` - GPU array used as the caller-side input +- `numpy` - scalar kernel arguments + +## Key APIs + +### From `cuda.core` + +- `Program`, `ProgramOptions`, `Program.compile("cubin")` - NVRTC compile pipeline +- `LaunchConfig`, `launch(stream, config, kernel, ...)` - kernel launch +- `Device`, `Device.create_stream()` - device context and stream management + +### From `cuda.core.utils` + +- `@args_viewable_as_strided_memory((argument_index,))` - decorator materializing arguments as `StridedMemoryView` +- `StridedMemoryView.ptr`, `.shape`, `.dtype`, `.is_device_accessible` - metadata read by the library + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 5.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer (matches `cuda-python` 13.x) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `cupy-cuda13x` (>=14.0.0) +- `numpy` (>=2.3.2) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python stridedMemoryViewGpu.py +``` + +## Expected Output + +``` +before: arr_gpu[:10]=array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32) +after: arr_gpu[:10]=array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], dtype=int32) +Done +``` + +## Files + +- `stridedMemoryViewGpu.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` StridedMemoryView API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda.core.utils.StridedMemoryView) +- [`stridedMemoryViewConstructors/`](../stridedMemoryViewConstructors/) - the four `from_*` constructors +- [`stridedMemoryViewCpu/`](../stridedMemoryViewCpu/) - CPU-side foreign-function consumer diff --git a/samples/stridedMemoryViewGpu/requirements.txt b/samples/stridedMemoryViewGpu/requirements.txt new file mode 100644 index 00000000000..6434dae5e30 --- /dev/null +++ b/samples/stridedMemoryViewGpu/requirements.txt @@ -0,0 +1,7 @@ +# stridedMemoryViewGpu Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +cupy-cuda13x>=14.0.0 +numpy>=2.3.2 diff --git a/samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py b/samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py new file mode 100644 index 00000000000..5968a45dca7 --- /dev/null +++ b/samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py @@ -0,0 +1,145 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2"] +# /// + +""" +StridedMemoryView + foreign GPU kernel via NVRTC + +The GPU-side counterpart to :file:`stridedMemoryViewCpu.py`. Same public +Python entry point (``my_func`` decorated with +``@args_viewable_as_strided_memory((0,))``), but this time the decorated +function dispatches to a CUDA kernel compiled at runtime with NVRTC. + +The C-side operation is: + + __global__ void inplace_plus_arange_N(int* data, size_t N); + +which sets ``data[i] += i`` for each ``i`` in ``[0, N)``. The decorator +lifts the caller's CuPy array into a ``StridedMemoryView`` that carries a +device pointer, a dtype, and a shape. The library never needs to know that +the caller used CuPy -- it just launches the kernel through the view's +``ptr``. + +Together with `stridedMemoryViewCpu/` this is the "practical" side of the +StridedMemoryView story: the library never needs to know which array +protocol its caller uses. +""" + +import string +import sys + +try: + import cupy as cp + import numpy as np + + from cuda.core import Device, LaunchConfig, Program, ProgramOptions, launch + from cuda.core.utils import StridedMemoryView, args_viewable_as_strided_memory +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +# --------------------------------------------------------------------------- +# The kernel that plays the role of the "foreign" library entry point. +# --------------------------------------------------------------------------- +func_name = "inplace_plus_arange_N" +func_sig = f"void {func_name}(int* data, size_t N)" + + +# --------------------------------------------------------------------------- +# The library-facing entry point. +# +# ``@args_viewable_as_strided_memory((0,))`` says "take argument 0 and make +# it available as a StridedMemoryView on the callee side". Stream ordering +# is handled by the decorator: we pass ``work_stream.handle`` so the view +# waits until the caller's data has landed before the kernel reads it. +# --------------------------------------------------------------------------- +@args_viewable_as_strided_memory((0,)) +def my_func(arr, work_stream, kernel): + """In-place ``arr += arange(len(arr))`` via a foreign GPU kernel.""" + view = arr.view(work_stream.handle if work_stream else -1) + assert isinstance(view, StridedMemoryView) + assert len(view.shape) == 1 + assert view.dtype == np.int32 + assert view.is_device_accessible + + size = view.shape[0] + block = 256 + grid = (size + block - 1) // block + config = LaunchConfig(grid=grid, block=block) + launch(work_stream, config, kernel, view.ptr, np.uint64(size)) + # Conservative: synchronize the work stream so the caller can observe + # the write immediately. If we knew the caller's data stream we could + # instead do ``data_stream.wait(work_stream)`` and avoid the host sync. + work_stream.sync() + + +def main(): + # ---- Compile the GPU function ---- + gpu_code = string.Template(r""" + extern "C" + __global__ $func_sig { + const size_t tid = threadIdx.x + blockIdx.x * blockDim.x; + const size_t stride_size = gridDim.x * blockDim.x; + for (size_t i = tid; i < N; i += stride_size) { + data[i] += i; + } + } + """).substitute(func_sig=func_sig) + + dev = Device(0) + dev.set_current() + prog = Program( + gpu_code, + code_type="c++", + options=ProgramOptions(arch=f"sm_{dev.arch}", std="c++11"), + ) + mod = prog.compile(target_type="cubin") + kernel = mod.get_kernel(func_name) + + stream = dev.create_stream() + try: + # ---- Call the library through the decorated wrapper ---- + arr_gpu = cp.ones(1024, dtype=cp.int32) + print(f"before: {arr_gpu[:10]=}") + + my_func(arr_gpu, stream, kernel) + + print(f"after: {arr_gpu[:10]=}") + assert cp.allclose(arr_gpu, 1 + cp.arange(1024, dtype=cp.int32)) + print("Done") + return 0 + finally: + stream.close() + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/threadBlockCluster/README.md b/samples/threadBlockCluster/README.md new file mode 100644 index 00000000000..09be51d8dbb --- /dev/null +++ b/samples/threadBlockCluster/README.md @@ -0,0 +1,126 @@ +# Sample: Thread Block Clusters (Python) + +## Description + +Thread Block Clusters are a hardware feature of Hopper-class (and newer) +GPUs — a Compute Capability 9.0+ concept that groups several thread blocks +into a *cluster* so they can share distributed shared memory and coordinate +through `cooperative_groups`. + +`cuda.core.LaunchConfig` exposes this via a `cluster=` argument. This +sample: + +1. Compiles a kernel that queries the cluster/grid/block dimensions from + inside `cooperative_groups`. +2. Launches with `LaunchConfig(grid=4, cluster=2, block=32)`. +3. Reads the reported dimensions back through host-visible pinned memory + (via `LegacyPinnedMemoryResource`). +4. Verifies that `LaunchConfig(grid=G, cluster=C, block=B)` produces + `G * C` total blocks — `G` clusters of `C` blocks each. + +The sample **waives itself (exit code 2)** when: + +- the current device has Compute Capability < 9.0, or +- neither `CUDA_PATH` nor `CUDA_HOME` points to a CUDA toolkit whose + `include/` directory holds `cooperative_groups.h`. + +## What You'll Learn + +- Using `LaunchConfig(cluster=...)` for thread block cluster launches +- Reading `cg::this_grid().dim_clusters()` / `dim_blocks()` / + `cg::this_thread_block().dim_threads()` inside a kernel +- Passing an `include_path` to `ProgramOptions` so NVRTC can find + `cooperative_groups.h` +- Allocating pinned memory with `LegacyPinnedMemoryResource` and viewing it + as a NumPy array via DLPack + +## Key Libraries + +- [`cuda.core`](https://nvidia.github.io/cuda-python/cuda-core/latest/) - `Device`, `Program`, `LaunchConfig`, `LegacyPinnedMemoryResource`, `launch` +- [`cuda.pathfinder`](https://nvidia.github.io/cuda-python/cuda-pathfinder/latest/) - `get_cuda_path_or_home` to locate the CUDA toolkit +- `numpy` (>=2.2.5) - viewing pinned buffers as arrays via DLPack + +## Key APIs + +### From `cuda.core` + +- `LaunchConfig(grid=..., cluster=..., block=...)` - configure a + cluster-aware launch +- `ProgramOptions(arch=..., std=..., include_path=...)` - hand NVRTC the + include search paths for CG headers +- `LegacyPinnedMemoryResource` / `.allocate(nbytes)` - allocate host-visible + pinned memory +- `launch`, `Device.default_stream`, `Device.sync()` - launch and wait + +### Kernel-side (CUDA) + +- `cg::this_grid().dim_blocks()`, `dim_clusters()`, `cluster_rank()`, + `block_rank()`, `thread_rank()` +- `cg::this_thread_block().dim_threads()` + +## Requirements + +### Hardware + +- **NVIDIA Hopper or newer GPU** (Compute Capability 9.0+). Ada / Ampere / + Turing GPUs do not support thread block clusters and will waive the + sample. + +### Software + +- CUDA Toolkit 13.0 or newer with `cooperative_groups.h` in its `include/` + directory. Set `CUDA_PATH` or `CUDA_HOME`. +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `cuda-core` (>=1.0.0) +- `numpy` (>=2.2.5) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +export CUDA_HOME=/usr/local/cuda # or wherever your CTK is installed +python threadBlockCluster.py +``` + +## Expected Output + +On a Hopper-class GPU: + +``` +grid dim: (8, 1, 1) +cluster dim: (4, 1, 1) +block dim: (32, 1, 1) + +Results stored in pinned memory: + Grid dimensions (blocks): (8, 1, 1) + Cluster dimensions: (4, 1, 1) + Block dimensions (threads): (32, 1, 1) + +LaunchConfig(grid=4, cluster=2) produced 8 total blocks as expected. +Done +``` + +On a pre-Hopper GPU (CC < 9.0) the sample self-waives: + +``` +This sample requires compute capability >= 9.0 (found sm_89). Thread Block Clusters are Hopper+. Waiving. +``` + +## Files + +- `threadBlockCluster.py` - Python implementation +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.core` LaunchConfig API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#cuda.core.LaunchConfig) +- [CUDA C++ Programming Guide — Thread Block Clusters](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#thread-block-clusters) +- [Cooperative Groups](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cooperative-groups) diff --git a/samples/threadBlockCluster/requirements.txt b/samples/threadBlockCluster/requirements.txt new file mode 100644 index 00000000000..d705e21cdff --- /dev/null +++ b/samples/threadBlockCluster/requirements.txt @@ -0,0 +1,6 @@ +# threadBlockCluster Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +cuda-core>=1.0.0 +numpy>=2.3.2 diff --git a/samples/threadBlockCluster/threadBlockCluster.py b/samples/threadBlockCluster/threadBlockCluster.py new file mode 100644 index 00000000000..f5001974dce --- /dev/null +++ b/samples/threadBlockCluster/threadBlockCluster.py @@ -0,0 +1,214 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "numpy>=2.3.2"] +# /// + +""" +Thread Block Clusters with cuda.core + +Thread Block Clusters are a Hopper-class hardware feature (Compute +Capability 9.0+): a group of thread blocks that can share distributed +shared memory and coordinate through cooperative_groups. + +This sample: + + * Compiles a kernel that queries ``cg::this_grid().dim_blocks()``, + ``dim_clusters()``, and ``cg::this_thread_block().dim_threads()``. + * Launches it with ``LaunchConfig(grid=..., cluster=..., block=...)``. + * Reads the reported dimensions back through host-visible pinned memory. + * Verifies that ``LaunchConfig(grid=G, cluster=C, block=B)`` produces + ``G * C`` total blocks arranged as ``G`` clusters of ``C`` blocks each. + +Waives with exit code 2 when: + + * the current device's compute capability is below 9.0, or + * ``CUDA_PATH`` / ``CUDA_HOME`` is not set (needed to locate + ``cooperative_groups.h``). +""" + +import os +import sys + +try: + import numpy as np + + from cuda.core import ( + Device, + LaunchConfig, + LegacyPinnedMemoryResource, + Program, + ProgramOptions, + launch, + ) + from cuda.pathfinder import get_cuda_path_or_home +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +EXIT_WAIVED = 2 + + +CLUSTER_INFO_KERNEL = r""" +#include + +namespace cg = cooperative_groups; + +extern "C" +__global__ void check_cluster_info(unsigned int* grid_dims, + unsigned int* cluster_dims, + unsigned int* block_dims) { + auto g = cg::this_grid(); + auto b = cg::this_thread_block(); + + // Only one thread of the launch writes the results. + if (g.cluster_rank() == 0 && g.block_rank() == 0 && g.thread_rank() == 0) { + grid_dims[0] = g.dim_blocks().x; + grid_dims[1] = g.dim_blocks().y; + grid_dims[2] = g.dim_blocks().z; + + cluster_dims[0] = g.dim_clusters().x; + cluster_dims[1] = g.dim_clusters().y; + cluster_dims[2] = g.dim_clusters().z; + + block_dims[0] = b.dim_threads().x; + block_dims[1] = b.dim_threads().y; + block_dims[2] = b.dim_threads().z; + + printf("grid dim: (%u, %u, %u)\n", g.dim_blocks().x, g.dim_blocks().y, g.dim_blocks().z); + printf("cluster dim: (%u, %u, %u)\n", g.dim_clusters().x, g.dim_clusters().y, g.dim_clusters().z); + printf("block dim: (%u, %u, %u)\n", b.dim_threads().x, b.dim_threads().y, b.dim_threads().z); + } +} +""" + + +def _find_include_paths(): + """Resolve include paths for cooperative_groups.h (and optional CCCL).""" + cuda_path = get_cuda_path_or_home() + if cuda_path is None: + return None + cuda_include = os.path.join(cuda_path, "include") + if not os.path.isdir(cuda_include): + return None + paths = [cuda_include] + cccl_include = os.path.join(cuda_include, "cccl") + if os.path.isdir(cccl_include): + paths.insert(0, cccl_include) + return paths + + +def main(): + if np.lib.NumpyVersion(np.__version__) < "2.2.5": + print("This sample requires NumPy 2.2.5 or later.", file=sys.stderr) + sys.exit(EXIT_WAIVED) + + include_path = _find_include_paths() + if include_path is None: + print( + "Could not locate a CUDA include directory. " + "Set CUDA_PATH or CUDA_HOME to a CUDA toolkit installation. Waiving.", + file=sys.stderr, + ) + sys.exit(EXIT_WAIVED) + + dev = Device() + arch = dev.compute_capability + if arch < (9, 0): + print( + f"This sample requires compute capability >= 9.0 " + f"(found sm_{arch[0]}{arch[1]}). Thread Block Clusters are Hopper+. Waiving.", + file=sys.stderr, + ) + sys.exit(EXIT_WAIVED) + + dev.set_current() + arch_str = f"{arch[0]}{arch[1]}" + + prog = Program( + CLUSTER_INFO_KERNEL, + code_type="c++", + options=ProgramOptions(arch=f"sm_{arch_str}", std="c++17", include_path=include_path), + ) + mod = prog.compile(target_type="cubin") + kernel = mod.get_kernel("check_cluster_info") + + # LaunchConfig(grid=G, cluster=C, block=B) → G clusters of C blocks + # each = G*C total blocks; each block launches B threads. + grid = 4 + cluster = 2 + block = 32 + config = LaunchConfig(grid=grid, cluster=cluster, block=block) + + # Pinned host-visible memory for the kernel's output. + pinned_mr = LegacyPinnedMemoryResource() + element_size = np.dtype(np.uint32).itemsize + grid_buffer = cluster_buffer = block_buffer = None + try: + grid_buffer = pinned_mr.allocate(3 * element_size) + cluster_buffer = pinned_mr.allocate(3 * element_size) + block_buffer = pinned_mr.allocate(3 * element_size) + + grid_dims = np.from_dlpack(grid_buffer).view(dtype=np.uint32) + cluster_dims = np.from_dlpack(cluster_buffer).view(dtype=np.uint32) + block_dims = np.from_dlpack(block_buffer).view(dtype=np.uint32) + + grid_dims[:] = 0 + cluster_dims[:] = 0 + block_dims[:] = 0 + + launch(dev.default_stream, config, kernel, grid_buffer, cluster_buffer, block_buffer) + dev.sync() + + print("\nResults stored in pinned memory:") + print(f" Grid dimensions (blocks): {tuple(grid_dims)}") + print(f" Cluster dimensions: {tuple(cluster_dims)}") + print(f" Block dimensions (threads): {tuple(block_dims)}") + + expected_grid_blocks = grid * cluster # 4 * 2 = 8 + actual_grid_blocks = int(grid_dims[0]) + assert actual_grid_blocks == expected_grid_blocks, ( + f"Grid conversion failed: expected {expected_grid_blocks} total blocks, got {actual_grid_blocks}" + ) + + print(f"\nLaunchConfig(grid={grid}, cluster={cluster}) produced {actual_grid_blocks} total blocks as expected.") + print("Done") + return 0 + finally: + if block_buffer is not None: + block_buffer.close() + if cluster_buffer is not None: + cluster_buffer.close() + if grid_buffer is not None: + grid_buffer.close() + + +if __name__ == "__main__": + sys.exit(main()) From 35c81eb5acededacef0ca59ecaa3f2dfbbf919c0 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 16 Jul 2026 13:04:58 -0500 Subject: [PATCH 06/11] Migrate existing cuda.bindings examples to /samples --- cuda_bindings/DESCRIPTION.rst | 2 +- .../bindings/_example_helpers/__init__.py | 17 - .../cuda/bindings/_example_helpers/common.py | 96 ------ .../bindings/_example_helpers/helper_cuda.py | 48 --- .../_example_helpers/helper_string.py | 15 - cuda_bindings/docs/source/examples.rst | 81 ++--- .../examples/0_Introduction/clock_nvrtc.py | 128 ------- .../0_Introduction/simple_cubemap_texture.py | 229 ------------- .../0_Introduction/system_wide_atomics.py | 255 -------------- .../examples/0_Introduction/vector_add_drv.py | 121 ------- .../0_Introduction/vector_add_mmap.py | 311 ------------------ cuda_bindings/examples/extra/jit_program.py | 191 ----------- cuda_bindings/tests/test_examples.py | 33 -- cuda_core/tests/example_tests/run_samples.py | 31 +- cuda_core/tests/example_tests/test_samples.py | 21 +- pytest.ini | 2 - samples/0_Introduction/clockNvrtc/README.md | 101 ++++++ .../0_Introduction/clockNvrtc/clockNvrtc.py | 181 ++++++++++ .../clockNvrtc/requirements.txt | 5 + .../simpleCubemapTexture/README.md | 108 ++++++ .../simpleCubemapTexture/requirements.txt | 5 + .../simpleCubemapTexture.py | 240 ++++++++++++++ .../systemWideAtomics/README.md | 117 +++++++ .../systemWideAtomics/requirements.txt | 5 + .../systemWideAtomics/systemWideAtomics.py | 254 ++++++++++++++ .../vectorAddDriverApi/README.md | 102 ++++++ .../vectorAddDriverApi/requirements.txt | 5 + .../vectorAddDriverApi/vectorAddDriverApi.py | 166 ++++++++++ .../0_Introduction/vectorAddMmap/README.md | 114 +++++++ .../vectorAddMmap/requirements.txt | 5 + .../vectorAddMmap/vectorAddMmap.py | 291 ++++++++++++++++ .../streamOrderedAllocation/README.md | 110 +++++++ .../streamOrderedAllocation/requirements.txt | 5 + .../streamOrderedAllocation.py | 244 +++++++------- .../cudaGraphsManualNodes/README.md | 112 +++++++ .../cudaGraphsManualNodes.py | 205 +++++++----- .../cudaGraphsManualNodes/requirements.txt | 5 + .../globalToShmemAsyncCopy/README.md | 117 +++++++ .../globalToShmemAsyncCopy.py | 69 +++- .../globalToShmemAsyncCopy/requirements.txt | 5 + .../conjugateGradientMultiBlockCG/README.md | 117 +++++++ .../conjugateGradientMultiBlockCG.py | 178 +++++----- .../requirements.txt | 5 + samples/4_CUDA_Libraries/nvidiaSmi/README.md | 106 ++++++ .../4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py | 115 ++++--- .../nvidiaSmi/requirements.txt | 4 + samples/Utilities/cuda_bindings_utils.py | 243 ++++++++++++++ samples/extra/isoFdModelling/README.md | 111 +++++++ .../extra/isoFdModelling/isoFdModelling.py | 58 +++- samples/extra/isoFdModelling/requirements.txt | 9 + samples/extra/jitProgram/README.md | 105 ++++++ samples/extra/jitProgram/jitProgram.py | 230 +++++++++++++ samples/extra/jitProgram/requirements.txt | 5 + scripts/run_tests.sh | 33 +- 54 files changed, 3597 insertions(+), 1874 deletions(-) delete mode 100644 cuda_bindings/cuda/bindings/_example_helpers/__init__.py delete mode 100644 cuda_bindings/cuda/bindings/_example_helpers/common.py delete mode 100644 cuda_bindings/cuda/bindings/_example_helpers/helper_cuda.py delete mode 100644 cuda_bindings/cuda/bindings/_example_helpers/helper_string.py delete mode 100644 cuda_bindings/examples/0_Introduction/clock_nvrtc.py delete mode 100644 cuda_bindings/examples/0_Introduction/simple_cubemap_texture.py delete mode 100644 cuda_bindings/examples/0_Introduction/system_wide_atomics.py delete mode 100644 cuda_bindings/examples/0_Introduction/vector_add_drv.py delete mode 100644 cuda_bindings/examples/0_Introduction/vector_add_mmap.py delete mode 100644 cuda_bindings/examples/extra/jit_program.py delete mode 100644 cuda_bindings/tests/test_examples.py create mode 100644 samples/0_Introduction/clockNvrtc/README.md create mode 100644 samples/0_Introduction/clockNvrtc/clockNvrtc.py create mode 100644 samples/0_Introduction/clockNvrtc/requirements.txt create mode 100644 samples/0_Introduction/simpleCubemapTexture/README.md create mode 100644 samples/0_Introduction/simpleCubemapTexture/requirements.txt create mode 100644 samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py create mode 100644 samples/0_Introduction/systemWideAtomics/README.md create mode 100644 samples/0_Introduction/systemWideAtomics/requirements.txt create mode 100644 samples/0_Introduction/systemWideAtomics/systemWideAtomics.py create mode 100644 samples/0_Introduction/vectorAddDriverApi/README.md create mode 100644 samples/0_Introduction/vectorAddDriverApi/requirements.txt create mode 100644 samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py create mode 100644 samples/0_Introduction/vectorAddMmap/README.md create mode 100644 samples/0_Introduction/vectorAddMmap/requirements.txt create mode 100644 samples/0_Introduction/vectorAddMmap/vectorAddMmap.py create mode 100644 samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md create mode 100644 samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt rename cuda_bindings/examples/2_Concepts_and_Techniques/stream_ordered_allocation.py => samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py (53%) create mode 100644 samples/3_CUDA_Features/cudaGraphsManualNodes/README.md rename cuda_bindings/examples/3_CUDA_Features/simple_cuda_graphs.py => samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py (70%) create mode 100644 samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt create mode 100644 samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md rename cuda_bindings/examples/3_CUDA_Features/global_to_shmem_async_copy.py => samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py (94%) create mode 100644 samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt create mode 100644 samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md rename cuda_bindings/examples/4_CUDA_Libraries/conjugate_gradient_multi_block_cg.py => samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py (65%) create mode 100644 samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt create mode 100644 samples/4_CUDA_Libraries/nvidiaSmi/README.md rename cuda_bindings/examples/4_CUDA_Libraries/nvidia_smi.py => samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py (64%) create mode 100644 samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt create mode 100644 samples/Utilities/cuda_bindings_utils.py create mode 100644 samples/extra/isoFdModelling/README.md rename cuda_bindings/examples/extra/iso_fd_modelling.py => samples/extra/isoFdModelling/isoFdModelling.py (90%) create mode 100644 samples/extra/isoFdModelling/requirements.txt create mode 100644 samples/extra/jitProgram/README.md create mode 100644 samples/extra/jitProgram/jitProgram.py create mode 100644 samples/extra/jitProgram/requirements.txt diff --git a/cuda_bindings/DESCRIPTION.rst b/cuda_bindings/DESCRIPTION.rst index f61b10f2e72..862e485e3fa 100644 --- a/cuda_bindings/DESCRIPTION.rst +++ b/cuda_bindings/DESCRIPTION.rst @@ -13,7 +13,7 @@ cuda-bindings: Low-level CUDA interfaces * `Repository `_ * `Documentation `_ -* `Examples `_ +* `Examples `_ * `Issue tracker `_ For the installation instruction, please refer to the `Installation `_ page. diff --git a/cuda_bindings/cuda/bindings/_example_helpers/__init__.py b/cuda_bindings/cuda/bindings/_example_helpers/__init__.py deleted file mode 100644 index fa061cc3461..00000000000 --- a/cuda_bindings/cuda/bindings/_example_helpers/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -from .common import KernelHelper, check_compute_capability_too_low, requirement_not_met -from .helper_cuda import check_cuda_errors, find_cuda_device, find_cuda_device_drv -from .helper_string import check_cmd_line_flag, get_cmd_line_argument_int - -__all__ = [ - "KernelHelper", - "check_cmd_line_flag", - "check_compute_capability_too_low", - "check_cuda_errors", - "find_cuda_device", - "find_cuda_device_drv", - "get_cmd_line_argument_int", - "requirement_not_met", -] diff --git a/cuda_bindings/cuda/bindings/_example_helpers/common.py b/cuda_bindings/cuda/bindings/_example_helpers/common.py deleted file mode 100644 index 15317ace29c..00000000000 --- a/cuda_bindings/cuda/bindings/_example_helpers/common.py +++ /dev/null @@ -1,96 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - - -import os -import sys - -import numpy as np - -from cuda import pathfinder -from cuda.bindings import driver as cuda -from cuda.bindings import nvrtc -from cuda.bindings import runtime as cudart - -from .helper_cuda import check_cuda_errors - - -def requirement_not_met(message): - print(message, file=sys.stderr) # noqa: T201 - exitcode = os.environ.get("CUDA_BINDINGS_SKIP_EXAMPLE", "1") - return sys.exit(int(exitcode)) - - -def check_compute_capability_too_low(dev_id, required_cc_major_minor): - cc_major = check_cuda_errors( - cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMajor, dev_id) - ) - cc_minor = check_cuda_errors( - cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMinor, dev_id) - ) - have_cc_major_minor = (cc_major, cc_minor) - if have_cc_major_minor < required_cc_major_minor: - requirement_not_met( - f"CUDA device compute capability too low: {have_cc_major_minor=!r}, {required_cc_major_minor=!r}" - ) - - -class KernelHelper: - def __init__(self, code, dev_id): - include_dirs = [] - for libname in ("cudart", "cccl"): - hdr_dir = pathfinder.find_nvidia_header_directory(libname) - if hdr_dir is None: - requirement_not_met(f'pathfinder.find_nvidia_header_directory("{libname}") returned None') - include_dirs.append(hdr_dir) - - prog = check_cuda_errors(nvrtc.nvrtcCreateProgram(str.encode(code), b"sourceCode.cu", 0, None, None)) - - # Initialize CUDA - check_cuda_errors(cudart.cudaFree(0)) - - major = check_cuda_errors( - cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMajor, dev_id) - ) - minor = check_cuda_errors( - cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMinor, dev_id) - ) - _, nvrtc_minor = check_cuda_errors(nvrtc.nvrtcVersion()) - use_cubin = nvrtc_minor >= 1 - prefix = "sm" if use_cubin else "compute" - arch_arg = bytes(f"--gpu-architecture={prefix}_{major}{minor}", "ascii") - - opts = [ - b"--fmad=true", - arch_arg, - b"--std=c++17", - b"-default-device", - ] - for inc_dir in include_dirs: - opts.append(f"--include-path={inc_dir}".encode()) - - try: - check_cuda_errors(nvrtc.nvrtcCompileProgram(prog, len(opts), opts)) - except RuntimeError as err: - log_size = check_cuda_errors(nvrtc.nvrtcGetProgramLogSize(prog)) - log = b" " * log_size - check_cuda_errors(nvrtc.nvrtcGetProgramLog(prog, log)) - import sys - - print(log.decode(), file=sys.stderr) # noqa: T201 - print(err, file=sys.stderr) # noqa: T201 - sys.exit(1) - - if use_cubin: - data_size = check_cuda_errors(nvrtc.nvrtcGetCUBINSize(prog)) - data = b" " * data_size - check_cuda_errors(nvrtc.nvrtcGetCUBIN(prog, data)) - else: - data_size = check_cuda_errors(nvrtc.nvrtcGetPTXSize(prog)) - data = b" " * data_size - check_cuda_errors(nvrtc.nvrtcGetPTX(prog, data)) - - self.module = check_cuda_errors(cuda.cuModuleLoadData(np.char.array(data))) - - def get_function(self, name): - return check_cuda_errors(cuda.cuModuleGetFunction(self.module, name)) diff --git a/cuda_bindings/cuda/bindings/_example_helpers/helper_cuda.py b/cuda_bindings/cuda/bindings/_example_helpers/helper_cuda.py deleted file mode 100644 index 0e56fa8fd10..00000000000 --- a/cuda_bindings/cuda/bindings/_example_helpers/helper_cuda.py +++ /dev/null @@ -1,48 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -from cuda.bindings import driver as cuda -from cuda.bindings import nvrtc -from cuda.bindings import runtime as cudart - -from .helper_string import check_cmd_line_flag, get_cmd_line_argument_int - - -def _cuda_get_error_enum(error): - if isinstance(error, cuda.CUresult): - err, name = cuda.cuGetErrorName(error) - return name if err == cuda.CUresult.CUDA_SUCCESS else "" - elif isinstance(error, cudart.cudaError_t): - return cudart.cudaGetErrorName(error)[1] - elif isinstance(error, nvrtc.nvrtcResult): - return nvrtc.nvrtcGetErrorString(error)[1] - else: - raise RuntimeError(f"Unknown error type: {error}") - - -def check_cuda_errors(result): - if result[0].value: - raise RuntimeError(f"CUDA error code={result[0].value}({_cuda_get_error_enum(result[0])})") - if len(result) == 1: - return None - elif len(result) == 2: - return result[1] - else: - return result[1:] - - -def find_cuda_device(): - dev_id = 0 - if check_cmd_line_flag("device="): - dev_id = get_cmd_line_argument_int("device=") - check_cuda_errors(cudart.cudaSetDevice(dev_id)) - return dev_id - - -def find_cuda_device_drv(): - dev_id = 0 - if check_cmd_line_flag("device="): - dev_id = get_cmd_line_argument_int("device=") - check_cuda_errors(cuda.cuInit(0)) - cu_device = check_cuda_errors(cuda.cuDeviceGet(dev_id)) - return cu_device diff --git a/cuda_bindings/cuda/bindings/_example_helpers/helper_string.py b/cuda_bindings/cuda/bindings/_example_helpers/helper_string.py deleted file mode 100644 index 1540db447a9..00000000000 --- a/cuda_bindings/cuda/bindings/_example_helpers/helper_string.py +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -import sys - - -def check_cmd_line_flag(string_ref): - return any(string_ref == i and k < len(sys.argv) - 1 for i, k in enumerate(sys.argv)) - - -def get_cmd_line_argument_int(string_ref): - for i, k in enumerate(sys.argv): - if string_ref == i and k < len(sys.argv) - 1: - return sys.argv[k + 1] - return 0 diff --git a/cuda_bindings/docs/source/examples.rst b/cuda_bindings/docs/source/examples.rst index 125b8d205ab..0c7a1945af7 100644 --- a/cuda_bindings/docs/source/examples.rst +++ b/cuda_bindings/docs/source/examples.rst @@ -4,65 +4,68 @@ Examples ======== -This page links to the ``cuda.bindings`` examples shipped in the -:cuda-bindings-examples:`cuda-python repository `. -Use it as a quick index when you want a runnable sample for a specific API area -or CUDA feature. +The canonical, runnable examples for ``cuda.bindings`` live under the top-level +:samples:`samples/ directory ` of the cuda-python repository, alongside +the ``cuda.core`` samples. Each sample is a self-contained directory with +its own ``README.md``, ``requirements.txt``, and PEP 723 dependency block, +and every sample is exercised as part of the ``cuda.core`` test suite. + +The cuda-bindings-flavored samples preserve the same category structure the +``cuda-samples`` repository uses, so they are grouped under +``samples/0_Introduction/``, ``samples/2_Concepts_and_Techniques/``, +``samples/3_CUDA_Features/``, ``samples/4_CUDA_Libraries/``, and +``samples/extra/``. Introduction ------------ -- :cuda-bindings-example:`clock_nvrtc.py <0_Introduction/clock_nvrtc.py>` - uses NVRTC-compiled CUDA code and the device clock to time a reduction - kernel. -- :cuda-bindings-example:`simple_cubemap_texture.py <0_Introduction/simple_cubemap_texture.py>` - demonstrates cubemap texture sampling and transformation. -- :cuda-bindings-example:`system_wide_atomics.py <0_Introduction/system_wide_atomics.py>` - demonstrates system-wide atomic operations on managed memory. -- :cuda-bindings-example:`vector_add_drv.py <0_Introduction/vector_add_drv.py>` - uses the CUDA Driver API and unified virtual addressing for vector addition. -- :cuda-bindings-example:`vector_add_mmap.py <0_Introduction/vector_add_mmap.py>` - uses virtual memory management APIs such as ``cuMemCreate`` and - ``cuMemMap`` for vector addition. - -Peer-to-peer and zero-copy patterns (``simple_p2p.py`` and -``simple_zero_copy.py``) are covered by the higher-level -:samples:`samples/simpleP2P/ ` and -:samples:`samples/simpleZeroCopy/ ` sample directories, -which use ``cuda.core``'s modern peer-access and pinned-memory APIs on top -of ``cuda.bindings``. +- :sample:`0_Introduction/clockNvrtc <0_Introduction/clockNvrtc/>` + uses NVRTC-compiled CUDA code and the device clock intrinsic to time a + reduction kernel; also demonstrates dynamic shared memory. +- :sample:`0_Introduction/simpleCubemapTexture <0_Introduction/simpleCubemapTexture/>` + demonstrates cubemap texture sampling, ``cudaMemcpy3D``, and bindless + texture objects. +- :sample:`0_Introduction/systemWideAtomics <0_Introduction/systemWideAtomics/>` + exercises every ``atomic*_system`` intrinsic on managed memory. +- :sample:`0_Introduction/vectorAddDriverApi <0_Introduction/vectorAddDriverApi/>` + is the "hello world" of the raw driver API in Python. +- :sample:`0_Introduction/vectorAddMmap <0_Introduction/vectorAddMmap/>` + uses the Virtual Memory Management API (``cuMemCreate``, ``cuMemMap``, + ``cuMemSetAccess``) to stripe an allocation across peer-capable devices. Concepts and techniques ----------------------- -- :cuda-bindings-example:`stream_ordered_allocation.py <2_Concepts_and_Techniques/stream_ordered_allocation.py>` - demonstrates ``cudaMallocAsync`` and ``cudaFreeAsync`` together with +- :sample:`2_Concepts_and_Techniques/streamOrderedAllocation <2_Concepts_and_Techniques/streamOrderedAllocation/>` + demonstrates ``cudaMallocAsync`` / ``cudaFreeAsync`` together with memory-pool release thresholds. CUDA features ------------- -- :cuda-bindings-example:`global_to_shmem_async_copy.py <3_CUDA_Features/global_to_shmem_async_copy.py>` - compares asynchronous global-to-shared-memory copy strategies in matrix - multiplication kernels. -- :cuda-bindings-example:`simple_cuda_graphs.py <3_CUDA_Features/simple_cuda_graphs.py>` - shows both manual CUDA graph construction and stream-capture-based replay. +- :sample:`3_CUDA_Features/globalToShmemAsyncCopy <3_CUDA_Features/globalToShmemAsyncCopy/>` + compares asynchronous global-to-shared-memory copy strategies + (``cuda::memcpy_async`` + ``cuda::pipeline`` / ``cuda::barrier``) in + matrix-multiplication kernels. +- :sample:`3_CUDA_Features/cudaGraphsManualNodes <3_CUDA_Features/cudaGraphsManualNodes/>` + shows both manual CUDA-graph construction (``cudaGraphAdd*Node``) and + stream-capture-based replay. Libraries and tools ------------------- -- :cuda-bindings-example:`conjugate_gradient_multi_block_cg.py <4_CUDA_Libraries/conjugate_gradient_multi_block_cg.py>` +- :sample:`4_CUDA_Libraries/conjugateGradientMultiBlockCG <4_CUDA_Libraries/conjugateGradientMultiBlockCG/>` implements a conjugate-gradient solver with cooperative groups and - multi-block synchronization. -- :cuda-bindings-example:`nvidia_smi.py <4_CUDA_Libraries/nvidia_smi.py>` + multi-block grid synchronization. +- :sample:`4_CUDA_Libraries/nvidiaSmi <4_CUDA_Libraries/nvidiaSmi/>` uses NVML to implement a Python subset of ``nvidia-smi``. Advanced and interoperability ----------------------------- -- :cuda-bindings-example:`iso_fd_modelling.py ` - runs isotropic finite-difference wave propagation across multiple GPUs with - peer-to-peer halo exchange. -- :cuda-bindings-example:`jit_program.py ` - JIT-compiles a SAXPY kernel with NVRTC and launches it through the Driver - API. +- :sample:`extra/isoFdModelling ` + runs isotropic finite-difference wave propagation across multiple GPUs + with peer-to-peer halo exchange. +- :sample:`extra/jitProgram ` + JIT-compiles a SAXPY kernel with NVRTC and launches it through the + Driver API — the low-level companion to ``samples/jitLtoLinking/``. diff --git a/cuda_bindings/examples/0_Introduction/clock_nvrtc.py b/cuda_bindings/examples/0_Introduction/clock_nvrtc.py deleted file mode 100644 index 26f02eba30e..00000000000 --- a/cuda_bindings/examples/0_Introduction/clock_nvrtc.py +++ /dev/null @@ -1,128 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates using the device clock for kernel timing via -# NVRTC-compiled CUDA code. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import platform - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met - -clock_nvrtc = """\ -extern "C" __global__ void timedReduction(const float *hinput, float *output, clock_t *timer) -{ - // __shared__ float shared[2 * blockDim.x]; - extern __shared__ float shared[]; - - const int tid = threadIdx.x; - const int bid = blockIdx.x; - - if (tid == 0) timer[bid] = clock(); - - // Copy hinput. - shared[tid] = hinput[tid]; - shared[tid + blockDim.x] = hinput[tid + blockDim.x]; - - // Perform reduction to find minimum. - for (int d = blockDim.x; d > 0; d /= 2) - { - __syncthreads(); - - if (tid < d) - { - float f0 = shared[tid]; - float f1 = shared[tid + d]; - - if (f1 < f0) - { - shared[tid] = f1; - } - } - } - - // Write result. - if (tid == 0) output[bid] = shared[0]; - - __syncthreads(); - - if (tid == 0) timer[bid+gridDim.x] = clock(); -} -""" - -num_blocks = 64 -num_threads = 256 - - -def elems_to_bytes(nelems, dt): - return nelems * np.dtype(dt).itemsize - - -def check_requirements(): - if platform.machine() == "armv7l": - requirement_not_met("clock_nvrtc is not supported on ARMv7") - - -def main(): - check_requirements() - - timer = np.empty(num_blocks * 2, dtype="int64") - hinput = np.empty(num_threads * 2, dtype="float32") - - for i in range(num_threads * 2): - hinput[i] = i - - dev_id = find_cuda_device() - kernel_helper = KernelHelper(clock_nvrtc, dev_id) - kernel_addr = kernel_helper.get_function(b"timedReduction") - - dinput = check_cuda_errors(cuda.cuMemAlloc(hinput.nbytes)) - doutput = check_cuda_errors(cuda.cuMemAlloc(elems_to_bytes(num_blocks, np.float32))) - dtimer = check_cuda_errors(cuda.cuMemAlloc(timer.nbytes)) - check_cuda_errors(cuda.cuMemcpyHtoD(dinput, hinput, hinput.nbytes)) - - args = ((dinput, doutput, dtimer), (None, None, None)) - shared_memory_nbytes = elems_to_bytes(2 * num_threads, np.float32) - - grid_dims = (num_blocks, 1, 1) - block_dims = (num_threads, 1, 1) - - check_cuda_errors( - cuda.cuLaunchKernel( - kernel_addr, - *grid_dims, # grid dim - *block_dims, # block dim - shared_memory_nbytes, - 0, # shared mem, stream - args, - 0, - ) - ) # arguments - - check_cuda_errors(cuda.cuCtxSynchronize()) - check_cuda_errors(cuda.cuMemcpyDtoH(timer, dtimer, timer.nbytes)) - check_cuda_errors(cuda.cuMemFree(dinput)) - check_cuda_errors(cuda.cuMemFree(doutput)) - check_cuda_errors(cuda.cuMemFree(dtimer)) - - avg_elapsed_clocks = 0.0 - - for i in range(num_blocks): - avg_elapsed_clocks += timer[i + num_blocks] - timer[i] - - avg_elapsed_clocks = avg_elapsed_clocks / num_blocks - print(f"Average clocks/block = {avg_elapsed_clocks}") - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/0_Introduction/simple_cubemap_texture.py b/cuda_bindings/examples/0_Introduction/simple_cubemap_texture.py deleted file mode 100644 index da8227a6c3c..00000000000 --- a/cuda_bindings/examples/0_Introduction/simple_cubemap_texture.py +++ /dev/null @@ -1,229 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates cubemap texture sampling and transformation. -# -# ################################################################################ - - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - - -import ctypes -import sys -import time - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met - -simple_cubemap_texture = """\ -extern "C" -__global__ void transformKernel(float *g_odata, int width, cudaTextureObject_t tex) -{ - // calculate this thread's data point - unsigned int x = blockIdx.x*blockDim.x + threadIdx.x; - unsigned int y = blockIdx.y*blockDim.y + threadIdx.y; - - // 0.5f offset and division are necessary to access the original data points - // in the texture (such that bilinear interpolation will not be activated). - // For details, see also CUDA Programming Guide, Appendix D - - float u = ((x+0.5f) / (float) width) * 2.f - 1.f; - float v = ((y+0.5f) / (float) width) * 2.f - 1.f; - - float cx, cy, cz; - - for (unsigned int face = 0; face < 6; face ++) - { - //Layer 0 is positive X face - if (face == 0) - { - cx = 1; - cy = -v; - cz = -u; - } - //Layer 1 is negative X face - else if (face == 1) - { - cx = -1; - cy = -v; - cz = u; - } - //Layer 2 is positive Y face - else if (face == 2) - { - cx = u; - cy = 1; - cz = v; - } - //Layer 3 is negative Y face - else if (face == 3) - { - cx = u; - cy = -1; - cz = -v; - } - //Layer 4 is positive Z face - else if (face == 4) - { - cx = u; - cy = -v; - cz = 1; - } - //Layer 4 is negative Z face - else if (face == 5) - { - cx = -u; - cy = -v; - cz = -1; - } - - // read from texture, do expected transformation and write to global memory - g_odata[face*width*width + y*width + x] = -texCubemap(tex, cx, cy, cz); - } -} -""" - - -def main(): - # Use command-line specified CUDA device, otherwise use device with highest Gflops/s - dev_id = find_cuda_device() - - # Get number of SMs on this GPU - device_props = check_cuda_errors(cudart.cudaGetDeviceProperties(dev_id)) - print( - f"CUDA device [{device_props.name}] has {device_props.multiProcessorCount} Multi-Processors SM {device_props.major}.{device_props.minor}" - ) - if device_props.major < 2: - requirement_not_met("Test requires SM 2.0 or higher for support of Texture Arrays.") - - # Generate input data for layered texture - width = 64 - num_faces = 6 - num_layers = 1 - cubemap_size = width * width * num_faces - h_data = np.arange(cubemap_size * num_layers, dtype="float32") - size = h_data.nbytes - - # This is the expected transformation of the input data (the expected output) - h_data_ref = np.repeat(np.arange(num_layers, dtype=h_data.dtype), cubemap_size) - h_data - - # Allocate device memory for result - d_data = check_cuda_errors(cudart.cudaMalloc(size)) - - # Allocate array and copy image data - channel_desc = check_cuda_errors( - cudart.cudaCreateChannelDesc(32, 0, 0, 0, cudart.cudaChannelFormatKind.cudaChannelFormatKindFloat) - ) - cu_3darray = check_cuda_errors( - cudart.cudaMalloc3DArray( - channel_desc, - cudart.make_cudaExtent(width, width, num_faces), - cudart.cudaArrayCubemap, - ) - ) - width_nbytes = h_data[:width].nbytes - myparms = cudart.cudaMemcpy3DParms() - myparms.srcPos = cudart.make_cudaPos(0, 0, 0) - myparms.dstPos = cudart.make_cudaPos(0, 0, 0) - myparms.srcPtr = cudart.make_cudaPitchedPtr(h_data, width_nbytes, width, width) - myparms.dstArray = cu_3darray - myparms.extent = cudart.make_cudaExtent(width, width, num_faces) - myparms.kind = cudart.cudaMemcpyKind.cudaMemcpyHostToDevice - check_cuda_errors(cudart.cudaMemcpy3D(myparms)) - - tex_res = cudart.cudaResourceDesc() - tex_res.resType = cudart.cudaResourceType.cudaResourceTypeArray - tex_res.res.array.array = cu_3darray - - tex_descr = cudart.cudaTextureDesc() - tex_descr.normalizedCoords = True - tex_descr.filterMode = cudart.cudaTextureFilterMode.cudaFilterModeLinear - tex_descr.addressMode[0] = cudart.cudaTextureAddressMode.cudaAddressModeWrap - tex_descr.addressMode[1] = cudart.cudaTextureAddressMode.cudaAddressModeWrap - tex_descr.addressMode[2] = cudart.cudaTextureAddressMode.cudaAddressModeWrap - tex_descr.readMode = cudart.cudaTextureReadMode.cudaReadModeElementType - - tex = check_cuda_errors(cudart.cudaCreateTextureObject(tex_res, tex_descr, None)) - dim_block = cudart.dim3() - dim_block.x = 8 - dim_block.y = 8 - dim_block.z = 1 - dim_grid = cudart.dim3() - dim_grid.x = width / dim_block.x - dim_grid.y = width / dim_block.y - dim_grid.z = 1 - - print( - f"Covering Cubemap data array of {width}~3 x {num_layers}: Grid size is {dim_grid.x} x {dim_grid.y}, each block has 8 x 8 threads" - ) - - kernel_helper = KernelHelper(simple_cubemap_texture, dev_id) - _transform_kernel = kernel_helper.get_function(b"transformKernel") - kernel_args = ((d_data, width, tex), (ctypes.c_void_p, ctypes.c_int, None)) - check_cuda_errors( - cuda.cuLaunchKernel( - _transform_kernel, - dim_grid.x, - dim_grid.y, - dim_grid.z, # grid dim - dim_block.x, - dim_block.y, - dim_block.z, # block dim - 0, - 0, # shared mem and stream - kernel_args, - 0, - ) - ) # arguments - - check_cuda_errors(cudart.cudaDeviceSynchronize()) - - start = time.time() - - # Execute the kernel - check_cuda_errors( - cuda.cuLaunchKernel( - _transform_kernel, - dim_grid.x, - dim_grid.y, - dim_grid.z, # grid dim - dim_block.x, - dim_block.y, - dim_block.z, # block dim - 0, - 0, # shared mem and stream - kernel_args, - 0, - ) - ) # arguments - - check_cuda_errors(cudart.cudaDeviceSynchronize()) - stop = time.time() - print(f"Processing time: {stop - start:.3f} msec") - print(f"{cubemap_size / ((stop - start + 1) / 1000.0) / 1e6:.2f} Mtexlookups/sec") - - # Allocate mem for the result on host side - h_odata = np.empty_like(h_data) - # Copy result from device to host - check_cuda_errors(cudart.cudaMemcpy(h_odata, d_data, size, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost)) - - check_cuda_errors(cudart.cudaDestroyTextureObject(tex)) - check_cuda_errors(cudart.cudaFree(d_data)) - check_cuda_errors(cudart.cudaFreeArray(cu_3darray)) - - min_epsilon_error = 5.0e-3 - if np.max(np.abs(h_odata - h_data_ref)) > min_epsilon_error: - print("Failed", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/0_Introduction/system_wide_atomics.py b/cuda_bindings/examples/0_Introduction/system_wide_atomics.py deleted file mode 100644 index 0d7a6341a54..00000000000 --- a/cuda_bindings/examples/0_Introduction/system_wide_atomics.py +++ /dev/null @@ -1,255 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates system-wide atomic operations on managed memory. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes -import os -import sys - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met - -system_wide_atomics = """\ -#define LOOP_NUM 50 - -extern "C" -__global__ void atomicKernel(int *atom_arr) { - unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x; - - for (int i = 0; i < LOOP_NUM; i++) { - // Atomic addition - atomicAdd_system(&atom_arr[0], 10); - - // Atomic exchange - atomicExch_system(&atom_arr[1], tid); - - // Atomic maximum - atomicMax_system(&atom_arr[2], tid); - - // Atomic minimum - atomicMin_system(&atom_arr[3], tid); - - // Atomic increment (modulo 17+1) - atomicInc_system((unsigned int *)&atom_arr[4], 17); - - // Atomic decrement - atomicDec_system((unsigned int *)&atom_arr[5], 137); - - // Atomic compare-and-swap - atomicCAS_system(&atom_arr[6], tid - 1, tid); - - // Bitwise atomic instructions - - // Atomic AND - atomicAnd_system(&atom_arr[7], 2 * tid + 7); - - // Atomic OR - atomicOr_system(&atom_arr[8], 1 << tid); - - // Atomic XOR - atomicXor_system(&atom_arr[9], tid); - } -} -""" - -LOOP_NUM = 50 - - -#! Compute reference data set -#! Each element is multiplied with the number of threads / array length -#! @param reference reference data, computed but preallocated -#! @param idata input data as provided to device -#! @param len number of elements in reference / idata -def verify(test_data, length): - val = 0 - - for i in range(length * LOOP_NUM): - val += 10 - - if val != test_data[0]: - print(f"atomicAdd failed val = {val} test_data = {test_data[0]}") - return False - - val = 0 - found = False - for i in range(length): - # second element should be a member of [0, len) - if i == test_data[1]: - found = True - break - - if not found: - print("atomicExch failed") - return False - - val = -(1 << 8) - - for i in range(length): - # third element should be len-1 - val = max(val, i) - - if val != test_data[2]: - print("atomicMax failed") - return False - - val = 1 << 8 - - for i in range(length): - val = min(val, i) - - if val != test_data[3]: - print("atomicMin failed") - return False - - limit = 17 - val = 0 - - for i in range(length * LOOP_NUM): - val = 0 if val >= limit else val + 1 - - if val != test_data[4]: - print("atomicInc failed") - return False - - limit = 137 - val = 0 - - for i in range(length * LOOP_NUM): - val = limit if (val == 0) or (val > limit) else val - 1 - - if val != test_data[5]: - print("atomicDec failed") - return False - - found = False - - for i in range(length): - # seventh element should be a member of [0, len) - if i == test_data[6]: - found = True - break - - if not found: - print("atomicCAS failed") - return False - - val = 0xFF - - for i in range(length): - # 8th element should be 1 - val &= 2 * i + 7 - - if val != test_data[7]: - print("atomicAnd failed") - return False - - # 9th element should be 0xff - val = -1 - if val != test_data[8]: - print("atomicOr failed") - return False - - val = 0xFF - - for i in range(length): - # 11th element should be 0xff - val ^= i - - if val != test_data[9]: - print("atomicXor failed") - return False - - return True - - -def main(): - if os.name == "nt": - requirement_not_met("Atomics not supported on Windows") - - # set device - dev_id = find_cuda_device() - device_prop = check_cuda_errors(cudart.cudaGetDeviceProperties(dev_id)) - - if not device_prop.managedMemory: - requirement_not_met("Unified Memory not supported on this device") - - compute_mode = check_cuda_errors( - cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeMode, dev_id) - ) - if compute_mode == cudart.cudaComputeMode.cudaComputeModeProhibited: - requirement_not_met("This sample requires a device in either default or process exclusive mode") - - if device_prop.major < 6: - requirement_not_met("Requires a minimum CUDA compute 6.0 capability") - - num_threads = 256 - num_blocks = 64 - num_data = 10 - - if device_prop.pageableMemoryAccess: - print("CAN access pageable memory") - atom_arr_h = (ctypes.c_int * num_data)(0) - atom_arr = ctypes.addressof(atom_arr_h) - else: - print("CANNOT access pageable memory") - atom_arr = check_cuda_errors( - cudart.cudaMallocManaged(np.dtype(np.int32).itemsize * num_data, cudart.cudaMemAttachGlobal) - ) - atom_arr_h = (ctypes.c_int * num_data).from_address(atom_arr) - - for i in range(num_data): - atom_arr_h[i] = 0 - - # To make the AND and XOR tests generate something other than 0... - atom_arr_h[7] = atom_arr_h[9] = 0xFF - - kernel_helper = KernelHelper(system_wide_atomics, dev_id) - _atomic_kernel = kernel_helper.get_function(b"atomicKernel") - kernel_args = ((atom_arr,), (ctypes.c_void_p,)) - check_cuda_errors( - cuda.cuLaunchKernel( - _atomic_kernel, - num_blocks, - 1, - 1, # grid dim - num_threads, - 1, - 1, # block dim - 0, - cuda.CU_STREAM_LEGACY, # shared mem and stream - kernel_args, - 0, - ) - ) # arguments - # NOTE: Python doesn't have an equivalent system atomic operations - # atomicKernel_CPU(atom_arr_h, numBlocks * numThreads) - - check_cuda_errors(cudart.cudaDeviceSynchronize()) - - # Compute & verify reference solution - test_result = verify(atom_arr_h, num_threads * num_blocks) - - if device_prop.pageableMemoryAccess: - pass - else: - check_cuda_errors(cudart.cudaFree(atom_arr)) - - if not test_result: - print("systemWideAtomics completed with errors", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/0_Introduction/vector_add_drv.py b/cuda_bindings/examples/0_Introduction/vector_add_drv.py deleted file mode 100644 index a6f65b9c815..00000000000 --- a/cuda_bindings/examples/0_Introduction/vector_add_drv.py +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates vector addition using the CUDA Driver API with -# unified virtual addressing. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes -import math -import sys - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, find_cuda_device_drv, requirement_not_met - -vector_add_drv = """\ -/* Vector addition: C = A + B. - * - * This sample is a very basic sample that implements element by element - * vector addition. It is the same as the sample illustrating Chapter 3 - * of the programming guide with some additions like error checking. - * - */ - -// Device code -extern "C" __global__ void VecAdd_kernel(const float *A, const float *B, float *C, int N) -{ - int i = blockDim.x * blockIdx.x + threadIdx.x; - - if (i < N) - C[i] = A[i] + B[i]; -} -""" - - -def main(): - n = 50000 - nbytes = n * np.dtype(np.float32).itemsize - - # Initialize - check_cuda_errors(cuda.cuInit(0)) - cu_device = find_cuda_device_drv() - # Create context - cu_context = check_cuda_errors(cuda.cuCtxCreate(None, 0, cu_device)) - - uva_supported = check_cuda_errors( - cuda.cuDeviceGetAttribute(cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING, cu_device) - ) - if not uva_supported: - requirement_not_met("Accessing pageable memory directly requires UVA") - - kernel_helper = KernelHelper(vector_add_drv, int(cu_device)) - _vec_add_kernel = kernel_helper.get_function(b"VecAdd_kernel") - - # Allocate input vectors h_A and h_B in host memory - h_a = np.random.rand(n).astype(dtype=np.float32) - h_b = np.random.rand(n).astype(dtype=np.float32) - h_c = np.random.rand(n).astype(dtype=np.float32) - - # Allocate vectors in device memory - d_a = check_cuda_errors(cuda.cuMemAlloc(nbytes)) - d_b = check_cuda_errors(cuda.cuMemAlloc(nbytes)) - d_c = check_cuda_errors(cuda.cuMemAlloc(nbytes)) - - # Copy vectors from host memory to device memory - check_cuda_errors(cuda.cuMemcpyHtoD(d_a, h_a, nbytes)) - check_cuda_errors(cuda.cuMemcpyHtoD(d_b, h_b, nbytes)) - - # Grid/Block configuration - threads_per_block = 256 - blocks_per_grid = (n + threads_per_block - 1) / threads_per_block - - kernel_args = ((d_a, d_b, d_c, n), (None, None, None, ctypes.c_int)) - - # Launch the CUDA kernel - check_cuda_errors( - cuda.cuLaunchKernel( - _vec_add_kernel, - blocks_per_grid, - 1, - 1, - threads_per_block, - 1, - 1, - 0, - 0, - kernel_args, - 0, - ) - ) - - # Copy result from device memory to host memory - # h_C contains the result in host memory - check_cuda_errors(cuda.cuMemcpyDtoH(h_c, d_c, nbytes)) - - for i in range(n): - sum_all = h_a[i] + h_b[i] - if math.fabs(h_c[i] - sum_all) > 1e-7: - break - - # Free device memory - check_cuda_errors(cuda.cuMemFree(d_a)) - check_cuda_errors(cuda.cuMemFree(d_b)) - check_cuda_errors(cuda.cuMemFree(d_c)) - - check_cuda_errors(cuda.cuCtxDestroy(cu_context)) - if i + 1 != n: - print("Result = FAIL", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/0_Introduction/vector_add_mmap.py b/cuda_bindings/examples/0_Introduction/vector_add_mmap.py deleted file mode 100644 index f1e9617166b..00000000000 --- a/cuda_bindings/examples/0_Introduction/vector_add_mmap.py +++ /dev/null @@ -1,311 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates vector addition using multi-device memory -# mapping (cuMemCreate, cuMemMap) with virtual address management. -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes -import math -import platform -import sys - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, find_cuda_device_drv, requirement_not_met - -vector_add_mmap = """\ -/* Vector addition: C = A + B. - * - * This sample is a very basic sample that implements element by element - * vector addition. It is the same as the sample illustrating Chapter 3 - * of the programming guide with some additions like error checking. - * - */ - -// Device code -extern "C" __global__ void VecAdd_kernel(const float *A, const float *B, float *C, int N) -{ - int i = blockDim.x * blockIdx.x + threadIdx.x; - - if (i < N) - C[i] = A[i] + B[i]; -} -""" - - -def round_up(x, y): - return int((x - 1) / y + 1) * y - - -def get_backing_devices(cu_device): - num_devices = check_cuda_errors(cuda.cuDeviceGetCount()) - - backing_devices = [cu_device] - for dev in range(num_devices): - # The mapping device is already in the backingDevices vector - if int(dev) == int(cu_device): - continue - - # Only peer capable devices can map each others memory - capable = check_cuda_errors(cuda.cuDeviceCanAccessPeer(cu_device, dev)) - if not capable: - continue - - # The device needs to support virtual address management for the required apis to work - attribute_val = check_cuda_errors( - cuda.cuDeviceGetAttribute( - cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED, - cu_device, - ) - ) - if attribute_val == 0: - continue - - backing_devices.append(cuda.CUdevice(dev)) - return backing_devices - - -def simple_malloc_multi_device_mmap(size, resident_devices, mapping_devices, align=0): - min_granularity = 0 - - # Setup the properties common for all the chunks - # The allocations will be device pinned memory. - # This property structure describes the physical location where the memory will be allocated via cuMemCreate allong with additional properties - # In this case, the allocation will be pinnded device memory local to a given device. - prop = cuda.CUmemAllocationProp() - prop.type = cuda.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED - prop.location.type = cuda.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE - - # Get the minimum granularity needed for the resident devices - # (the max of the minimum granularity of each participating device) - for device in resident_devices: - prop.location.id = device - status, granularity = cuda.cuMemGetAllocationGranularity( - prop, cuda.CUmemAllocationGranularity_flags.CU_MEM_ALLOC_GRANULARITY_MINIMUM - ) - if status != cuda.CUresult.CUDA_SUCCESS: - return status, None, None - if min_granularity < granularity: - min_granularity = granularity - - # Get the minimum granularity needed for the accessing devices - # (the max of the minimum granularity of each participating device) - for device in mapping_devices: - prop.location.id = device - status, granularity = cuda.cuMemGetAllocationGranularity( - prop, cuda.CUmemAllocationGranularity_flags.CU_MEM_ALLOC_GRANULARITY_MINIMUM - ) - if status != cuda.CUresult.CUDA_SUCCESS: - return status, None, None - if min_granularity < granularity: - min_granularity = granularity - - # Round up the size such that we can evenly split it into a stripe size tha meets the granularity requirements - # Essentially size = N * residentDevices.size() * min_granularity is the requirement, - # since each piece of the allocation will be stripeSize = N * min_granularity - # and the min_granularity requirement applies to each stripeSize piece of the allocation. - size = round_up(size, len(resident_devices) * min_granularity) - stripe_size = size / len(resident_devices) - - # Return the rounded up size to the caller for use in the free - allocation_size = size - - # Reserve the required contiguous VA space for the allocations - status, dptr = cuda.cuMemAddressReserve(size, align, cuda.CUdeviceptr(0), 0) - if status != cuda.CUresult.CUDA_SUCCESS: - simple_free_multi_device_mmap(dptr, size) - return status, None, None - - # Create and map the backings on each gpu - # note: reusing CUmemAllocationProp prop from earlier with prop.type & prop.location.type already specified. - for idx in range(len(resident_devices)): - # Set the location for this chunk to this device - prop.location.id = resident_devices[idx] - - # Create the allocation as a pinned allocation on this device - status, allocation_handle = cuda.cuMemCreate(stripe_size, prop, 0) - if status != cuda.CUresult.CUDA_SUCCESS: - simple_free_multi_device_mmap(dptr, size) - return status, None, None - - # Assign the chunk to the appropriate VA range and release the handle. - # After mapping the memory, it can be referenced by virtual address. - # Since we do not need to make any other mappings of this memory or export it, - # we no longer need and can release the allocationHandle. - # The allocation will be kept live until it is unmapped. - (status,) = cuda.cuMemMap(int(dptr) + (stripe_size * idx), stripe_size, 0, allocation_handle, 0) - - # the handle needs to be released even if the mapping failed. - (status2,) = cuda.cuMemRelease(allocation_handle) - if status != cuda.CUresult.CUDA_SUCCESS: - # cuMemRelease should not have failed here - # as the handle was just allocated successfully - # however return an error if it does. - status = status2 - - # Cleanup in case of any mapping failures. - if status != cuda.CUresult.CUDA_SUCCESS: - simple_free_multi_device_mmap(dptr, size) - return status, None, None - - # Each accessDescriptor will describe the mapping requirement for a single device - access_descriptors = [cuda.CUmemAccessDesc()] * len(mapping_devices) - - # Prepare the access descriptor array indicating where and how the backings should be visible. - for idx in range(len(mapping_devices)): - # Specify which device we are adding mappings for. - access_descriptors[idx].location.type = cuda.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE - access_descriptors[idx].location.id = mapping_devices[idx] - - # Specify both read and write access. - access_descriptors[idx].flags = cuda.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE - - # Apply the access descriptors to the whole VA range. - (status,) = cuda.cuMemSetAccess(dptr, size, access_descriptors, len(access_descriptors)) - if status != cuda.CUresult.CUDA_SUCCESS: - simple_free_multi_device_mmap(dptr, size) - return status, None, None - - return (status, dptr, allocation_size) - - -def simple_free_multi_device_mmap(dptr, size): - # Unmap the mapped virtual memory region - # Since the handles to the mapped backing stores have already been released - # by cuMemRelease, and these are the only/last mappings referencing them, - # The backing stores will be freed. - # Since the memory has been unmapped after this call, accessing the specified - # va range will result in a fault (unitll it is remapped). - status = cuda.cuMemUnmap(dptr, size) - if status[0] != cuda.CUresult.CUDA_SUCCESS: - return status - - # Free the virtual address region. This allows the virtual address region - # to be reused by future cuMemAddressReserve calls. This also allows the - # virtual address region to be used by other allocation made through - # opperating system calls like malloc & mmap. - status = cuda.cuMemAddressFree(dptr, size) - if status[0] != cuda.CUresult.CUDA_SUCCESS: - return status - return status - - -def main(): - if platform.system() == "Darwin": - requirement_not_met("vectorAddMMAP is not supported on Mac OSX") - - if platform.machine() == "armv7l": - requirement_not_met("vectorAddMMAP is not supported on ARMv7") - - if platform.machine() == "aarch64": - requirement_not_met("vectorAddMMAP is not supported on aarch64") - - if platform.machine() == "sbsa": - requirement_not_met("vectorAddMMAP is not supported on sbsa") - - n = 50000 - size = n * np.dtype(np.float32).itemsize - - # Initialize - check_cuda_errors(cuda.cuInit(0)) - - cu_device = find_cuda_device_drv() - - # Check that the selected device supports virtual address management - attribute_val = check_cuda_errors( - cuda.cuDeviceGetAttribute( - cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED, - cu_device, - ) - ) - print(f"Device {cu_device} VIRTUAL ADDRESS MANAGEMENT SUPPORTED = {attribute_val}.") - if not attribute_val: - requirement_not_met(f"Device {cu_device} doesn't support VIRTUAL ADDRESS MANAGEMENT.") - - # The vector addition happens on cuDevice, so the allocations need to be mapped there. - mapping_devices = [cu_device] - - # Collect devices accessible by the mapping device (cuDevice) into the backingDevices vector. - backing_devices = get_backing_devices(cu_device) - - # Create context - cu_context = check_cuda_errors(cuda.cuCtxCreate(None, 0, cu_device)) - - kernel_helper = KernelHelper(vector_add_mmap, int(cu_device)) - _vec_add_kernel = kernel_helper.get_function(b"VecAdd_kernel") - - # Allocate input vectors h_A and h_B in host memory - h_a = np.random.rand(size).astype(dtype=np.float32) - h_b = np.random.rand(size).astype(dtype=np.float32) - h_c = np.random.rand(size).astype(dtype=np.float32) - - # Allocate vectors in device memory - # note that a call to cuCtxEnablePeerAccess is not needed even though - # the backing devices and mapping device are not the same. - # This is because the cuMemSetAccess call explicitly specifies - # the cross device mapping. - # cuMemSetAccess is still subject to the constraints of cuDeviceCanAccessPeer - # for cross device mappings (hence why we checked cuDeviceCanAccessPeer earlier). - d_a, allocation_size = check_cuda_errors(simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) - d_b, _ = check_cuda_errors(simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) - d_c, _ = check_cuda_errors(simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) - - # Copy vectors from host memory to device memory - check_cuda_errors(cuda.cuMemcpyHtoD(d_a, h_a, size)) - check_cuda_errors(cuda.cuMemcpyHtoD(d_b, h_b, size)) - - # Grid/Block configuration - threads_per_block = 256 - blocks_per_grid = (n + threads_per_block - 1) / threads_per_block - - kernel_args = ((d_a, d_b, d_c, n), (None, None, None, ctypes.c_int)) - - # Launch the CUDA kernel - check_cuda_errors( - cuda.cuLaunchKernel( - _vec_add_kernel, - blocks_per_grid, - 1, - 1, - threads_per_block, - 1, - 1, - 0, - 0, - kernel_args, - 0, - ) - ) - - # Copy result from device memory to host memory - # h_C contains the result in host memory - check_cuda_errors(cuda.cuMemcpyDtoH(h_c, d_c, size)) - - # Verify result - for i in range(n): - sum_all = h_a[i] + h_b[i] - if math.fabs(h_c[i] - sum_all) > 1e-7: - break - - check_cuda_errors(simple_free_multi_device_mmap(d_a, allocation_size)) - check_cuda_errors(simple_free_multi_device_mmap(d_b, allocation_size)) - check_cuda_errors(simple_free_multi_device_mmap(d_c, allocation_size)) - - check_cuda_errors(cuda.cuCtxDestroy(cu_context)) - - if i + 1 != n: - print("Result = FAIL", file=sys.stderr) - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/examples/extra/jit_program.py b/cuda_bindings/examples/extra/jit_program.py deleted file mode 100644 index ec471ef9b32..00000000000 --- a/cuda_bindings/examples/extra/jit_program.py +++ /dev/null @@ -1,191 +0,0 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ -# -# This example demonstrates JIT compilation of CUDA kernels using NVRTC -# and the Driver API (saxpy kernel). -# -# ################################################################################ - -# /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] -# /// - -import ctypes - -import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import nvrtc - - -def assert_drv(err): - if isinstance(err, cuda.CUresult): - if err != cuda.CUresult.CUDA_SUCCESS: - raise RuntimeError(f"Cuda Error: {err}") - elif isinstance(err, nvrtc.nvrtcResult): - if err != nvrtc.nvrtcResult.NVRTC_SUCCESS: - raise RuntimeError(f"Nvrtc Error: {err}") - else: - raise RuntimeError(f"Unknown error type: {err}") - - -saxpy = """\ -extern "C" __global__ -void saxpy(float a, float *x, float *y, float *out, size_t n) -{ - size_t tid = blockIdx.x * blockDim.x + threadIdx.x; - if (tid < n) { - out[tid] = a * x[tid] + y[tid]; - } -} -""" - - -def main(): - # Init - (err,) = cuda.cuInit(0) - assert_drv(err) - - # Device - err, cu_device = cuda.cuDeviceGet(0) - assert_drv(err) - - # Ctx - err, context = cuda.cuCtxCreate(None, 0, cu_device) - assert_drv(err) - - # Create program - err, prog = nvrtc.nvrtcCreateProgram(str.encode(saxpy), b"saxpy.cu", 0, None, None) - assert_drv(err) - - # Get target architecture - err, major = cuda.cuDeviceGetAttribute( - cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cu_device - ) - assert_drv(err) - err, minor = cuda.cuDeviceGetAttribute( - cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cu_device - ) - assert_drv(err) - err, nvrtc_major, nvrtc_minor = nvrtc.nvrtcVersion() - assert_drv(err) - use_cubin = nvrtc_minor >= 1 - prefix = "sm" if use_cubin else "compute" - arch_arg = bytes(f"--gpu-architecture={prefix}_{major}{minor}", "ascii") - - # Compile program - opts = [b"--fmad=false", arch_arg] - (err,) = nvrtc.nvrtcCompileProgram(prog, len(opts), opts) - assert_drv(err) - - # Get log from compilation - err, log_size = nvrtc.nvrtcGetProgramLogSize(prog) - assert_drv(err) - log = b" " * log_size - (err,) = nvrtc.nvrtcGetProgramLog(prog, log) - assert_drv(err) - print(log.decode()) - - # Get data from compilation - if use_cubin: - err, data_size = nvrtc.nvrtcGetCUBINSize(prog) - assert_drv(err) - data = b" " * data_size - (err,) = nvrtc.nvrtcGetCUBIN(prog, data) - assert_drv(err) - else: - err, data_size = nvrtc.nvrtcGetPTXSize(prog) - assert_drv(err) - data = b" " * data_size - (err,) = nvrtc.nvrtcGetPTX(prog, data) - assert_drv(err) - - # Load data as module data and retrieve function - data = np.char.array(data) - err, module = cuda.cuModuleLoadData(data) - assert_drv(err) - err, kernel = cuda.cuModuleGetFunction(module, b"saxpy") - assert_drv(err) - - # Test the kernel - num_threads = 128 - num_blocks = 32 - - a = np.float32(2.0) - n = np.array(num_threads * num_blocks, dtype=np.uint32) - buffer_size = n * a.itemsize - - err, d_x = cuda.cuMemAlloc(buffer_size) - assert_drv(err) - err, d_y = cuda.cuMemAlloc(buffer_size) - assert_drv(err) - err, d_out = cuda.cuMemAlloc(buffer_size) - assert_drv(err) - - h_x = np.random.rand(n).astype(dtype=np.float32) - h_y = np.random.rand(n).astype(dtype=np.float32) - h_out = np.zeros(n).astype(dtype=np.float32) - - err, stream = cuda.cuStreamCreate(0) - assert_drv(err) - - (err,) = cuda.cuMemcpyHtoDAsync(d_x, h_x, buffer_size, stream) - assert_drv(err) - (err,) = cuda.cuMemcpyHtoDAsync(d_y, h_y, buffer_size, stream) - assert_drv(err) - - (err,) = cuda.cuStreamSynchronize(stream) - assert_drv(err) - - # Assert values are different before running kernel - h_z = a * h_x + h_y - if np.allclose(h_out, h_z): - raise ValueError("Error inside tolerence for host-device vectors") - - arg_values = (a, d_x, d_y, d_out, n) - arg_types = (ctypes.c_float, None, None, None, ctypes.c_size_t) - (err,) = cuda.cuLaunchKernel( - kernel, - num_blocks, - 1, - 1, # grid dim - num_threads, - 1, - 1, # block dim - 0, - stream, # shared mem and stream - (arg_values, arg_types), - 0, - ) # arguments - assert_drv(err) - - (err,) = cuda.cuMemcpyDtoHAsync(h_out, d_out, buffer_size, stream) - assert_drv(err) - (err,) = cuda.cuStreamSynchronize(stream) - assert_drv(err) - - # Assert values are same after running kernel - h_z = a * h_x + h_y - if not np.allclose(h_out, h_z): - raise ValueError("Error outside tolerence for host-device vectors") - - (err,) = cuda.cuStreamDestroy(stream) - assert_drv(err) - - (err,) = cuda.cuMemFree(d_x) - assert_drv(err) - (err,) = cuda.cuMemFree(d_y) - assert_drv(err) - (err,) = cuda.cuMemFree(d_out) - assert_drv(err) - - (err,) = cuda.cuModuleUnload(module) - assert_drv(err) - (err,) = cuda.cuCtxDestroy(context) - assert_drv(err) - - -if __name__ == "__main__": - main() diff --git a/cuda_bindings/tests/test_examples.py b/cuda_bindings/tests/test_examples.py deleted file mode 100644 index 0c3efe72811..00000000000 --- a/cuda_bindings/tests/test_examples.py +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -import glob -import os -import subprocess -import sys - -import pytest - -from cuda.bindings._test_helpers.pep723 import has_package_requirements_or_skip - -examples_path = os.path.join(os.path.dirname(__file__), "..", "examples") -examples_files = glob.glob(os.path.join(examples_path, "**/*.py"), recursive=True) - - -@pytest.mark.parametrize("example", examples_files) -def test_example(example): - has_package_requirements_or_skip(example) - - env = os.environ.copy() - env["CUDA_BINDINGS_SKIP_EXAMPLE"] = "100" - - process = subprocess.run([sys.executable, example], capture_output=True, env=env) # noqa: S603 - # returncode is a special value used in the examples to indicate that system requirements are not met. - if process.returncode == 100: - pytest.skip(process.stderr.decode(errors="replace").strip()) - elif process.returncode != 0: - if process.stdout: - print(process.stdout.decode(errors="replace")) - if process.stderr: - print(process.stderr.decode(errors="replace"), file=sys.stderr) - raise AssertionError(f"`{example}` failed ({process.returncode})") diff --git a/cuda_core/tests/example_tests/run_samples.py b/cuda_core/tests/example_tests/run_samples.py index 10ca54e8100..3bbe7e8e030 100644 --- a/cuda_core/tests/example_tests/run_samples.py +++ b/cuda_core/tests/example_tests/run_samples.py @@ -58,18 +58,29 @@ def _safe_print(*args: Any, **kwargs: Any) -> None: def discover_samples(samples_dir: Path) -> list[Path]: - """Return ``samples//.py`` for every sample directory. - - Only one Python entrypoint per sample is recognised, matching the - cuda-samples convention. The Utilities directory is excluded. + """Return every ``/.py`` sample entrypoint under ``samples_dir``. + + Samples can either sit directly under ``samples_dir`` + (``samples//.py``) or in a category subdirectory such as + ``samples/0_Introduction//.py``. The Utilities directory is + excluded at any level. Matching the cuda-samples convention, exactly one + Python entrypoint per sample directory is recognised (the one whose stem + matches the directory name). """ samples: list[Path] = [] - for sample_dir in sorted(samples_dir.iterdir()): - if not sample_dir.is_dir() or sample_dir.name == "Utilities": - continue - entry = sample_dir / f"{sample_dir.name}.py" - if entry.is_file(): - samples.append(entry) + + def walk(current: Path) -> None: + for child in sorted(current.iterdir()): + if not child.is_dir() or child.name == "Utilities": + continue + entry = child / f"{child.name}.py" + if entry.is_file(): + samples.append(entry) + else: + # Not a sample dir; treat it as a category and recurse. + walk(child) + + walk(samples_dir) return samples diff --git a/cuda_core/tests/example_tests/test_samples.py b/cuda_core/tests/example_tests/test_samples.py index ea2a961f5d5..e74e79dea39 100644 --- a/cuda_core/tests/example_tests/test_samples.py +++ b/cuda_core/tests/example_tests/test_samples.py @@ -28,13 +28,20 @@ ) -def _collect_samples() -> list[str]: +def _collect_samples() -> dict[str, object]: + """Return an ordered mapping of ``sample_name -> entry_path``. + + Sample names come from the leaf directory (e.g. ``clockNvrtc``); samples + may live either at the top of ``samples/`` or under a category + subdirectory such as ``samples/0_Introduction/``. + """ if not DEFAULT_SAMPLES_DIR.is_dir(): - return [] - return [s.parent.name for s in discover_samples(DEFAULT_SAMPLES_DIR)] + return {} + return {entry.parent.name: entry for entry in discover_samples(DEFAULT_SAMPLES_DIR)} -_SAMPLES = _collect_samples() +_ENTRIES = _collect_samples() +_SAMPLES = sorted(_ENTRIES) _CONFIG = load_config(DEFAULT_CONFIG) # Resolve GPU count once at collection time so we report the same skip reason # consistently across the parametrized test ids. @@ -49,9 +56,9 @@ def test_sample(sample_name: str) -> None: if _GPU_COUNT == 0: pytest.skip("No CUDA GPU detected on the test runner") - entry = DEFAULT_SAMPLES_DIR / sample_name / f"{sample_name}.py" - if not entry.is_file(): - pytest.fail(f"Sample entrypoint missing: {entry}") + entry = _ENTRIES.get(sample_name) + if entry is None or not entry.is_file(): + pytest.fail(f"Sample entrypoint missing: {sample_name}") plan = build_run_plan(entry, _CONFIG, _GPU_COUNT) result = run_sample(plan) diff --git a/pytest.ini b/pytest.ini index f99657dbafa..6f7f865122d 100644 --- a/pytest.ini +++ b/pytest.ini @@ -4,8 +4,6 @@ [pytest] addopts = --showlocals norecursedirs = - cuda_bindings/examples - cuda_core/examples samples testpaths = diff --git a/samples/0_Introduction/clockNvrtc/README.md b/samples/0_Introduction/clockNvrtc/README.md new file mode 100644 index 00000000000..5b1ea520fbc --- /dev/null +++ b/samples/0_Introduction/clockNvrtc/README.md @@ -0,0 +1,101 @@ +# Sample: Kernel Timing with device clock() (Python) + +## Description + +Time a reduction kernel using the CUDA device-side ``clock()`` intrinsic, +compiled at runtime with NVRTC and launched through the driver API in +``cuda.bindings``. + +Each thread block records the SM cycle counter at kernel entry and exit; +the host then reports the average cycles-per-block spent in the reduction. + +The sample simultaneously demonstrates **dynamic shared memory**: the +kernel declares ``extern __shared__ float shared[]`` and the host passes +the byte size at launch time via ``cuLaunchKernel``'s ``sharedMemBytes`` +argument (the 7th argument), so the actual size of the shared array is +determined at launch time rather than at compile time. + +Waives on 32-bit ARM (``armv7l``), where the sample isn't supported. + +## What You'll Learn + +- Reading the SM cycle counter from a kernel via the CUDA ``clock()`` intrinsic +- Sizing an ``extern __shared__`` array at launch time via ``sharedMemBytes`` +- The bare-metal driver-API launch flow: compile with NVRTC, get a + ``CUfunction``, call ``cuLaunchKernel`` +- Copying host / device buffers with ``cuMemAlloc`` / ``cuMemcpyHtoD`` / + ``cuMemcpyDtoH`` / ``cuMemFree`` + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - low-level driver / NVRTC bindings +- `numpy` - host-side input/output buffers + +## Key APIs + +### From `cuda.bindings.driver` + +- `cuMemAlloc` / `cuMemFree` - device memory alloc/free +- `cuMemcpyHtoD` / `cuMemcpyDtoH` - synchronous host/device copies +- `cuLaunchKernel(func, gx, gy, gz, bx, by, bz, sharedMemBytes, stream, args, extra)` - launch a kernel +- `cuCtxSynchronize` - wait for all outstanding device work + +### From `cuda_bindings_utils` (samples/Utilities/) + +- `KernelHelper(source, dev_id)` - compile a source string with NVRTC and load the module +- `check_cuda_errors(result)` - unwrap ``(status, *values)`` tuples returned by cuda.bindings +- `find_cuda_device()` - pick a device (honors ``--device=``) + +### Kernel-side + +- ``clock_t clock()`` - device-side SM cycle counter +- ``extern __shared__ float shared[]`` - dynamically-sized shared memory + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 5.0 or higher +- Not supported on ARMv7 + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python clockNvrtc.py +python clockNvrtc.py --device=1 # use a specific GPU +``` + +## Expected Output + +Cycle counts are hardware-dependent. + +``` +Average clocks/block = 8734.0 +Done +``` + +## Files + +- `clockNvrtc.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [CUDA C++ Programming Guide — Time Function](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#time-function) diff --git a/samples/0_Introduction/clockNvrtc/clockNvrtc.py b/samples/0_Introduction/clockNvrtc/clockNvrtc.py new file mode 100644 index 00000000000..71afa79e575 --- /dev/null +++ b/samples/0_Introduction/clockNvrtc/clockNvrtc.py @@ -0,0 +1,181 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +Kernel timing with the device clock() intrinsic and dynamic shared memory + +This sample uses the driver API through ``cuda.bindings`` to compile +(with NVRTC) and launch a reduction kernel that reads the SM cycle counter +via CUDA's device-side ``clock()`` intrinsic. Each block records the cycle +count at kernel entry and exit; the host then reports the average +cycles-per-block spent in the reduction. + +Two low-level techniques are demonstrated together: + + * **On-device timing** -- ``clock_t clock()`` is a SM-cycle register you + can read from a kernel. This gives you the on-device analogue of a host + CUDA event, useful for measuring kernel-internal work at the block level. + * **Dynamic shared memory** -- the kernel declares ``extern __shared__ + float shared[]`` and the host passes the byte size at launch time via + ``cuLaunchKernel``'s ``sharedMemBytes`` argument. + +Waives on 32-bit ARM (armv7l), where the sample isn't supported. +""" + +import platform +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met + + from cuda.bindings import driver as cuda +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +CLOCK_NVRTC_KERNEL = """\ +extern "C" __global__ void timedReduction(const float *hinput, float *output, clock_t *timer) +{ + // __shared__ float shared[2 * blockDim.x]; + extern __shared__ float shared[]; + + const int tid = threadIdx.x; + const int bid = blockIdx.x; + + if (tid == 0) timer[bid] = clock(); + + // Copy input. + shared[tid] = hinput[tid]; + shared[tid + blockDim.x] = hinput[tid + blockDim.x]; + + // Perform reduction to find minimum. + for (int d = blockDim.x; d > 0; d /= 2) + { + __syncthreads(); + + if (tid < d) + { + float f0 = shared[tid]; + float f1 = shared[tid + d]; + + if (f1 < f0) + { + shared[tid] = f1; + } + } + } + + // Write result. + if (tid == 0) output[bid] = shared[0]; + + __syncthreads(); + + if (tid == 0) timer[bid + gridDim.x] = clock(); +} +""" + + +NUM_BLOCKS = 64 +NUM_THREADS = 256 + + +def _elems_to_bytes(nelems, dtype): + return nelems * np.dtype(dtype).itemsize + + +def _check_requirements(): + if platform.machine() == "armv7l": + requirement_not_met("clockNvrtc is not supported on ARMv7") + + +def main(): + _check_requirements() + + timer = np.empty(NUM_BLOCKS * 2, dtype="int64") + hinput = np.empty(NUM_THREADS * 2, dtype="float32") + + for i in range(NUM_THREADS * 2): + hinput[i] = i + + dev_id = find_cuda_device() + kernel_helper = KernelHelper(CLOCK_NVRTC_KERNEL, dev_id) + kernel_addr = kernel_helper.get_function(b"timedReduction") + + dinput = check_cuda_errors(cuda.cuMemAlloc(hinput.nbytes)) + doutput = check_cuda_errors(cuda.cuMemAlloc(_elems_to_bytes(NUM_BLOCKS, np.float32))) + dtimer = check_cuda_errors(cuda.cuMemAlloc(timer.nbytes)) + check_cuda_errors(cuda.cuMemcpyHtoD(dinput, hinput, hinput.nbytes)) + + args = ((dinput, doutput, dtimer), (None, None, None)) + shared_memory_nbytes = _elems_to_bytes(2 * NUM_THREADS, np.float32) + + grid_dims = (NUM_BLOCKS, 1, 1) + block_dims = (NUM_THREADS, 1, 1) + + # Pass shared_memory_nbytes so the kernel's extern __shared__ array is + # allocated at launch time. Zero is the default (no dynamic shmem). + check_cuda_errors( + cuda.cuLaunchKernel( + kernel_addr, + *grid_dims, + *block_dims, + shared_memory_nbytes, + 0, # stream + args, + 0, + ) + ) + + check_cuda_errors(cuda.cuCtxSynchronize()) + check_cuda_errors(cuda.cuMemcpyDtoH(timer, dtimer, timer.nbytes)) + check_cuda_errors(cuda.cuMemFree(dinput)) + check_cuda_errors(cuda.cuMemFree(doutput)) + check_cuda_errors(cuda.cuMemFree(dtimer)) + + avg_elapsed_clocks = 0.0 + for i in range(NUM_BLOCKS): + avg_elapsed_clocks += timer[i + NUM_BLOCKS] - timer[i] + + avg_elapsed_clocks = avg_elapsed_clocks / NUM_BLOCKS + print(f"Average clocks/block = {avg_elapsed_clocks}") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/0_Introduction/clockNvrtc/requirements.txt b/samples/0_Introduction/clockNvrtc/requirements.txt new file mode 100644 index 00000000000..a665972eaca --- /dev/null +++ b/samples/0_Introduction/clockNvrtc/requirements.txt @@ -0,0 +1,5 @@ +# clockNvrtc Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/0_Introduction/simpleCubemapTexture/README.md b/samples/0_Introduction/simpleCubemapTexture/README.md new file mode 100644 index 00000000000..7f3f3472de9 --- /dev/null +++ b/samples/0_Introduction/simpleCubemapTexture/README.md @@ -0,0 +1,108 @@ +# Sample: Cubemap Textures (Python) + +## Description + +Creates a cubemap ``cudaArray`` (six 2D faces glued together), wraps it as +a bindless ``cudaTextureObject_t``, and samples it from a kernel using the +``texCubemap(tex, cx, cy, cz)`` intrinsic. Also demonstrates 3D +memory transfers with ``cudaMemcpy3DParms`` and ``cudaMemcpy3D``. + +This is currently the only sample in ``/samples`` that teaches CUDA +texture objects, cubemap arrays, or ``cudaMemcpy3D``. + +The kernel walks all 6 cubemap faces, converts each pixel to a 3D +direction vector for that face, samples the cubemap, negates the result, +and writes it to global memory. Verification compares against a NumPy +reference on the host. + +## What You'll Learn + +- Allocating a cubemap ``cudaArray`` via ``cudaMalloc3DArray`` with the + ``cudaArrayCubemap`` flag +- Populating a 3D destination with ``cudaMemcpy3DParms`` + ``cudaMemcpy3D`` +- Building a bindless texture object with ``cudaResourceDesc`` + + ``cudaTextureDesc`` + ``cudaCreateTextureObject`` +- Setting texture parameters: normalized coordinates, linear filtering, + wrap addressing (per axis) +- Sampling a cubemap face from a kernel with + ``texCubemap(tex, cx, cy, cz)`` +- Tearing down texture / array / device memory resources cleanly + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - runtime + driver bindings +- `numpy` - input generation and host-side reference + +## Key APIs + +### From `cuda.bindings.runtime` + +- `cudaMalloc` / `cudaFree` +- `cudaMalloc3DArray(..., cudaArrayCubemap)` / `cudaFreeArray` +- `cudaCreateChannelDesc` +- `cudaMemcpy3DParms`, `cudaMemcpy3D` +- `make_cudaPos`, `make_cudaExtent`, `make_cudaPitchedPtr` +- `cudaResourceDesc`, `cudaTextureDesc` +- `cudaCreateTextureObject` / `cudaDestroyTextureObject` +- `cudaMemcpy`, `cudaDeviceSynchronize`, `cudaGetDeviceProperties` + +### From `cuda.bindings.driver` + +- `cuLaunchKernel` + +### Kernel-side + +- `texCubemap(cudaTextureObject_t, float, float, float)` + +## Requirements + +### Hardware + +- NVIDIA GPU with SM 2.0 or higher (all Kepler-and-later cards) + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python simpleCubemapTexture.py +python simpleCubemapTexture.py --device=1 # use a specific GPU +``` + +## Expected Output + +Throughput depends on GPU. + +``` +CUDA device [NVIDIA GeForce RTX 4090] has 128 Multi-Processors SM 8.9 +Covering Cubemap data array of 64^3 x 1: Grid size is 8 x 8, each block has 8 x 8 threads +Processing time: 0.041 msec +595.35 Mtexlookups/sec +Verification PASSED (max error 0.000e+00) +Done +``` + +## Files + +- `simpleCubemapTexture.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` runtime API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/runtime.html) +- [CUDA C++ Programming Guide — Texture Object API](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#texture-object-api) +- [CUDA C++ Programming Guide — Cubemap Textures](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cubemap-textures) diff --git a/samples/0_Introduction/simpleCubemapTexture/requirements.txt b/samples/0_Introduction/simpleCubemapTexture/requirements.txt new file mode 100644 index 00000000000..31bf46497aa --- /dev/null +++ b/samples/0_Introduction/simpleCubemapTexture/requirements.txt @@ -0,0 +1,5 @@ +# simpleCubemapTexture Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py b/samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py new file mode 100644 index 00000000000..97df2f6493a --- /dev/null +++ b/samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py @@ -0,0 +1,240 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +Cubemap textures and 3D memcpy with cuda.bindings + +Creates a cubemap ``cudaArray`` (six 2D faces), wraps it as a bindless +``cudaTextureObject_t``, and samples it from a kernel via +``texCubemap(tex, cx, cy, cz)``. + +Also demonstrates 3D memory transfers with ``cudaMemcpy3DParms`` and +``cudaMemcpy3D``, and the CUDA texture descriptor knobs +(``cudaTextureDesc``: normalized coords, linear filter, wrap addressing). + +This is currently the only sample in ``/samples`` that teaches CUDA +texture objects, cubemap arrays, or ``cudaMemcpy3D``. +""" + +import ctypes +import sys +import time +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met + + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +CUBEMAP_KERNEL = """\ +extern "C" +__global__ void transformKernel(float *g_odata, int width, cudaTextureObject_t tex) +{ + // calculate this thread's data point + unsigned int x = blockIdx.x*blockDim.x + threadIdx.x; + unsigned int y = blockIdx.y*blockDim.y + threadIdx.y; + + // 0.5f offset and division are necessary to access the original data points + // in the texture (such that bilinear interpolation will not be activated). + // For details, see also CUDA Programming Guide, Appendix D + float u = ((x+0.5f) / (float) width) * 2.f - 1.f; + float v = ((y+0.5f) / (float) width) * 2.f - 1.f; + + float cx, cy, cz; + for (unsigned int face = 0; face < 6; face ++) + { + // Direction vectors per cubemap face + if (face == 0) { cx = 1; cy = -v; cz = -u; } // +X + else if (face == 1) { cx = -1; cy = -v; cz = u; } // -X + else if (face == 2) { cx = u; cy = 1; cz = v; } // +Y + else if (face == 3) { cx = u; cy = -1; cz = -v; } // -Y + else if (face == 4) { cx = u; cy = -v; cz = 1; } // +Z + else if (face == 5) { cx = -u; cy = -v; cz = -1; } // -Z + + // Sample the cubemap face, negate, and write to global memory. + g_odata[face*width*width + y*width + x] = -texCubemap(tex, cx, cy, cz); + } +} +""" + + +def main(): + dev_id = find_cuda_device() + + device_props = check_cuda_errors(cudart.cudaGetDeviceProperties(dev_id)) + print( + f"CUDA device [{device_props.name}] has {device_props.multiProcessorCount} " + f"Multi-Processors SM {device_props.major}.{device_props.minor}" + ) + if device_props.major < 2: + requirement_not_met("Requires SM 2.0 or higher for texture array support") + + # ---- Generate input data for the cubemap texture ---- + width = 64 + num_faces = 6 + num_layers = 1 + cubemap_size = width * width * num_faces + h_data = np.arange(cubemap_size * num_layers, dtype="float32") + size = h_data.nbytes + + # Expected: kernel negates the sampled values, so output = layer_index - h_data. + h_data_ref = np.repeat(np.arange(num_layers, dtype=h_data.dtype), cubemap_size) - h_data + + # ---- Allocate device output ---- + d_data = check_cuda_errors(cudart.cudaMalloc(size)) + + # ---- Allocate a cubemap cudaArray and copy the source into it via cudaMemcpy3D ---- + channel_desc = check_cuda_errors( + cudart.cudaCreateChannelDesc(32, 0, 0, 0, cudart.cudaChannelFormatKind.cudaChannelFormatKindFloat) + ) + cu_3darray = check_cuda_errors( + cudart.cudaMalloc3DArray( + channel_desc, + cudart.make_cudaExtent(width, width, num_faces), + cudart.cudaArrayCubemap, + ) + ) + width_nbytes = h_data[:width].nbytes + memcpy_params = cudart.cudaMemcpy3DParms() + memcpy_params.srcPos = cudart.make_cudaPos(0, 0, 0) + memcpy_params.dstPos = cudart.make_cudaPos(0, 0, 0) + memcpy_params.srcPtr = cudart.make_cudaPitchedPtr(h_data, width_nbytes, width, width) + memcpy_params.dstArray = cu_3darray + memcpy_params.extent = cudart.make_cudaExtent(width, width, num_faces) + memcpy_params.kind = cudart.cudaMemcpyKind.cudaMemcpyHostToDevice + check_cuda_errors(cudart.cudaMemcpy3D(memcpy_params)) + + # ---- Build the texture object over the cudaArray ---- + tex_res = cudart.cudaResourceDesc() + tex_res.resType = cudart.cudaResourceType.cudaResourceTypeArray + tex_res.res.array.array = cu_3darray + + tex_descr = cudart.cudaTextureDesc() + tex_descr.normalizedCoords = True + tex_descr.filterMode = cudart.cudaTextureFilterMode.cudaFilterModeLinear + tex_descr.addressMode[0] = cudart.cudaTextureAddressMode.cudaAddressModeWrap + tex_descr.addressMode[1] = cudart.cudaTextureAddressMode.cudaAddressModeWrap + tex_descr.addressMode[2] = cudart.cudaTextureAddressMode.cudaAddressModeWrap + tex_descr.readMode = cudart.cudaTextureReadMode.cudaReadModeElementType + + tex = check_cuda_errors(cudart.cudaCreateTextureObject(tex_res, tex_descr, None)) + + # ---- Launch config: one thread per texel per face ---- + dim_block = cudart.dim3() + dim_block.x = 8 + dim_block.y = 8 + dim_block.z = 1 + dim_grid = cudart.dim3() + dim_grid.x = width // dim_block.x + dim_grid.y = width // dim_block.y + dim_grid.z = 1 + + print( + f"Covering Cubemap data array of {width}^3 x {num_layers}: " + f"Grid size is {dim_grid.x} x {dim_grid.y}, each block has 8 x 8 threads" + ) + + kernel_helper = KernelHelper(CUBEMAP_KERNEL, dev_id) + transform_kernel = kernel_helper.get_function(b"transformKernel") + kernel_args = ((d_data, width, tex), (ctypes.c_void_p, ctypes.c_int, None)) + + # Warm-up launch. + check_cuda_errors( + cuda.cuLaunchKernel( + transform_kernel, + dim_grid.x, + dim_grid.y, + dim_grid.z, + dim_block.x, + dim_block.y, + dim_block.z, + 0, + 0, + kernel_args, + 0, + ) + ) + check_cuda_errors(cudart.cudaDeviceSynchronize()) + + # Timed launch. + start = time.time() + check_cuda_errors( + cuda.cuLaunchKernel( + transform_kernel, + dim_grid.x, + dim_grid.y, + dim_grid.z, + dim_block.x, + dim_block.y, + dim_block.z, + 0, + 0, + kernel_args, + 0, + ) + ) + check_cuda_errors(cudart.cudaDeviceSynchronize()) + stop = time.time() + print(f"Processing time: {(stop - start) * 1000:.3f} msec") + if stop > start: + print(f"{cubemap_size / (stop - start) / 1e6:.2f} Mtexlookups/sec") + + # ---- Copy result back and verify ---- + h_odata = np.empty_like(h_data) + check_cuda_errors(cudart.cudaMemcpy(h_odata, d_data, size, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost)) + + check_cuda_errors(cudart.cudaDestroyTextureObject(tex)) + check_cuda_errors(cudart.cudaFree(d_data)) + check_cuda_errors(cudart.cudaFreeArray(cu_3darray)) + + min_epsilon_error = 5.0e-3 + max_err = float(np.max(np.abs(h_odata - h_data_ref))) + if max_err > min_epsilon_error: + print(f"Verification FAILED (max error {max_err})", file=sys.stderr) + return 1 + + print(f"Verification PASSED (max error {max_err:.3e})") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/0_Introduction/systemWideAtomics/README.md b/samples/0_Introduction/systemWideAtomics/README.md new file mode 100644 index 00000000000..979aa578916 --- /dev/null +++ b/samples/0_Introduction/systemWideAtomics/README.md @@ -0,0 +1,117 @@ +# Sample: System-wide Atomics on Managed Memory (Python) + +## Description + +Exercises the full ``*_system`` atomic API surface on ``cudaMallocManaged`` +memory, which is coherently accessible from both the CPU and the GPU: + +- `atomicAdd_system` +- `atomicExch_system` +- `atomicMax_system` / `atomicMin_system` +- `atomicInc_system` / `atomicDec_system` +- `atomicCAS_system` +- `atomicAnd_system` / `atomicOr_system` / `atomicXor_system` + +The kernel spins over `LOOP_NUM` iterations per thread, applying each +operation against a 10-element shared array. The host then runs the +equivalent scalar reference computation and verifies every slot. + +This is the only sample in `/samples` that teaches **system-wide** atomic +operations (as opposed to device-scope ones like the histogram sample) or +the full atomic surface (Exch / Min / Max / Inc / Dec / CAS / And / Or / Xor). + +Waives with exit code 2 when: + +- running on Windows (system-scope atomics on managed memory aren't + supported for this flavor there), or +- the device does not report Unified Memory support, or +- compute mode is prohibited, or +- Compute Capability is below 6.0 (minimum for these intrinsics). + +## What You'll Learn + +- Using every `atomic*_system` intrinsic in a single kernel +- Managed memory basics: coherent host / device access without explicit copies +- The two paths for host-visible memory in NVML-modern drivers: + - Passing a pageable host allocation directly when + `pageableMemoryAccess=True` is reported on the device + - Falling back to `cudaMallocManaged` on hardware without pageable access +- Guarding a sample on compute capability, compute mode, and platform + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - dtype sizes and array plumbing + +## Key APIs + +### From `cuda.bindings.runtime` + +- `cudaGetDeviceProperties` (for `managedMemory`, `pageableMemoryAccess`, `major`) +- `cudaDeviceGetAttribute` (for compute mode) +- `cudaMallocManaged` / `cudaFree` +- `cudaDeviceSynchronize` +- `cudaMemAttachGlobal` + +### From `cuda.bindings.driver` + +- `cuLaunchKernel` +- `CU_STREAM_LEGACY` + +### Kernel-side + +- `atomicAdd_system`, `atomicExch_system`, `atomicMax_system`, + `atomicMin_system`, `atomicInc_system`, `atomicDec_system`, + `atomicCAS_system`, `atomicAnd_system`, `atomicOr_system`, + `atomicXor_system` + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 6.0 or higher and Unified Memory support + +### Software + +- Linux (system-scope atomics on managed memory are not supported on Windows here) +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python systemWideAtomics.py +python systemWideAtomics.py --device=1 # use a specific GPU +``` + +## Expected Output + +``` +CAN access pageable memory +systemWideAtomics: all 10 system-scope atomic operations verified +Done +``` + +(Or `CANNOT access pageable memory` on hardware that falls back to +`cudaMallocManaged`.) + +## Files + +- `systemWideAtomics.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [CUDA C++ Programming Guide — Atomic Functions](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#atomic-functions) +- [Scope of Atomic Operations](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#scope-of-atomic-operations) diff --git a/samples/0_Introduction/systemWideAtomics/requirements.txt b/samples/0_Introduction/systemWideAtomics/requirements.txt new file mode 100644 index 00000000000..27651a51926 --- /dev/null +++ b/samples/0_Introduction/systemWideAtomics/requirements.txt @@ -0,0 +1,5 @@ +# systemWideAtomics Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/0_Introduction/systemWideAtomics/systemWideAtomics.py b/samples/0_Introduction/systemWideAtomics/systemWideAtomics.py new file mode 100644 index 00000000000..4205337ed33 --- /dev/null +++ b/samples/0_Introduction/systemWideAtomics/systemWideAtomics.py @@ -0,0 +1,254 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +System-wide atomics on managed (unified) memory + +Exercises the full ``*_system`` atomic API surface on ``cudaMallocManaged`` +memory, which is coherently accessible from both the CPU and the GPU: + + atomicAdd_system, atomicExch_system, atomicMax_system, atomicMin_system, + atomicInc_system, atomicDec_system, atomicCAS_system, + atomicAnd_system, atomicOr_system, atomicXor_system + +The kernel spins over ``LOOP_NUM`` iterations per thread, applying each +atomic against a 10-element shared array in managed memory. After the +kernel completes, the host runs the equivalent scalar reference and +verifies every slot. + +Waives with exit code 2 when: + + * running on Windows (system-scope atomics aren't supported there for + this managed-memory flavor), or + * the device does not report Unified Memory support, or + * compute mode is prohibited, or + * compute capability is below 6.0 (the minimum for these intrinsics). +""" + +import ctypes +import os +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met + + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +LOOP_NUM = 50 + + +SYSTEM_WIDE_ATOMICS_KERNEL = """\ +#define LOOP_NUM 50 + +extern "C" +__global__ void atomicKernel(int *atom_arr) { + unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x; + + for (int i = 0; i < LOOP_NUM; i++) { + atomicAdd_system (&atom_arr[0], 10); + atomicExch_system(&atom_arr[1], tid); + atomicMax_system (&atom_arr[2], tid); + atomicMin_system (&atom_arr[3], tid); + atomicInc_system ((unsigned int *)&atom_arr[4], 17); + atomicDec_system ((unsigned int *)&atom_arr[5], 137); + atomicCAS_system (&atom_arr[6], tid - 1, tid); + + // Bitwise atomic instructions + atomicAnd_system(&atom_arr[7], 2 * tid + 7); + atomicOr_system (&atom_arr[8], 1 << tid); + atomicXor_system(&atom_arr[9], tid); + } +} +""" + + +def _verify(test_data, length): + """Host reference computation, one atomic at a time.""" + # atomicAdd + val = 10 * length * LOOP_NUM + if val != test_data[0]: + print(f"atomicAdd failed val={val} test_data={test_data[0]}") + return False + + # atomicExch: some tid in [0, length) + if not (0 <= test_data[1] < length): + print("atomicExch failed") + return False + + # atomicMax: length - 1 + if length - 1 != test_data[2]: + print("atomicMax failed") + return False + + # atomicMin: 0 + if test_data[3] != 0: + print("atomicMin failed") + return False + + # atomicInc modulo 17 + limit = 17 + val = 0 + for _ in range(length * LOOP_NUM): + val = 0 if val >= limit else val + 1 + if val != test_data[4]: + print("atomicInc failed") + return False + + # atomicDec modulo 137 + limit = 137 + val = 0 + for _ in range(length * LOOP_NUM): + val = limit if (val == 0) or (val > limit) else val - 1 + if val != test_data[5]: + print("atomicDec failed") + return False + + # atomicCAS: some tid in [0, length) + if not (0 <= test_data[6] < length): + print("atomicCAS failed") + return False + + # atomicAnd against 0xff + val = 0xFF + for i in range(length): + val &= 2 * i + 7 + if val != test_data[7]: + print("atomicAnd failed") + return False + + # atomicOr: filled with 1s + if test_data[8] != -1: + print("atomicOr failed") + return False + + # atomicXor against 0xff + val = 0xFF + for i in range(length): + val ^= i + if val != test_data[9]: + print("atomicXor failed") + return False + + return True + + +def main(): + if os.name == "nt": + requirement_not_met("System-wide atomics on managed memory are not supported on Windows") + + dev_id = find_cuda_device() + device_prop = check_cuda_errors(cudart.cudaGetDeviceProperties(dev_id)) + + if not device_prop.managedMemory: + requirement_not_met("Unified Memory not supported on this device") + + compute_mode = check_cuda_errors( + cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeMode, dev_id) + ) + if compute_mode == cudart.cudaComputeMode.cudaComputeModeProhibited: + requirement_not_met("This sample requires a device in either default or process-exclusive compute mode") + + if device_prop.major < 6: + requirement_not_met("Requires a minimum CUDA compute capability 6.0") + + num_threads = 256 + num_blocks = 64 + num_data = 10 + + # Prefer pageable memory when the driver supports it; otherwise fall back + # to explicit cudaMallocManaged. Either way we hand the kernel a plain + # int* whose contents are coherently visible from both the host and the + # device. + if device_prop.pageableMemoryAccess: + print("CAN access pageable memory") + atom_arr_h = (ctypes.c_int * num_data)(0) + atom_arr = ctypes.addressof(atom_arr_h) + else: + print("CANNOT access pageable memory") + atom_arr = check_cuda_errors( + cudart.cudaMallocManaged(np.dtype(np.int32).itemsize * num_data, cudart.cudaMemAttachGlobal) + ) + atom_arr_h = (ctypes.c_int * num_data).from_address(atom_arr) + + for i in range(num_data): + atom_arr_h[i] = 0 + + # Prime the AND / XOR seats with 0xff so the operations produce something + # other than zero and are easy to verify against a reference. + atom_arr_h[7] = atom_arr_h[9] = 0xFF + + kernel_helper = KernelHelper(SYSTEM_WIDE_ATOMICS_KERNEL, dev_id) + atomic_kernel = kernel_helper.get_function(b"atomicKernel") + kernel_args = ((atom_arr,), (ctypes.c_void_p,)) + check_cuda_errors( + cuda.cuLaunchKernel( + atomic_kernel, + num_blocks, + 1, + 1, # grid dim + num_threads, + 1, + 1, # block dim + 0, + cuda.CU_STREAM_LEGACY, + kernel_args, + 0, + ) + ) + check_cuda_errors(cudart.cudaDeviceSynchronize()) + + ok = _verify(atom_arr_h, num_threads * num_blocks) + + if not device_prop.pageableMemoryAccess: + check_cuda_errors(cudart.cudaFree(atom_arr)) + + if not ok: + print("systemWideAtomics completed with errors", file=sys.stderr) + return 1 + + print("systemWideAtomics: all 10 system-scope atomic operations verified") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/0_Introduction/vectorAddDriverApi/README.md b/samples/0_Introduction/vectorAddDriverApi/README.md new file mode 100644 index 00000000000..f1fb387d40f --- /dev/null +++ b/samples/0_Introduction/vectorAddDriverApi/README.md @@ -0,0 +1,102 @@ +# Sample: Vector Add via Driver API (Python) + +## Description + +The "hello world" of the raw CUDA Driver API in Python. Compute `C = A + B` +element-wise on the GPU using ``cuda.bindings.driver`` end-to-end: + +``` +cuInit -> cuDeviceGet -> cuCtxCreate + -> NVRTC compile + cuModuleLoadData + cuModuleGetFunction + -> cuMemAlloc -> cuMemcpyHtoD -> cuLaunchKernel -> cuMemcpyDtoH -> cuMemFree + -> cuCtxDestroy +``` + +This is the low-level equivalent of the higher-level +[`samples/vectorAdd/`](../../vectorAdd/) sample, which does the same +computation with the ``cuda.core`` API. Both are useful: + +- Use ``samples/vectorAdd/`` when you want an idiomatic, Pythonic launch. +- Use this sample to understand what those higher-level abstractions do + under the hood, or when you need direct control over the driver API + (custom contexts, explicit stream/module lifetime, etc.). + +The sample also queries ``CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING`` and +waives with exit code 2 when the device does not support UVA (a +prerequisite for most driver-API patterns). + +## What You'll Learn + +- The full raw driver-API launch flow (`cuInit` through `cuCtxDestroy`) +- Explicit CUDA context management with `cuCtxCreate` / `cuCtxDestroy` +- Compiling a kernel string at runtime with NVRTC via `KernelHelper` +- Querying a device attribute (`cuDeviceGetAttribute`) +- Passing kernel arguments to `cuLaunchKernel` as a ``(values, ctypes)`` pair + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - low-level driver / NVRTC bindings +- `numpy` - host-side input/output buffers + +## Key APIs + +### From `cuda.bindings.driver` + +- `cuInit` / `cuDeviceGet` / `cuDeviceGetAttribute` +- `cuCtxCreate` / `cuCtxDestroy` +- `cuMemAlloc` / `cuMemFree` / `cuMemcpyHtoD` / `cuMemcpyDtoH` +- `cuLaunchKernel` +- `CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING` + +### From `cuda_bindings_utils` (samples/Utilities/) + +- `KernelHelper(source, dev_id)` - NVRTC compile + load +- `check_cuda_errors(result)` - unwrap `(status, *values)` tuples +- `find_cuda_device_drv()` - pick a device (honors ``--device=``) + +## Requirements + +### Hardware + +- NVIDIA GPU with UVA support (all discrete NVIDIA GPUs since Kepler) + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python vectorAddDriverApi.py +python vectorAddDriverApi.py --device=1 # use a specific GPU +``` + +## Expected Output + +``` +Result = PASS (max error 0.000e+00 over 50000 elements) +Done +``` + +## Files + +- `vectorAddDriverApi.py` - Python implementation using `cuda.bindings.driver` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [`samples/vectorAdd/`](../../vectorAdd/) - the high-level `cuda.core` equivalent +- [CUDA Driver API Reference](https://docs.nvidia.com/cuda/cuda-driver-api/index.html) diff --git a/samples/0_Introduction/vectorAddDriverApi/requirements.txt b/samples/0_Introduction/vectorAddDriverApi/requirements.txt new file mode 100644 index 00000000000..308b082f2da --- /dev/null +++ b/samples/0_Introduction/vectorAddDriverApi/requirements.txt @@ -0,0 +1,5 @@ +# vectorAddDriverApi Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py b/samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py new file mode 100644 index 00000000000..8f162ec4d6c --- /dev/null +++ b/samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py @@ -0,0 +1,166 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +Vector addition with the raw CUDA Driver API + +The canonical "hello world" for ``cuda.bindings.driver``. This is the same +element-wise ``C = A + B`` computation shown in the top-level +``samples/vectorAdd/`` sample, but implemented at the driver-API layer: + + * ``cuInit`` -> ``cuDeviceGet`` -> ``cuCtxCreate`` (explicit context) + * ``cuMemAlloc`` / ``cuMemcpyHtoD`` / ``cuMemcpyDtoH`` / ``cuMemFree`` + * ``cuLaunchKernel`` with an explicit ``sharedMemBytes`` and ``stream`` + +The kernel is compiled at runtime through NVRTC and loaded as a +``CUmodule``. The sample also verifies that the selected device advertises +Unified Virtual Addressing (UVA) -- the driver-API property that lets host +pointers and device pointers share the same address space, which the newer +runtime APIs assume. + +Waives with exit code 2 when the device does not support UVA. +""" + +import ctypes +import math +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device_drv, requirement_not_met + + from cuda.bindings import driver as cuda +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +VECTOR_ADD_DRV_KERNEL = """\ +/* Vector addition: C = A + B. + * + * This sample is a very basic sample that implements element by element + * vector addition. It is the same as the sample illustrating Chapter 3 + * of the programming guide with some additions like error checking. + */ + +extern "C" __global__ void VecAdd_kernel(const float *A, const float *B, float *C, int N) +{ + int i = blockDim.x * blockIdx.x + threadIdx.x; + + if (i < N) + C[i] = A[i] + B[i]; +} +""" + + +def main(): + n = 50000 + nbytes = n * np.dtype(np.float32).itemsize + + # ---- 1) Initialize the driver + create an explicit context ---- + check_cuda_errors(cuda.cuInit(0)) + cu_device = find_cuda_device_drv() + cu_context = check_cuda_errors(cuda.cuCtxCreate(None, 0, cu_device)) + + # UVA gives host + device pointers a single virtual address space -- most + # modern driver-API patterns implicitly assume this. + uva_supported = check_cuda_errors( + cuda.cuDeviceGetAttribute(cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING, cu_device) + ) + if not uva_supported: + requirement_not_met("This sample requires Unified Virtual Addressing (UVA) support") + + # ---- 2) Compile and load the kernel ---- + kernel_helper = KernelHelper(VECTOR_ADD_DRV_KERNEL, int(cu_device)) + vec_add_kernel = kernel_helper.get_function(b"VecAdd_kernel") + + # ---- 3) Allocate host + device buffers, copy H2D ---- + h_a = np.random.rand(n).astype(dtype=np.float32) + h_b = np.random.rand(n).astype(dtype=np.float32) + h_c = np.zeros(n, dtype=np.float32) + + d_a = check_cuda_errors(cuda.cuMemAlloc(nbytes)) + d_b = check_cuda_errors(cuda.cuMemAlloc(nbytes)) + d_c = check_cuda_errors(cuda.cuMemAlloc(nbytes)) + + check_cuda_errors(cuda.cuMemcpyHtoD(d_a, h_a, nbytes)) + check_cuda_errors(cuda.cuMemcpyHtoD(d_b, h_b, nbytes)) + + # ---- 4) Launch ---- + threads_per_block = 256 + blocks_per_grid = (n + threads_per_block - 1) // threads_per_block + + kernel_args = ((d_a, d_b, d_c, n), (None, None, None, ctypes.c_int)) + check_cuda_errors( + cuda.cuLaunchKernel( + vec_add_kernel, + blocks_per_grid, + 1, + 1, # grid dim + threads_per_block, + 1, + 1, # block dim + 0, # sharedMemBytes + 0, # stream + kernel_args, + 0, + ) + ) + + # ---- 5) Copy D2H and verify ---- + check_cuda_errors(cuda.cuMemcpyDtoH(h_c, d_c, nbytes)) + + max_err = 0.0 + for i in range(n): + max_err = max(max_err, math.fabs(h_c[i] - (h_a[i] + h_b[i]))) + + # ---- 6) Free device memory and destroy context ---- + check_cuda_errors(cuda.cuMemFree(d_a)) + check_cuda_errors(cuda.cuMemFree(d_b)) + check_cuda_errors(cuda.cuMemFree(d_c)) + check_cuda_errors(cuda.cuCtxDestroy(cu_context)) + + if max_err > 1e-5: + print(f"Result = FAIL (max error {max_err})", file=sys.stderr) + return 1 + + print(f"Result = PASS (max error {max_err:.3e} over {n} elements)") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/0_Introduction/vectorAddMmap/README.md b/samples/0_Introduction/vectorAddMmap/README.md new file mode 100644 index 00000000000..7c68ff28354 --- /dev/null +++ b/samples/0_Introduction/vectorAddMmap/README.md @@ -0,0 +1,114 @@ +# Sample: Vector Add via Virtual Memory Management (Python) + +## Description + +Vector add ``C = A + B``, but each device buffer is built by hand out of +per-device physical backings stitched into a single contiguous virtual +address range. This is the only sample in ``/samples`` that teaches the +CUDA Virtual Memory Management (VMM) API. + +The core VMM flow: + +``` +cuMemAddressReserve reserve a chunk of virtual address space +cuMemGetAllocationGranularity query alignment requirements +cuMemCreate create a physical backing on a specific device +cuMemMap map the backing into the reserved VA range +cuMemSetAccess grant read/write access to the mapping device(s) +cuMemUnmap unmap the VA range +cuMemAddressFree release the VA range back to the OS +cuMemRelease release the physical handle +``` + +The allocation is **striped across all peer-capable devices** that also +support VMM ("backing devices"). It's accessed by a single mapping device +(the current device) via ``cuMemSetAccess``. This is the pattern to reach +for when you want NUMA-aware placement across a multi-GPU machine, or when +you need explicit control over which device physically owns each byte. + +Waives on macOS, on 32-bit / aarch64 / sbsa configurations that don't +support VMM, and on devices that don't report +``VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED``. + +## What You'll Learn + +- Reserving virtual address space with `cuMemAddressReserve` +- Querying granularity with `cuMemGetAllocationGranularity` +- Creating physical backings with `cuMemCreate` and releasing the handle + after mapping +- Mapping backings into a VA range with `cuMemMap` (contiguous virtual, + discontiguous physical) +- Configuring access via `cuMemAccessDesc` + `cuMemSetAccess` +- Tearing down VMM allocations cleanly: `cuMemUnmap` + + `cuMemAddressFree` +- Detecting peer capability with `cuDeviceCanAccessPeer` for striping + across devices + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver bindings +- `numpy` - host arrays + +## Key APIs + +### From `cuda.bindings.driver` + +- `cuMemAddressReserve` / `cuMemAddressFree` +- `cuMemCreate` / `cuMemRelease` +- `cuMemMap` / `cuMemUnmap` +- `cuMemGetAllocationGranularity` +- `cuMemSetAccess` +- `CUmemAllocationProp`, `CUmemLocationType`, `CUmemAllocationType` +- `CUmemAccessDesc`, `CUmemAccess_flags`, `CUmemAllocationGranularity_flags` +- `cuDeviceCanAccessPeer` +- `CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED` + +## Requirements + +### Hardware + +- NVIDIA GPU that reports + `CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED = 1` + (Pascal-and-newer discrete GPUs on Linux x86-64 and Windows) + +### Software + +- Linux x86-64 or Windows (not supported on macOS, ARMv7, aarch64, or sbsa) +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python vectorAddMmap.py +python vectorAddMmap.py --device=1 +``` + +## Expected Output + +``` +Device 0 VIRTUAL ADDRESS MANAGEMENT SUPPORTED = 1. +Result = PASS (max error 0.000e+00 over 50000 elements, striped across 2 device(s)) +Done +``` + +## Files + +- `vectorAddMmap.py` - Python implementation using `cuda.bindings.driver` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [CUDA Driver API — Virtual Memory Management](https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__VA.html) diff --git a/samples/0_Introduction/vectorAddMmap/requirements.txt b/samples/0_Introduction/vectorAddMmap/requirements.txt new file mode 100644 index 00000000000..3a7051396ad --- /dev/null +++ b/samples/0_Introduction/vectorAddMmap/requirements.txt @@ -0,0 +1,5 @@ +# vectorAddMmap Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/0_Introduction/vectorAddMmap/vectorAddMmap.py b/samples/0_Introduction/vectorAddMmap/vectorAddMmap.py new file mode 100644 index 00000000000..5cbfc01fade --- /dev/null +++ b/samples/0_Introduction/vectorAddMmap/vectorAddMmap.py @@ -0,0 +1,291 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +CUDA Virtual Memory Management (VMM) API + +Vector add C = A + B, but each device buffer is built by hand out of +per-device physical backings stitched into a single contiguous virtual +address range. Uses the Virtual Memory Management API in +``cuda.bindings.driver``: + + cuMemAddressReserve -> reserve a chunk of virtual address space + cuMemGetAllocationGranularity -> query alignment requirements + cuMemCreate -> create a physical backing on a specific device + cuMemMap -> map the backing into the reserved VA range + cuMemSetAccess -> grant read/write access to the mapping device(s) + cuMemUnmap / cuMemAddressFree / cuMemRelease -> tear everything down + +This is the *only* sample that teaches the CUDA VMM API. The allocation +is striped across all peer-capable devices ("backing devices") but is +accessed by a single mapping device (the current device), which is a +useful pattern for NUMA-aware placement across a multi-GPU machine. + +Waives on macOS and on 32-bit / ARM SBSA / aarch64 configurations that do +not support VMM, and on devices that do not report +``VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED``. +""" + +import ctypes +import math +import platform +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device_drv, requirement_not_met + + from cuda.bindings import driver as cuda +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +VECTOR_ADD_MMAP_KERNEL = """\ +extern "C" __global__ void VecAdd_kernel(const float *A, const float *B, float *C, int N) +{ + int i = blockDim.x * blockIdx.x + threadIdx.x; + if (i < N) + C[i] = A[i] + B[i]; +} +""" + + +def _round_up(x, y): + return int((x - 1) / y + 1) * y + + +def _get_backing_devices(cu_device): + """Return ``[cu_device] + ``.""" + num_devices = check_cuda_errors(cuda.cuDeviceGetCount()) + + backing_devices = [cu_device] + for dev in range(num_devices): + if int(dev) == int(cu_device): + continue + + # Only peer-capable devices can back a shared VA range together. + capable = check_cuda_errors(cuda.cuDeviceCanAccessPeer(cu_device, dev)) + if not capable: + continue + + # The device also needs to support VMM to participate. + attribute_val = check_cuda_errors( + cuda.cuDeviceGetAttribute( + cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED, + cu_device, + ) + ) + if attribute_val == 0: + continue + + backing_devices.append(cuda.CUdevice(dev)) + return backing_devices + + +def _simple_malloc_multi_device_mmap(size, resident_devices, mapping_devices, align=0): + """Allocate ``size`` bytes striped across ``resident_devices`` and mapped + into a single contiguous VA range accessible by ``mapping_devices``. + + Returns ``(status, dptr, allocation_size)``. ``allocation_size`` is the + rounded-up size (caller uses it for the matching free). + """ + min_granularity = 0 + + prop = cuda.CUmemAllocationProp() + prop.type = cuda.CUmemAllocationType.CU_MEM_ALLOCATION_TYPE_PINNED + prop.location.type = cuda.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE + + # The stripe size must satisfy each participant's granularity. + for device in resident_devices: + prop.location.id = device + status, granularity = cuda.cuMemGetAllocationGranularity( + prop, cuda.CUmemAllocationGranularity_flags.CU_MEM_ALLOC_GRANULARITY_MINIMUM + ) + if status != cuda.CUresult.CUDA_SUCCESS: + return status, None, None + min_granularity = max(min_granularity, granularity) + + for device in mapping_devices: + prop.location.id = device + status, granularity = cuda.cuMemGetAllocationGranularity( + prop, cuda.CUmemAllocationGranularity_flags.CU_MEM_ALLOC_GRANULARITY_MINIMUM + ) + if status != cuda.CUresult.CUDA_SUCCESS: + return status, None, None + min_granularity = max(min_granularity, granularity) + + # Round up so ``size`` splits evenly into stripes that each meet the granularity requirement. + size = _round_up(size, len(resident_devices) * min_granularity) + stripe_size = size // len(resident_devices) + allocation_size = size + + # Reserve one contiguous VA range for the whole allocation. + status, dptr = cuda.cuMemAddressReserve(size, align, cuda.CUdeviceptr(0), 0) + if status != cuda.CUresult.CUDA_SUCCESS: + _simple_free_multi_device_mmap(dptr, size) + return status, None, None + + # For each backing device, create a physical allocation and map it into the reserved VA range. + for idx in range(len(resident_devices)): + prop.location.id = resident_devices[idx] + + status, allocation_handle = cuda.cuMemCreate(stripe_size, prop, 0) + if status != cuda.CUresult.CUDA_SUCCESS: + _simple_free_multi_device_mmap(dptr, size) + return status, None, None + + # After cuMemMap, the physical handle can be released; the mapping + # keeps the backing alive until the VA range is unmapped. + (status,) = cuda.cuMemMap(int(dptr) + (stripe_size * idx), stripe_size, 0, allocation_handle, 0) + (status2,) = cuda.cuMemRelease(allocation_handle) + if status != cuda.CUresult.CUDA_SUCCESS: + status = status2 + if status != cuda.CUresult.CUDA_SUCCESS: + _simple_free_multi_device_mmap(dptr, size) + return status, None, None + + # Grant each mapping device read/write access to the whole range. + access_descriptors = [cuda.CUmemAccessDesc()] * len(mapping_devices) + for idx in range(len(mapping_devices)): + access_descriptors[idx].location.type = cuda.CUmemLocationType.CU_MEM_LOCATION_TYPE_DEVICE + access_descriptors[idx].location.id = mapping_devices[idx] + access_descriptors[idx].flags = cuda.CUmemAccess_flags.CU_MEM_ACCESS_FLAGS_PROT_READWRITE + + (status,) = cuda.cuMemSetAccess(dptr, size, access_descriptors, len(access_descriptors)) + if status != cuda.CUresult.CUDA_SUCCESS: + _simple_free_multi_device_mmap(dptr, size) + return status, None, None + + return (status, dptr, allocation_size) + + +def _simple_free_multi_device_mmap(dptr, size): + status = cuda.cuMemUnmap(dptr, size) + if status[0] != cuda.CUresult.CUDA_SUCCESS: + return status + status = cuda.cuMemAddressFree(dptr, size) + if status[0] != cuda.CUresult.CUDA_SUCCESS: + return status + return status + + +def main(): + if platform.system() == "Darwin": + requirement_not_met("vectorAddMmap is not supported on Mac OSX") + if platform.machine() in {"armv7l", "aarch64", "sbsa"}: + requirement_not_met(f"vectorAddMmap is not supported on {platform.machine()}") + + n = 50000 + size = n * np.dtype(np.float32).itemsize + + check_cuda_errors(cuda.cuInit(0)) + cu_device = find_cuda_device_drv() + + attribute_val = check_cuda_errors( + cuda.cuDeviceGetAttribute( + cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED, + cu_device, + ) + ) + print(f"Device {cu_device} VIRTUAL ADDRESS MANAGEMENT SUPPORTED = {attribute_val}.") + if not attribute_val: + requirement_not_met(f"Device {cu_device} does not support Virtual Address Management") + + # The kernel launches on cu_device; the allocation stripes across every + # peer-capable device that also supports VMM. + mapping_devices = [cu_device] + backing_devices = _get_backing_devices(cu_device) + + cu_context = check_cuda_errors(cuda.cuCtxCreate(None, 0, cu_device)) + kernel_helper = KernelHelper(VECTOR_ADD_MMAP_KERNEL, int(cu_device)) + vec_add_kernel = kernel_helper.get_function(b"VecAdd_kernel") + + h_a = np.random.rand(n).astype(dtype=np.float32) + h_b = np.random.rand(n).astype(dtype=np.float32) + h_c = np.zeros(n, dtype=np.float32) + + # ---- Allocate device memory via VMM ---- + # (allocation_size might be rounded up above `size` for granularity.) + d_a, allocation_size = check_cuda_errors(_simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) + d_b, _ = check_cuda_errors(_simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) + d_c, _ = check_cuda_errors(_simple_malloc_multi_device_mmap(size, backing_devices, mapping_devices)) + + check_cuda_errors(cuda.cuMemcpyHtoD(d_a, h_a, size)) + check_cuda_errors(cuda.cuMemcpyHtoD(d_b, h_b, size)) + + threads_per_block = 256 + blocks_per_grid = (n + threads_per_block - 1) // threads_per_block + + kernel_args = ((d_a, d_b, d_c, n), (None, None, None, ctypes.c_int)) + check_cuda_errors( + cuda.cuLaunchKernel( + vec_add_kernel, + blocks_per_grid, + 1, + 1, + threads_per_block, + 1, + 1, + 0, + 0, + kernel_args, + 0, + ) + ) + + check_cuda_errors(cuda.cuMemcpyDtoH(h_c, d_c, size)) + + max_err = 0.0 + for i in range(n): + max_err = max(max_err, math.fabs(h_c[i] - (h_a[i] + h_b[i]))) + + check_cuda_errors(_simple_free_multi_device_mmap(d_a, allocation_size)) + check_cuda_errors(_simple_free_multi_device_mmap(d_b, allocation_size)) + check_cuda_errors(_simple_free_multi_device_mmap(d_c, allocation_size)) + check_cuda_errors(cuda.cuCtxDestroy(cu_context)) + + if max_err > 1e-5: + print(f"Result = FAIL (max error {max_err})", file=sys.stderr) + return 1 + + print(f"Result = PASS (max error {max_err:.3e} over {n} elements, striped across {len(backing_devices)} device(s))") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md new file mode 100644 index 00000000000..7ccbda53a3f --- /dev/null +++ b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md @@ -0,0 +1,110 @@ +# Sample: Stream-Ordered Memory Allocation (Python) + +## Description + +Demonstrates the raw stream-ordered allocation API in +``cuda.bindings.runtime``: + +- ``cudaMallocAsync(nbytes, stream)`` / + ``cudaFreeAsync(ptr, stream)`` — allocate and free on a stream, ordered + with any surrounding kernels or copies +- ``cudaDeviceGetDefaultMemPool(dev)`` — grab the default memory pool +- ``cudaMemPoolSetAttribute(pool, cudaMemPoolAttrReleaseThreshold, ...)`` — + ask the pool to *retain* memory across frees instead of releasing it to + the OS + +Two demos are run back to back on a 1M-element vector add: + +1. **Basic** — plain ``cudaMallocAsync`` / launch / ``cudaFreeAsync``. With + the default release threshold of zero, the pool may release chunks back + to the OS between iterations. +2. **Post-sync** — set the release threshold to ``UINT64_MAX`` so + ``cudaFreeAsync`` keeps the pool "warm", then time the loop with CUDA + events to show the steady-state cost. + +This is the low-level counterpart to the high-level +[`samples/memoryResources/`](../../memoryResources/) sample, whose +``DeviceMemoryResource`` sits on top of the same pool but hides the +attribute knobs. + +Waives on Darwin (Metal-only) and on GPUs without memory-pool support. + +## What You'll Learn + +- Stream-ordered device memory: `cudaMallocAsync` and `cudaFreeAsync` +- Retrieving the device's default memory pool with `cudaDeviceGetDefaultMemPool` +- Tuning `cudaMemPoolAttrReleaseThreshold` for retain-across-frees behavior +- Timing GPU work with `cudaEventCreate` / `cudaEventRecord` / `cudaEventSynchronize` / `cudaEventElapsedTime` + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - host arrays and reference computation + +## Key APIs + +### From `cuda.bindings.runtime` + +- `cudaSetDevice`, `cudaStreamCreateWithFlags`, `cudaStreamDestroy`, `cudaStreamSynchronize` +- `cudaMallocAsync`, `cudaFreeAsync`, `cudaMemcpyAsync` +- `cudaDeviceGetDefaultMemPool`, `cudaMemPoolSetAttribute`, `cudaMemPoolAttr` +- `cudaEventCreate`, `cudaEventRecord`, `cudaEventSynchronize`, `cudaEventElapsedTime` + +### From `cuda.bindings.driver` + +- `cuLaunchKernel` +- `CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED` + +## Requirements + +### Hardware + +- NVIDIA GPU that supports memory pools (all modern discrete GPUs since Volta) + +### Software + +- CUDA Toolkit 11.3 or newer (feature gate for `MEMORY_POOLS_SUPPORTED`) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python streamOrderedAllocation.py +python streamOrderedAllocation.py --device=1 +``` + +## Expected Output + +Timings depend on GPU and CPU. + +``` +Starting basicStreamOrderedAllocation() +> Checking the results from vectorAddGPU() ... +Starting streamOrderedAllocationPostSync() +Total elapsed time = 12.345 ms over 20 iterations +> Checking the results from vectorAddGPU() ... +Both stream-ordered allocation variants verified. +Done +``` + +## Files + +- `streamOrderedAllocation.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` runtime API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/runtime.html) +- [`samples/memoryResources/`](../../memoryResources/) - the high-level `cuda.core` equivalent +- [CUDA Runtime API — Stream Ordered Memory Allocator](https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY__POOLS.html) diff --git a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt new file mode 100644 index 00000000000..0fac7d0da53 --- /dev/null +++ b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt @@ -0,0 +1,5 @@ +# streamOrderedAllocation Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/cuda_bindings/examples/2_Concepts_and_Techniques/stream_ordered_allocation.py b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py similarity index 53% rename from cuda_bindings/examples/2_Concepts_and_Techniques/stream_ordered_allocation.py rename to samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py index d84fa648b75..24ec53cf7ea 100644 --- a/cuda_bindings/examples/2_Concepts_and_Techniques/stream_ordered_allocation.py +++ b/samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py @@ -1,64 +1,106 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates stream-ordered memory allocation (cudaMallocAsync -# / cudaFreeAsync) and memory pool release thresholds. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] # /// +""" +Stream-ordered memory allocation with cudaMallocAsync + +Demonstrates the raw ``cudaMallocAsync`` / ``cudaFreeAsync`` API and the +memory-pool release-threshold attribute +(``cudaMemPoolAttrReleaseThreshold``). + +Two variants are run back to back on the same 1M-element vector add: + + 1. **Basic** -- ``cudaMallocAsync`` / launch / ``cudaFreeAsync`` per + iteration on the default memory pool. The default release threshold is + zero, so the pool may release chunks back to the OS between calls. + 2. **Post-sync** -- set ``cudaMemPoolAttrReleaseThreshold`` to a very + large value so ``cudaFreeAsync`` never releases memory back to the OS + during the steady-state loop, then time the loop with CUDA events. + +This is the low-level counterpart to the high-level +[`samples/memoryResources/`](../../memoryResources/) sample, whose +``DeviceMemoryResource`` sits on top of the same pool but hides the +attribute knobs. + +Waives on Darwin (Metal-only) and on GPUs without memory-pool support. +""" + import ctypes import math import platform import random as rnd import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import ( + KernelHelper, + check_cmd_line_flag, + check_cuda_errors, + find_cuda_device, + requirement_not_met, + ) -import numpy as np + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import ( - KernelHelper, - check_cmd_line_flag, - check_cuda_errors, - find_cuda_device, - requirement_not_met, -) -stream_ordered_allocation = """\ +VECTOR_ADD_KERNEL = """\ /* Add two vectors on the GPU */ extern "C" __global__ void vectorAddGPU(const float *a, const float *b, float *c, int N) { int idx = blockIdx.x*blockDim.x + threadIdx.x; - if (idx < N) { - c[idx] = a[idx] + b[idx]; + c[idx] = a[idx] + b[idx]; } } """ + MAX_ITER = 20 +# Populated once in main() so the two demo functions can call the same kernel. +_vector_add_gpu = None -def basic_stream_ordered_allocation(dev, nelem, a, b, c): - num_bytes = nelem * np.dtype(np.float32).itemsize - - print("Starting basicStreamOrderedAllocation()") - check_cuda_errors(cudart.cudaSetDevice(dev)) - stream = check_cuda_errors(cudart.cudaStreamCreateWithFlags(cudart.cudaStreamNonBlocking)) - - d_a = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) - d_b = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) - d_c = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) - check_cuda_errors(cudart.cudaMemcpyAsync(d_a, a, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)) - check_cuda_errors(cudart.cudaMemcpyAsync(d_b, b, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)) +def _launch_add(stream, nelem, d_a, d_b, d_c): block = cudart.dim3() block.x = 256 block.y = 1 @@ -77,46 +119,62 @@ def basic_stream_ordered_allocation(dev, nelem, a, b, c): _vector_add_gpu, grid.x, grid.y, - grid.z, # grid dim + grid.z, block.x, block.y, - block.z, # block dim + block.z, 0, - stream, # shared mem and stream + stream, kernel_args, 0, ) - ) # arguments + ) - check_cuda_errors(cudart.cudaFreeAsync(d_a, stream)) - check_cuda_errors(cudart.cudaFreeAsync(d_b, stream)) - check_cuda_errors(cudart.cudaMemcpyAsync(c, d_c, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)) - check_cuda_errors(cudart.cudaFreeAsync(d_c, stream)) - check_cuda_errors(cudart.cudaStreamSynchronize(stream)) - # Compare the results - print("> Checking the results from vectorAddGPU() ...") +def _l2_norm_error(nelem, a, b, c): error_norm = 0.0 ref_norm = 0.0 - for n in range(nelem): ref = a[n] + b[n] diff = c[n] - ref error_norm += diff * diff ref_norm += ref * ref - error_norm = math.sqrt(error_norm) ref_norm = math.sqrt(ref_norm) + return error_norm / ref_norm if ref_norm > 0 else error_norm - check_cuda_errors(cudart.cudaStreamDestroy(stream)) - return error_norm / ref_norm < 1.0e-6 +def basic_stream_ordered_allocation(dev, nelem, a, b, c): + """Basic stream-ordered alloc/free of the three vectors, no pool tuning.""" + num_bytes = nelem * np.dtype(np.float32).itemsize + + print("Starting basicStreamOrderedAllocation()") + check_cuda_errors(cudart.cudaSetDevice(dev)) + stream = check_cuda_errors(cudart.cudaStreamCreateWithFlags(cudart.cudaStreamNonBlocking)) + + d_a = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) + d_b = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) + d_c = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) + check_cuda_errors(cudart.cudaMemcpyAsync(d_a, a, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)) + check_cuda_errors(cudart.cudaMemcpyAsync(d_b, b, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)) + + _launch_add(stream, nelem, d_a, d_b, d_c) + + check_cuda_errors(cudart.cudaFreeAsync(d_a, stream)) + check_cuda_errors(cudart.cudaFreeAsync(d_b, stream)) + check_cuda_errors(cudart.cudaMemcpyAsync(c, d_c, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)) + check_cuda_errors(cudart.cudaFreeAsync(d_c, stream)) + check_cuda_errors(cudart.cudaStreamSynchronize(stream)) + + print("> Checking the results from vectorAddGPU() ...") + err = _l2_norm_error(nelem, a, b, c) + check_cuda_errors(cudart.cudaStreamDestroy(stream)) + return err < 1.0e-6 -# streamOrderedAllocationPostSync(): demonstrates If the application wants the memory to persist in the pool beyond -# synchronization, then it sets the release threshold on the pool. This way, when the application reaches the "steady state", -# it is no longer allocating/freeing memory from the OS. def stream_ordered_allocation_post_sync(dev, nelem, a, b, c): + """Same alloc/launch/free loop, but with a huge release threshold so the + pool retains its backing between iterations and does not thrash the OS.""" num_bytes = nelem * np.dtype(np.float32).itemsize print("Starting streamOrderedAllocationPostSync()") @@ -126,10 +184,7 @@ def stream_ordered_allocation_post_sync(dev, nelem, a, b, c): end = check_cuda_errors(cudart.cudaEventCreate()) mem_pool = check_cuda_errors(cudart.cudaDeviceGetDefaultMemPool(dev)) - threshold_val = cuda.cuuint64_t(ctypes.c_uint64(-1).value) - # Set high release threshold on the default pool so that cudaFreeAsync will not actually release memory to the system. - # By default, the release threshold for a memory pool is set to zero. This implies that the CUDA driver is - # allowed to release a memory chunk back to the system as long as it does not contain any active suballocations. + threshold_val = cuda.cuuint64_t(ctypes.c_uint64(-1).value) # ~UINT64_MAX check_cuda_errors( cudart.cudaMemPoolSetAttribute( mem_pool, @@ -137,9 +192,9 @@ def stream_ordered_allocation_post_sync(dev, nelem, a, b, c): threshold_val, ) ) - # Record the start event + check_cuda_errors(cudart.cudaEventRecord(start, stream)) - for _i in range(MAX_ITER): + for _ in range(MAX_ITER): d_a = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) d_b = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) d_c = check_cuda_errors(cudart.cudaMallocAsync(num_bytes, stream)) @@ -150,34 +205,7 @@ def stream_ordered_allocation_post_sync(dev, nelem, a, b, c): cudart.cudaMemcpyAsync(d_b, b, num_bytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream) ) - block = cudart.dim3() - block.x = 256 - block.y = 1 - block.z = 1 - grid = cudart.dim3() - grid.x = math.ceil(nelem / float(block.x)) - grid.y = 1 - grid.z = 1 - - kernel_args = ( - (d_a, d_b, d_c, nelem), - (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_int), - ) - check_cuda_errors( - cuda.cuLaunchKernel( - _vector_add_gpu, - grid.x, - grid.y, - grid.z, # grid dim - block.x, - block.y, - block.z, # block dim - 0, - stream, # shared mem and stream - kernel_args, - 0, - ) - ) # arguments + _launch_add(stream, nelem, d_a, d_b, d_c) check_cuda_errors(cudart.cudaFreeAsync(d_a, stream)) check_cuda_errors(cudart.cudaFreeAsync(d_b, stream)) @@ -187,29 +215,15 @@ def stream_ordered_allocation_post_sync(dev, nelem, a, b, c): check_cuda_errors(cudart.cudaFreeAsync(d_c, stream)) check_cuda_errors(cudart.cudaStreamSynchronize(stream)) check_cuda_errors(cudart.cudaEventRecord(end, stream)) - # Wait for the end event to complete check_cuda_errors(cudart.cudaEventSynchronize(end)) msec_total = check_cuda_errors(cudart.cudaEventElapsedTime(start, end)) - print(f"Total elapsed time = {msec_total} ms over {MAX_ITER} iterations") + print(f"Total elapsed time = {msec_total:.3f} ms over {MAX_ITER} iterations") - # Compare the results print("> Checking the results from vectorAddGPU() ...") - error_norm = 0.0 - ref_norm = 0.0 - - for n in range(nelem): - ref = a[n] + b[n] - diff = c[n] - ref - error_norm += diff * diff - ref_norm += ref * ref - - error_norm = math.sqrt(error_norm) - ref_norm = math.sqrt(ref_norm) - + err = _l2_norm_error(nelem, a, b, c) check_cuda_errors(cudart.cudaStreamDestroy(stream)) - - return error_norm / ref_norm < 1.0e-6 + return err < 1.0e-6 def main(): @@ -218,10 +232,10 @@ def main(): cuda.cuInit(0) if check_cmd_line_flag("help"): - print("Usage: streamOrderedAllocation [OPTION]\n", file=sys.stderr) - print("Options:", file=sys.stderr) - print(" device=[device #] Specify the device to be used", file=sys.stderr) - sys.exit(1) + print("Usage: streamOrderedAllocation [OPTION]") + print("Options:") + print(" device=[device #] Specify the device to be used") + return 0 dev = find_cuda_device() @@ -233,20 +247,16 @@ def main(): cudart.cudaDeviceGetAttribute(cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED, dev) ) if not is_mem_pool_supported: - requirement_not_met("Waiving execution as device does not support Memory Pools") + requirement_not_met("Waiving execution: device does not support Memory Pools") global _vector_add_gpu - kernel_helper = KernelHelper(stream_ordered_allocation, dev) + kernel_helper = KernelHelper(VECTOR_ADD_KERNEL, dev) _vector_add_gpu = kernel_helper.get_function(b"vectorAddGPU") - # Allocate CPU memory nelem = 1048576 - nelem * np.dtype(np.float32).itemsize - a = np.zeros(nelem, dtype="float32") b = np.zeros(nelem, dtype="float32") c = np.zeros(nelem, dtype="float32") - # Initialize the vectors for i in range(nelem): a[i] = rnd.random() b[i] = rnd.random() @@ -254,9 +264,13 @@ def main(): ret1 = basic_stream_ordered_allocation(dev, nelem, a, b, c) ret2 = stream_ordered_allocation_post_sync(dev, nelem, a, b, c) - if not ret1 or not ret2: - sys.exit(1) + if not (ret1 and ret2): + return 1 + + print("Both stream-ordered allocation variants verified.") + print("Done") + return 0 if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/samples/3_CUDA_Features/cudaGraphsManualNodes/README.md b/samples/3_CUDA_Features/cudaGraphsManualNodes/README.md new file mode 100644 index 00000000000..f4bfafeadd2 --- /dev/null +++ b/samples/3_CUDA_Features/cudaGraphsManualNodes/README.md @@ -0,0 +1,112 @@ +# Sample: CUDA Graphs — Manual Node Construction vs Stream Capture (Python) + +## Description + +Builds the same two-stage reduction as a CUDA graph twice, back-to-back: + +1. **Manual node construction** — `cudaGraphCreate` + + `cudaGraphAddMemcpyNode` / `cudaGraphAddMemsetNode` / + `cuGraphAddKernelNode`, wiring node dependencies by hand. +2. **Stream capture** — `cudaStreamBeginCapture` / `cudaStreamEndCapture` + on three streams joined by events; the driver derives the same DAG + from the actual launches. + +Both paths produce a `cudaGraph_t`, are instantiated +(`cudaGraphInstantiate`), cloned (`cudaGraphClone`), and replayed several +times (`cudaGraphLaunch`). + +The high-level counterpart in `/samples` is +[`samples/cudaGraphs/`](../../cudaGraphs/), which teaches stream capture +at the `cuda.core` layer. This sample is the only place in `/samples` +that shows the **manual node-by-node construction** pattern — useful +when you're programmatically building a graph without a driving stream. + +## What You'll Learn + +- Constructing a CUDA graph manually, one node at a time +- Wiring `cudaGraphAddMemcpyNode` / `cudaGraphAddMemsetNode` / + `cuGraphAddKernelNode` with explicit dependency lists +- Instantiating (`cudaGraphInstantiate`) and cloning (`cudaGraphClone`) + a graph +- Replaying an executable graph on a stream (`cudaGraphLaunch`) +- Building the same graph implicitly via stream capture on multiple + streams joined by events + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - host / dtype sizes + +## Key APIs + +### From `cuda.bindings.runtime` + +- `cudaGraphCreate`, `cudaGraphDestroy` +- `cudaGraphAddMemcpyNode`, `cudaGraphAddMemsetNode` +- `cudaGraphInstantiate`, `cudaGraphExecDestroy` +- `cudaGraphClone`, `cudaGraphGetNodes`, `cudaGraphLaunch` +- `cudaStreamBeginCapture` / `cudaStreamEndCapture` +- `cudaStreamCreate`, `cudaStreamWaitEvent`, `cudaStreamSynchronize` +- `cudaEventCreate`, `cudaEventRecord` +- `cudaMallocHost`, `cudaMalloc`, `cudaFreeHost`, `cudaFree` + +### From `cuda.bindings.driver` + +- `cuGraphAddKernelNode` +- `CUDA_KERNEL_NODE_PARAMS` +- `cuLaunchKernel` + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 5.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python cudaGraphsManualNodes.py +python cudaGraphsManualNodes.py --device=1 +``` + +## Expected Output + +``` +16777216 elements +threads per block = 512 +Graph Launch iterations = 3 + +Num of nodes in the graph created manually = 6 +Cloned Graph Output.. + +Num of nodes in the graph created using stream capture API = 7 +Cloned Graph Output.. +Done +``` + +## Files + +- `cudaGraphsManualNodes.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` runtime API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/runtime.html) +- [`samples/cudaGraphs/`](../../cudaGraphs/) - the high-level `cuda.core` equivalent (stream capture only) +- [CUDA C++ Programming Guide — CUDA Graphs](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cuda-graphs) diff --git a/cuda_bindings/examples/3_CUDA_Features/simple_cuda_graphs.py b/samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py similarity index 70% rename from cuda_bindings/examples/3_CUDA_Features/simple_cuda_graphs.py rename to samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py index bb749065f27..838f3a09d88 100644 --- a/cuda_bindings/examples/3_CUDA_Features/simple_cuda_graphs.py +++ b/samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py @@ -1,34 +1,82 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates CUDA Graphs for capture and replay of GPU -# workloads, including manual graph construction and stream capture. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] # /// +""" +CUDA Graphs: manual node construction vs stream capture + +Builds the same two-stage reduction as a CUDA graph twice: + + 1. **Manual node construction** -- ``cudaGraphCreate`` + explicit + ``cudaGraphAddMemcpyNode`` / ``cudaGraphAddMemsetNode`` / + ``cuGraphAddKernelNode`` calls, wiring dependencies by hand. + 2. **Stream capture** -- ``cudaStreamBeginCapture`` / + ``cudaStreamEndCapture`` on three streams joined by events; the + driver derives the same DAG from the actual launches. + +Both paths produce a ``cudaGraph_t``, are instantiated +(``cudaGraphInstantiate``), cloned (``cudaGraphClone``), and replayed +several times (``cudaGraphLaunch``). + +The high-level counterpart in ``/samples`` is +[`samples/cudaGraphs/`](../../cudaGraphs/), which teaches stream capture at +the ``cuda.core`` layer. This sample is the *only* place that shows the +manual-node-construction pattern (useful when you're building a graph +programmatically without a driving stream). +""" + import ctypes import random as rnd +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device -import numpy as np + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import ( - KernelHelper, - check_cuda_errors, - find_cuda_device, -) THREADS_PER_BLOCK = 512 GRAPH_LAUNCH_ITERATIONS = 3 -simple_cuda_graphs = """\ + +REDUCE_KERNEL_SOURCE = """\ #include #include @@ -99,36 +147,36 @@ if ((blockDim.x >= 512) && (cta.thread_rank() < 256)) { tmp[cta.thread_rank()] = temp_sum = temp_sum + tmp[cta.thread_rank() + 256]; } - cg::sync(cta); if ((blockDim.x >= 256) && (cta.thread_rank() < 128)) { tmp[cta.thread_rank()] = temp_sum = temp_sum + tmp[cta.thread_rank() + 128]; } - cg::sync(cta); if ((blockDim.x >= 128) && (cta.thread_rank() < 64)) { tmp[cta.thread_rank()] = temp_sum = temp_sum + tmp[cta.thread_rank() + 64]; } - cg::sync(cta); if (cta.thread_rank() < 32) { - // Fetch final intermediate sum from 2nd warp if (blockDim.x >= 64) temp_sum += tmp[cta.thread_rank() + 32]; - // Reduce final warp using shuffle for (int offset = tile32.size() / 2; offset > 0; offset /= 2) { temp_sum += tile32.shfl_down(temp_sum, offset); } } - // write result for this block to global mem if (cta.thread_rank() == 0) result[0] = temp_sum; } """ -def init_input(a, size): +# Kernels are looked up at main() startup and captured here so the graph +# construction helpers can reference them. +_reduce = None +_reduce_final = None + + +def _init_input(a, size): ctypes.c_float.from_address(a) a_list = ctypes.pointer(ctypes.c_float.from_address(a)) for i in range(size): @@ -136,15 +184,16 @@ def init_input(a, size): def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_size, num_of_blocks): + """Build the graph node by node with explicit dependency arrays.""" result_h = ctypes.c_double(0.0) node_dependencies = [] stream_for_graph = check_cuda_errors(cudart.cudaStreamCreate()) - kernel_node_params = cuda.CUDA_KERNEL_NODE_PARAMS() memcpy_params = cudart.cudaMemcpy3DParms() memset_params = cudart.cudaMemsetParams() + # H2D memcpy node: input_vec_h -> input_vec_d memcpy_params.srcArray = None memcpy_params.srcPos = cudart.make_cudaPos(0, 0, 0) memcpy_params.srcPtr = cudart.make_cudaPitchedPtr( @@ -158,10 +207,11 @@ def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_s memcpy_params.extent = cudart.make_cudaExtent(np.dtype(np.float32).itemsize * input_size, 1, 1) memcpy_params.kind = cudart.cudaMemcpyKind.cudaMemcpyHostToDevice + # Memset node: zero output_vec_d memset_params.dst = output_vec_d memset_params.value = 0 memset_params.pitch = 0 - memset_params.elementSize = np.dtype(np.float32).itemsize # elementSize can be max 4 bytes + memset_params.elementSize = np.dtype(np.float32).itemsize # max 4 bytes memset_params.width = num_of_blocks * 2 memset_params.height = 1 @@ -169,31 +219,28 @@ def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_s memcpy_node = check_cuda_errors(cudart.cudaGraphAddMemcpyNode(graph, None, 0, memcpy_params)) memset_node = check_cuda_errors(cudart.cudaGraphAddMemsetNode(graph, None, 0, memset_params)) - node_dependencies.append(memset_node) node_dependencies.append(memcpy_node) - kernel_args = ( - (input_vec_d, output_vec_d, input_size, num_of_blocks), - (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_uint), - ) - + # First reduce kernel node: input_vec_d -> output_vec_d + kernel_node_params = cuda.CUDA_KERNEL_NODE_PARAMS() kernel_node_params.func = _reduce kernel_node_params.gridDimX = num_of_blocks kernel_node_params.gridDimY = kernel_node_params.gridDimZ = 1 kernel_node_params.blockDimX = THREADS_PER_BLOCK kernel_node_params.blockDimY = kernel_node_params.blockDimZ = 1 kernel_node_params.sharedMemBytes = 0 - kernel_node_params.kernelParams = kernel_args - # kernelNodeParams.extra = None - + kernel_node_params.kernelParams = ( + (input_vec_d, output_vec_d, input_size, num_of_blocks), + (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_uint), + ) kernel_node = check_cuda_errors( cuda.cuGraphAddKernelNode(graph, node_dependencies, len(node_dependencies), kernel_node_params) ) - node_dependencies.clear() node_dependencies.append(kernel_node) + # Zero result_d memset_params = cudart.cudaMemsetParams() memset_params.dst = result_d memset_params.value = 0 @@ -201,31 +248,27 @@ def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_s memset_params.width = 2 memset_params.height = 1 memset_node = check_cuda_errors(cudart.cudaGraphAddMemsetNode(graph, None, 0, memset_params)) - node_dependencies.append(memset_node) + # Second (final) reduce kernel node: output_vec_d -> result_d kernel_node_params = cuda.CUDA_KERNEL_NODE_PARAMS() - kernel_node_params.func = _reduceFinal + kernel_node_params.func = _reduce_final kernel_node_params.gridDimX = kernel_node_params.gridDimY = kernel_node_params.gridDimZ = 1 kernel_node_params.blockDimX = THREADS_PER_BLOCK kernel_node_params.blockDimY = kernel_node_params.blockDimZ = 1 kernel_node_params.sharedMemBytes = 0 - kernel_args2 = ( + kernel_node_params.kernelParams = ( (output_vec_d, result_d, num_of_blocks), (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint), ) - kernel_node_params.kernelParams = kernel_args2 - # kernelNodeParams.extra = None - kernel_node = check_cuda_errors( cuda.cuGraphAddKernelNode(graph, node_dependencies, len(node_dependencies), kernel_node_params) ) - node_dependencies.clear() node_dependencies.append(kernel_node) + # D2H memcpy node: result_d -> result_h memcpy_params = cudart.cudaMemcpy3DParms() - memcpy_params.srcArray = None memcpy_params.srcPos = cudart.make_cudaPos(0, 0, 0) memcpy_params.srcPtr = cudart.make_cudaPitchedPtr(result_d, np.dtype(np.float64).itemsize, 1, 1) @@ -237,29 +280,23 @@ def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_s memcpy_node = check_cuda_errors( cudart.cudaGraphAddMemcpyNode(graph, node_dependencies, len(node_dependencies), memcpy_params) ) - node_dependencies.clear() node_dependencies.append(memcpy_node) - # WIP: Host nodes - - nodes, num_nodes = check_cuda_errors(cudart.cudaGraphGetNodes(graph)) + _, num_nodes = check_cuda_errors(cudart.cudaGraphGetNodes(graph)) print(f"\nNum of nodes in the graph created manually = {num_nodes}") graph_exec = check_cuda_errors(cudart.cudaGraphInstantiate(graph, 0)) - cloned_graph = check_cuda_errors(cudart.cudaGraphClone(graph)) cloned_graph_exec = check_cuda_errors(cudart.cudaGraphInstantiate(cloned_graph, 0)) - for _i in range(GRAPH_LAUNCH_ITERATIONS): + for _ in range(GRAPH_LAUNCH_ITERATIONS): check_cuda_errors(cudart.cudaGraphLaunch(graph_exec, stream_for_graph)) - check_cuda_errors(cudart.cudaStreamSynchronize(stream_for_graph)) print("Cloned Graph Output..") - for _i in range(GRAPH_LAUNCH_ITERATIONS): + for _ in range(GRAPH_LAUNCH_ITERATIONS): check_cuda_errors(cudart.cudaGraphLaunch(cloned_graph_exec, stream_for_graph)) - check_cuda_errors(cudart.cudaStreamSynchronize(stream_for_graph)) check_cuda_errors(cudart.cudaGraphExecDestroy(graph_exec)) @@ -270,6 +307,7 @@ def cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, input_s def cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, result_d, input_size, num_of_blocks): + """Capture the same DAG by recording actual launches on three streams.""" result_h = ctypes.c_double(0.0) stream1 = check_cuda_errors(cudart.cudaStreamCreate()) @@ -277,16 +315,18 @@ def cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, res stream3 = check_cuda_errors(cudart.cudaStreamCreate()) stream_for_graph = check_cuda_errors(cudart.cudaStreamCreate()) - fork_stream_event = check_cuda_errors(cudart.cudaEventCreate()) + fork_event = check_cuda_errors(cudart.cudaEventCreate()) memset_event1 = check_cuda_errors(cudart.cudaEventCreate()) memset_event2 = check_cuda_errors(cudart.cudaEventCreate()) check_cuda_errors(cudart.cudaStreamBeginCapture(stream1, cudart.cudaStreamCaptureMode.cudaStreamCaptureModeGlobal)) - check_cuda_errors(cudart.cudaEventRecord(fork_stream_event, stream1)) - check_cuda_errors(cudart.cudaStreamWaitEvent(stream2, fork_stream_event, 0)) - check_cuda_errors(cudart.cudaStreamWaitEvent(stream3, fork_stream_event, 0)) + # Fork stream1 into stream2 and stream3. + check_cuda_errors(cudart.cudaEventRecord(fork_event, stream1)) + check_cuda_errors(cudart.cudaStreamWaitEvent(stream2, fork_event, 0)) + check_cuda_errors(cudart.cudaStreamWaitEvent(stream3, fork_event, 0)) + # H2D on stream1; two zeroing memsets in parallel on stream2 / stream3. check_cuda_errors( cudart.cudaMemcpyAsync( input_vec_d, @@ -296,44 +336,32 @@ def cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, res stream1, ) ) - check_cuda_errors(cudart.cudaMemsetAsync(output_vec_d, 0, np.dtype(np.float64).itemsize * num_of_blocks, stream2)) - check_cuda_errors(cudart.cudaEventRecord(memset_event1, stream2)) - check_cuda_errors(cudart.cudaMemsetAsync(result_d, 0, np.dtype(np.float64).itemsize, stream3)) check_cuda_errors(cudart.cudaEventRecord(memset_event2, stream3)) check_cuda_errors(cudart.cudaStreamWaitEvent(stream1, memset_event1, 0)) + # First reduce. kernel_args = ( (input_vec_d, output_vec_d, input_size, num_of_blocks), (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_size_t, ctypes.c_uint), ) check_cuda_errors( - cuda.cuLaunchKernel( - _reduce, - num_of_blocks, - 1, - 1, - THREADS_PER_BLOCK, - 1, - 1, - 0, - stream1, - kernel_args, - 0, - ) + cuda.cuLaunchKernel(_reduce, num_of_blocks, 1, 1, THREADS_PER_BLOCK, 1, 1, 0, stream1, kernel_args, 0) ) check_cuda_errors(cudart.cudaStreamWaitEvent(stream1, memset_event2, 0)) + # Final reduce. kernel_args2 = ( (output_vec_d, result_d, num_of_blocks), (ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint), ) - check_cuda_errors(cuda.cuLaunchKernel(_reduceFinal, 1, 1, 1, THREADS_PER_BLOCK, 1, 1, 0, stream1, kernel_args2, 0)) + check_cuda_errors(cuda.cuLaunchKernel(_reduce_final, 1, 1, 1, THREADS_PER_BLOCK, 1, 1, 0, stream1, kernel_args2, 0)) + # D2H copy of the scalar result. check_cuda_errors( cudart.cudaMemcpyAsync( result_h, @@ -344,27 +372,21 @@ def cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, res ) ) - # WIP: Host nodes - graph = check_cuda_errors(cudart.cudaStreamEndCapture(stream1)) - - nodes, num_nodes = check_cuda_errors(cudart.cudaGraphGetNodes(graph)) + _, num_nodes = check_cuda_errors(cudart.cudaGraphGetNodes(graph)) print(f"\nNum of nodes in the graph created using stream capture API = {num_nodes}") graph_exec = check_cuda_errors(cudart.cudaGraphInstantiate(graph, 0)) - cloned_graph = check_cuda_errors(cudart.cudaGraphClone(graph)) cloned_graph_exec = check_cuda_errors(cudart.cudaGraphInstantiate(cloned_graph, 0)) - for _i in range(GRAPH_LAUNCH_ITERATIONS): + for _ in range(GRAPH_LAUNCH_ITERATIONS): check_cuda_errors(cudart.cudaGraphLaunch(graph_exec, stream_for_graph)) - check_cuda_errors(cudart.cudaStreamSynchronize(stream_for_graph)) print("Cloned Graph Output..") - for _i in range(GRAPH_LAUNCH_ITERATIONS): + for _ in range(GRAPH_LAUNCH_ITERATIONS): check_cuda_errors(cudart.cudaGraphLaunch(cloned_graph_exec, stream_for_graph)) - check_cuda_errors(cudart.cudaStreamSynchronize(stream_for_graph)) check_cuda_errors(cudart.cudaGraphExecDestroy(graph_exec)) @@ -377,17 +399,15 @@ def cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, res def main(): - size = 1 << 24 # number of elements to reduce + size = 1 << 24 max_blocks = 512 - # This will pick the best possible CUDA capable device dev_id = find_cuda_device() - global _reduce - global _reduceFinal - kernel_helper = KernelHelper(simple_cuda_graphs, dev_id) + global _reduce, _reduce_final + kernel_helper = KernelHelper(REDUCE_KERNEL_SOURCE, dev_id) _reduce = kernel_helper.get_function(b"reduce") - _reduceFinal = kernel_helper.get_function(b"reduceFinal") + _reduce_final = kernel_helper.get_function(b"reduceFinal") print(f"{size} elements") print(f"threads per block = {THREADS_PER_BLOCK}") @@ -398,7 +418,7 @@ def main(): output_vec_d = check_cuda_errors(cudart.cudaMalloc(max_blocks * np.dtype(np.float64).itemsize)) result_d = check_cuda_errors(cudart.cudaMalloc(np.dtype(np.float64).itemsize)) - init_input(input_vec_h, size) + _init_input(input_vec_h, size) cuda_graphs_manual(input_vec_h, input_vec_d, output_vec_d, result_d, size, max_blocks) cuda_graphs_using_stream_capture(input_vec_h, input_vec_d, output_vec_d, result_d, size, max_blocks) @@ -408,6 +428,9 @@ def main(): check_cuda_errors(cudart.cudaFree(result_d)) check_cuda_errors(cudart.cudaFreeHost(input_vec_h)) + print("Done") + return 0 + if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt b/samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt new file mode 100644 index 00000000000..40ea1c4137a --- /dev/null +++ b/samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt @@ -0,0 +1,5 @@ +# cudaGraphsManualNodes Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md b/samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md new file mode 100644 index 00000000000..8daa7dd97d6 --- /dev/null +++ b/samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md @@ -0,0 +1,117 @@ +# Sample: Global → Shared Async Copy (memcpy_async) (Python) + +## Description + +Eight matrix-multiply kernels sharing the same launch harness, benchmarked +against a naive tiled baseline. The variants explore progressively more +sophisticated ways to hide the global → shared load latency using +``cuda::memcpy_async`` plus the ``cuda::pipeline`` / ``cuda::barrier`` +primitives: + +- `AsyncCopyMultiStageLargeChunk` +- `AsyncCopyLargeChunk` +- `AsyncCopyLargeChunkAWBarrier` — arrive/wait barrier variant +- `AsyncCopyMultiStageSharedState` +- `AsyncCopyMultiStage` +- `AsyncCopySingleStage` +- `Naive` — baseline +- `NaiveLargeChunk` — baseline + +The sample selects a variant via ``--kernel=N`` (default 0), computes the +reference ``C = A * B`` on the host, and reports GFLOPS. This is the only +sample in ``/samples`` that teaches ``cuda::memcpy_async``, +``cuda::pipeline``, or the arrive/wait barrier patterns — the low-level +async-copy machinery that ``cuda.core``'s newer APIs sit on top of. + +## What You'll Learn + +- Loading global memory into shared memory asynchronously with + ``cuda::memcpy_async`` +- Multi-stage pipelining with ``cuda::pipeline`` and + ``cuda::pipeline_shared_state`` so different pipeline stages can compute + and load in parallel +- Arrive/wait barriers with ``cuda::barrier`` for producer/consumer + synchronization inside a block +- Large-chunk async copies with vectorized load sizes +- Direct comparison against the classic hand-rolled tiled matmul + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - host reference computation and matrix plumbing + +## Key APIs + +### From `cuda.bindings.driver` + +- `cuLaunchKernel` + +### From `cuda.bindings.runtime` + +- `cudaMalloc` / `cudaFree` / `cudaMemcpy` / `cudaMemset` +- `cudaEventCreate` / `cudaEventRecord` / `cudaEventElapsedTime` + +### Kernel-side (headers pulled in by NVRTC via `KernelHelper`) + +- `cuda/barrier`, `cuda/pipeline`, `cooperative_groups`, + `cooperative_groups/reduce` +- `cuda::memcpy_async(barrier|pipeline|group, dst, src, size)` +- `cuda::pipeline_shared_state`, `cuda::pipeline`, `producer_acquire`, + `producer_commit`, `consumer_wait`, `consumer_release` +- `cuda::barrier::arrive` / `arrive_and_wait` + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0 or higher (Volta+). Some kernels + require SM 7.0 explicitly for `cuda::memcpy_async` support. + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python globalToShmemAsyncCopy.py # default variant +python globalToShmemAsyncCopy.py --kernel=6 # NaiveLargeChunk +python globalToShmemAsyncCopy.py --wA=1024 --wB=1024 # bigger matrices +``` + +## Expected Output + +Throughput depends on GPU. + +``` +[globalToShmemAsyncCopy] +GPU Device 0: "NVIDIA GeForce RTX 4090" with compute capability 8.9 +MatrixA(1024,1024), MatrixB(1024,1024) +Running kernel = 0 - AsyncCopyMultiStageLargeChunk +Performance= 4123.45 GFlop/s, Time= 0.520 msec, Size= ... Ops, WorkgroupSize= 256 threads/block +Result = PASS +``` + +## Files + +- `globalToShmemAsyncCopy.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`samples/matrixMulSharedMem/`](../../matrixMulSharedMem/) - basic tiled GEMM (no async copy) +- [CUDA C++ Programming Guide — Asynchronous Data Copies](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#asynchronous-data-copies) +- [`libcudacxx` `cuda::memcpy_async`](https://nvidia.github.io/libcudacxx/extended_api/asynchronous_operations/memcpy_async.html) +- [`libcudacxx` `cuda::pipeline`](https://nvidia.github.io/libcudacxx/extended_api/synchronization_primitives/pipeline.html) diff --git a/cuda_bindings/examples/3_CUDA_Features/global_to_shmem_async_copy.py b/samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py similarity index 94% rename from cuda_bindings/examples/3_CUDA_Features/global_to_shmem_async_copy.py rename to samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py index d3ab1c53f19..ce7d5c3be01 100644 --- a/cuda_bindings/examples/3_CUDA_Features/global_to_shmem_async_copy.py +++ b/samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py @@ -1,17 +1,62 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates asynchronous copy from global to shared memory -# (memcpy_async) in matrix multiplication kernels. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] # /// +""" +Matrix multiply with async global->shared copy (cuda::memcpy_async) + +Eight matrix-multiply kernels sharing the same launch harness, benchmarked +against a naive tiled baseline. The variants explore progressively more +sophisticated ways to hide the global->shared load latency using +cuda::memcpy_async plus the cuda::pipeline / cuda::barrier primitives: + + * AsyncCopyMultiStageLargeChunk + * AsyncCopyLargeChunk + * AsyncCopyLargeChunkAWBarrier (arrive/wait barrier) + * AsyncCopyMultiStageSharedState + * AsyncCopyMultiStage + * AsyncCopySingleStage + * Naive (baseline) + * NaiveLargeChunk (baseline) + +The sample runs one variant selected via --kernel=N (default 0), computes +the reference C = A * B on the host, and reports GFLOPS. This is the only +place in /samples that teaches cuda::memcpy_async, cuda::pipeline, or the +arrive-wait barrier patterns. +""" + +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + import ctypes import math import platform @@ -19,10 +64,7 @@ from enum import Enum import numpy as np - -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import ( +from cuda_bindings_utils import ( KernelHelper, check_cmd_line_flag, check_compute_capability_too_low, @@ -32,6 +74,9 @@ requirement_not_met, ) +from cuda.bindings import driver as cuda +from cuda.bindings import runtime as cudart + block_size = 16 diff --git a/samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt b/samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt new file mode 100644 index 00000000000..55939cc4e34 --- /dev/null +++ b/samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt @@ -0,0 +1,5 @@ +# globalToShmemAsyncCopy Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md new file mode 100644 index 00000000000..ed7960a1ec0 --- /dev/null +++ b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md @@ -0,0 +1,117 @@ +# Sample: Conjugate Gradient with Cooperative Multi-Block Sync (Python) + +## Description + +Solves ``A x = b`` for a random sparse tridiagonal symmetric-positive- +definite matrix ``A`` (1M x 1M in CSR format) using the Conjugate Gradient +method. **The entire CG iteration runs inside a single kernel** launched +via ``cuLaunchCooperativeKernel``; each iteration uses +``cg::grid_group::sync()`` to move between phases without returning to the +host. + +The device-side building blocks are: + +- `gpuSpMV` -- sparse matrix-vector multiply (CSR) +- `gpuSaxpy` -- `y = a*x + y` +- `gpuDotProduct` -- warp-shuffle reduce (`cg::reduce`) + `atomicAdd` + across blocks +- `gpuScaleVectorAndSaxpy`, `gpuCopyVector` -- CG bookkeeping + +This is the only end-to-end numerical solver in `/samples` that uses +grid-level cooperative synchronization. The simpler +[`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) uses the +same underlying feature for a plain reduction. + +Waives with exit code 2 on Darwin / QNX / armv7l, on devices without +Unified Memory, and on devices without Cooperative Kernel Launch +support. + +## What You'll Learn + +- Launching a cooperative kernel with `cuLaunchCooperativeKernel` +- Grid-level synchronization inside a kernel via `cg::grid_group::sync()` +- Sizing the grid to saturate the device with cooperating blocks using + `cuOccupancyMaxActiveBlocksPerMultiprocessor` +- Warp-tile reductions with `cg::reduce` and `cg::tiled_partition<32>` +- Multi-kernel-in-one-launch design for iterative solvers +- Managed (unified) memory shared between host initialization and device + compute + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - dtype sizes + +## Key APIs + +### From `cuda.bindings.runtime` + +- `cudaMallocManaged` / `cudaFree` +- `cudaGetDeviceProperties` (for `managedMemory`, `cooperativeLaunch`, + `multiProcessorCount`) +- `cudaEventCreate` / `cudaEventRecord` / `cudaEventElapsedTime` / `cudaEventDestroy` +- `cudaDeviceSynchronize` + +### From `cuda.bindings.driver` + +- `cuLaunchCooperativeKernel` +- `cuOccupancyMaxActiveBlocksPerMultiprocessor` + +### Kernel-side + +- `cooperative_groups::this_grid()`, `cg::grid_group::sync()`, + `cg::grid_group::thread_rank()`, `cg::grid_group::size()` +- `cg::tiled_partition<32>(cta)`, `cg::reduce(tile, x, cg::plus())` + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 7.0+ that supports Cooperative Kernel + Launch and Unified Memory (all discrete Pascal-and-later GPUs) + +### Software + +- Linux (not supported on Darwin, QNX, or armv7l) +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python conjugateGradientMultiBlockCG.py +python conjugateGradientMultiBlockCG.py --device=1 +``` + +## Expected Output + +Timings depend on GPU. + +``` +> GPU device has 128 Multi-Processors, SM 8.9 compute capability +GPU Final, residual = 3.72e-06, kernel execution time = 4.201 ms +Test Summary: Error amount = 0.000012 +Done +``` + +## Files + +- `conjugateGradientMultiBlockCG.py` - Python implementation using `cuda.bindings` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) - simpler cooperative-launch demo +- [CUDA C++ Programming Guide — Cooperative Groups](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cooperative-groups) diff --git a/cuda_bindings/examples/4_CUDA_Libraries/conjugate_gradient_multi_block_cg.py b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py similarity index 65% rename from cuda_bindings/examples/4_CUDA_Libraries/conjugate_gradient_multi_block_cg.py rename to samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py index 94c9519100f..b3c975de4e4 100644 --- a/cuda_bindings/examples/4_CUDA_Libraries/conjugate_gradient_multi_block_cg.py +++ b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py @@ -1,35 +1,86 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates a conjugate gradient solver using cooperative -# groups and multi-block grid synchronization. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] # /// +""" +Conjugate Gradient solver with cooperative multi-block synchronization + +Solves ``A x = b`` for a random sparse tridiagonal SPD matrix ``A`` using +the Conjugate Gradient method. The entire CG iteration runs inside a +single kernel launched via ``cuLaunchCooperativeKernel``; each iteration +performs several ``cg::grid_group::sync()`` synchronizations to move +between phases without returning to the host. + +The device-side building blocks are: + + * ``gpuSpMV`` -- sparse matrix-vector multiply (CSR format). + * ``gpuSaxpy`` -- ``y = a*x + y``. + * ``gpuDotProduct`` -- warp-shuffle reduce (`cg::reduce`) + atomicAdd across blocks. + * ``gpuScaleVectorAndSaxpy`` and ``gpuCopyVector`` -- CG bookkeeping. + +The high-level flow is the classic CG loop: r = b - A x; loop while +|r|^2 > tol^2 ... update p, alpha, x, r, and re-dot. Because everything +lives in one cooperative kernel, we avoid host round-trips between +iterations. + +The sample is the only end-to-end numerical solver in ``/samples`` that +uses ``grid.sync()``. The simpler [`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) +uses the same underlying feature for a plain reduction. + +Waives with exit code 2 on Darwin / QNX / armv7l, on devices without +Unified Memory, and on devices without Cooperative Kernel Launch support. +""" + import ctypes import math import platform import sys +from pathlib import Path from random import random -import numpy as np +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + +try: + import numpy as np + from cuda_bindings_utils import KernelHelper, check_cuda_errors, find_cuda_device, requirement_not_met -from cuda.bindings import driver as cuda -from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import ( - KernelHelper, - check_cuda_errors, - find_cuda_device, - requirement_not_met, -) + from cuda.bindings import driver as cuda + from cuda.bindings import runtime as cudart +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) -conjugate_gradient_multi_block_cg = """\ + +CG_KERNEL_SOURCE = """\ #line __LINE__ #include #include @@ -120,15 +171,12 @@ float r0 = 0.0, r1, b, a, na; gpuSpMV(I, J, val, nnz, N, alpha, x, Ax, cta, grid); - cg::sync(grid); gpuSaxpy(Ax, r, alpham1, N, grid); - cg::sync(grid); gpuDotProduct(r, r, dot_result, N, cta, grid); - cg::sync(grid); r1 = *dot_result; @@ -141,17 +189,13 @@ } else { gpuCopyVector(r, p, N, grid); } - cg::sync(grid); gpuSpMV(I, J, val, nnz, N, alpha, p, Ax, cta, grid); - if (threadIdx.x == 0 && blockIdx.x == 0) *dot_result = 0.0; - cg::sync(grid); gpuDotProduct(p, Ax, dot_result, N, cta, grid); - cg::sync(grid); a = r1 / *dot_result; @@ -161,14 +205,11 @@ gpuSaxpy(Ax, r, na, N, grid); r0 = r1; - cg::sync(grid); if (threadIdx.x == 0 && blockIdx.x == 0) *dot_result = 0.0; - cg::sync(grid); gpuDotProduct(r, r, dot_result, N, cta, grid); - cg::sync(grid); r1 = *dot_result; @@ -178,11 +219,16 @@ """ -def gen_tridiag(row_offsets, col_indices, values, n, nz): +THREADS_PER_BLOCK = 512 +UNSUPPORTED_SYSTEMS = {"Darwin", "QNX"} +UNSUPPORTED_MACHINES = {"armv7l"} + + +def _gen_tridiag(row_offsets, col_indices, values, n, nz): + """Random symmetric tridiagonal matrix in CSR format.""" row_offsets[0] = 0 col_indices[0] = 0 col_indices[1] = 0 - values[0] = float(random()) + 10.0 values[1] = float(random()) @@ -195,58 +241,45 @@ def gen_tridiag(row_offsets, col_indices, values, n, nz): start = (row_idx - 1) * 3 + 2 col_indices[start] = row_idx - 1 col_indices[start + 1] = row_idx - if row_idx < n - 1: col_indices[start + 2] = row_idx + 1 values[start] = values[start - 1] values[start + 1] = float(random()) + 10.0 - if row_idx < n - 1: values[start + 2] = float(random()) row_offsets[n] = nz -THREADS_PER_BLOCK = 512 -s_sd_kname = "conjugateGradientMultiBlockCG" -UNSUPPORTED_SYSTEMS = {"Darwin", "QNX"} -UNSUPPORTED_MACHINES = {"armv7l"} - - def main(): tol = 1e-5 system_name = platform.system() if system_name in UNSUPPORTED_SYSTEMS: - requirement_not_met(f"{s_sd_kname} is not supported on {system_name}") + requirement_not_met(f"conjugateGradientMultiBlockCG is not supported on {system_name}") machine_name = platform.machine() if machine_name in UNSUPPORTED_MACHINES: - requirement_not_met(f"{s_sd_kname} is not supported on {machine_name}") + requirement_not_met(f"conjugateGradientMultiBlockCG is not supported on {machine_name}") - # This will pick the best possible CUDA capable device dev_id = find_cuda_device() device_prop = check_cuda_errors(cudart.cudaGetDeviceProperties(dev_id)) if not device_prop.managedMemory: requirement_not_met("Unified Memory not supported on this device") - # This sample requires being run on a device that supports Cooperative Kernel - # Launch if not device_prop.cooperativeLaunch: requirement_not_met(f"Selected GPU {dev_id} does not support Cooperative Kernel Launch") - # Statistics about the GPU device print( f"> GPU device has {device_prop.multiProcessorCount} Multi-Processors, " - f"SM {device_prop.major}.{device_prop.minor} compute capabilities\n" + f"SM {device_prop.major}.{device_prop.minor} compute capability" ) - # Get kernel - kernel_helper = KernelHelper(conjugate_gradient_multi_block_cg, dev_id) - _gpu_conjugate_gradient = kernel_helper.get_function(b"gpuConjugateGradient") + kernel_helper = KernelHelper(CG_KERNEL_SOURCE, dev_id) + gpu_cg = kernel_helper.get_function(b"gpuConjugateGradient") - # Generate a random tridiagonal symmetric matrix in CSR format + # ---- Allocate a random tridiagonal SPD system in CSR format ---- n = 1048576 nz = (n - 2) * 3 + 4 @@ -256,18 +289,17 @@ def main(): i_local = (ctypes.c_int * (n + 1)).from_address(i) j_local = (ctypes.c_int * nz).from_address(j) val_local = (ctypes.c_float * nz).from_address(val) - - gen_tridiag(i_local, j_local, val_local, n, nz) + _gen_tridiag(i_local, j_local, val_local, n, nz) x = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float32).itemsize * n, cudart.cudaMemAttachGlobal)) rhs = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float32).itemsize * n, cudart.cudaMemAttachGlobal)) dot_result = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float64).itemsize, cudart.cudaMemAttachGlobal)) x_local = (ctypes.c_float * n).from_address(x) rhs_local = (ctypes.c_float * n).from_address(rhs) - dot_result_local = (ctypes.c_double).from_address(dot_result) + dot_result_local = ctypes.c_double.from_address(dot_result) dot_result_local.value = 0.0 - # temp memory for CG + # ---- CG scratch vectors ---- r = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float32).itemsize * n, cudart.cudaMemAttachGlobal)) p = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float32).itemsize * n, cudart.cudaMemAttachGlobal)) ax = check_cuda_errors(cudart.cudaMallocManaged(np.dtype(np.float32).itemsize * n, cudart.cudaMemAttachGlobal)) @@ -298,12 +330,14 @@ def main(): ) kernel_args = (kernel_args_value, kernel_args_types) + # Grid size: max active blocks per SM * number of SMs -- this saturates + # the device with cooperating blocks so grid.sync() has real work to do. s_mem_size = np.dtype(np.float64).itemsize * ((THREADS_PER_BLOCK // 32) + 1) - num_threads = THREADS_PER_BLOCK num_blocks_per_sm = check_cuda_errors( - cuda.cuOccupancyMaxActiveBlocksPerMultiprocessor(_gpu_conjugate_gradient, num_threads, s_mem_size) + cuda.cuOccupancyMaxActiveBlocksPerMultiprocessor(gpu_cg, THREADS_PER_BLOCK, s_mem_size) ) num_sms = device_prop.multiProcessorCount + dim_grid = cudart.dim3() dim_grid.x = num_sms * num_blocks_per_sm dim_grid.y = 1 @@ -316,7 +350,7 @@ def main(): check_cuda_errors(cudart.cudaEventRecord(start, 0)) check_cuda_errors( cuda.cuLaunchCooperativeKernel( - _gpu_conjugate_gradient, + gpu_cg, dim_grid.x, dim_grid.y, dim_grid.z, @@ -331,39 +365,31 @@ def main(): check_cuda_errors(cudart.cudaEventRecord(stop, 0)) check_cuda_errors(cudart.cudaDeviceSynchronize()) - time = check_cuda_errors(cudart.cudaEventElapsedTime(start, stop)) + ms = check_cuda_errors(cudart.cudaEventElapsedTime(start, stop)) residual = math.sqrt(dot_result_local.value) - print(f"GPU Final, residual = {residual:e}, kernel execution time = {time:f} ms") + print(f"GPU Final, residual = {residual:e}, kernel execution time = {ms:.3f} ms") + # Host reference: compute max_i | (A x)_i - b_i | err = 0.0 for row_idx in range(n): rsum = 0.0 - for elem_idx in range(i_local[row_idx], i_local[row_idx + 1]): rsum += val_local[elem_idx] * x_local[j_local[elem_idx]] + err = max(err, math.fabs(rsum - rhs_local[row_idx])) - diff = math.fabs(rsum - rhs_local[row_idx]) - - if diff > err: - err = diff - - check_cuda_errors(cudart.cudaFree(i)) - check_cuda_errors(cudart.cudaFree(j)) - check_cuda_errors(cudart.cudaFree(val)) - check_cuda_errors(cudart.cudaFree(x)) - check_cuda_errors(cudart.cudaFree(rhs)) - check_cuda_errors(cudart.cudaFree(r)) - check_cuda_errors(cudart.cudaFree(p)) - check_cuda_errors(cudart.cudaFree(ax)) - check_cuda_errors(cudart.cudaFree(dot_result)) + for handle in (i, j, val, x, rhs, r, p, ax, dot_result): + check_cuda_errors(cudart.cudaFree(handle)) check_cuda_errors(cudart.cudaEventDestroy(start)) check_cuda_errors(cudart.cudaEventDestroy(stop)) - print(f"Test Summary: Error amount = {err:f}") + print(f"Test Summary: Error amount = {err:f}") if residual >= tol: print("conjugateGradientMultiBlockCG FAILED", file=sys.stderr) - sys.exit(1) + return 1 + + print("Done") + return 0 if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt new file mode 100644 index 00000000000..ca21c1ac268 --- /dev/null +++ b/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt @@ -0,0 +1,5 @@ +# conjugateGradientMultiBlockCG Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/samples/4_CUDA_Libraries/nvidiaSmi/README.md b/samples/4_CUDA_Libraries/nvidiaSmi/README.md new file mode 100644 index 00000000000..f7e23ef26d3 --- /dev/null +++ b/samples/4_CUDA_Libraries/nvidiaSmi/README.md @@ -0,0 +1,106 @@ +# Sample: Mini nvidia-smi via NVML (Python) + +## Description + +A Python subset of the ``nvidia-smi`` command-line tool, implemented against +the raw ``cuda.bindings.nvml`` module. Prints a compact table with: + +- Driver version and CUDA driver version +- Per-GPU: index, name, persistence mode, PCI bus id, display state, ECC + mode, fan speed, temperature, performance state, power usage / cap, + memory used / total, GPU utilization, compute mode + +This is the canonical low-level demo for ``cuda.bindings.nvml``. The +high-level counterpart is [`samples/systemInfo/`](../../systemInfo/), which +uses ``cuda.core.system`` (which itself wraps NVML). + +Fields that aren't supported on a particular GPU (e.g. fan speed on server +SKUs, display state on headless nodes) are caught with ``NvmlError`` and +printed as ``N/A`` rather than failing the sample. + +## What You'll Learn + +- Initializing and shutting down NVML via ``nvml.init_v2()`` / ``nvml.shutdown()`` +- Enumerating devices with ``device_get_count_v2`` / + ``device_get_handle_by_index_v2`` +- Querying every user-visible field the C ``nvidia-smi`` tool prints in its + default output +- Gracefully tolerating fields that a given GPU does not expose via NVML + +## Key Libraries + +- [`cuda.bindings.nvml`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/nvml.html) - raw NVML bindings + +## Key APIs + +### From `cuda.bindings.nvml` + +- `init_v2` / `shutdown` +- `system_get_driver_version` / `system_get_cuda_driver_version` +- `device_get_count_v2` / `device_get_handle_by_index_v2` +- `device_get_name` +- `device_get_persistence_mode` (+ `EnableState`) +- `device_get_pci_info_v3` +- `device_get_display_active` +- `device_get_ecc_mode` +- `device_get_fan_speed` +- `device_get_temperature_v` (+ `TemperatureSensors`) +- `device_get_performance_state` +- `device_get_power_usage` / `device_get_power_management_limit` +- `device_get_memory_info_v2` +- `device_get_utilization_rates` +- `device_get_compute_mode` (+ `ComputeMode`) + +## Requirements + +### Hardware + +- Any NVIDIA GPU visible to NVML + +### Software + +- CUDA Toolkit 13.0 or newer (only for the accompanying NVML library; no + CUDA runtime is used) +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python nvidiaSmi.py +``` + +## Expected Output + +Content depends on the system. + +``` ++-----------------------------------------------------------------------------------------+ +| NVIDIA-MINI-SMI 560.35.03 Driver Version: 560.35.03 CUDA Version: 12.6 | ++-----------------------------------------------------------------------------------------+ +| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | +| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | ++============================================================================================+ +| 0 NVIDIA GeForce RTX 4090 Off | 0000:01:00.0 Off | Off | +| N/A 35C P8 12W / 450W | 0MiB / 24564MiB | 0% Default | ++-----------------------------------------------------------------------------------------+ +``` + +## Files + +- `nvidiaSmi.py` - Python implementation using `cuda.bindings.nvml` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` NVML API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/nvml.html) +- [`samples/systemInfo/`](../../systemInfo/) - the high-level `cuda.core.system` equivalent +- [NVML Reference](https://docs.nvidia.com/deploy/nvml-api/index.html) diff --git a/cuda_bindings/examples/4_CUDA_Libraries/nvidia_smi.py b/samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py similarity index 64% rename from cuda_bindings/examples/4_CUDA_Libraries/nvidia_smi.py rename to samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py index ca229e52681..94e63718917 100644 --- a/cuda_bindings/examples/4_CUDA_Libraries/nvidia_smi.py +++ b/samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py @@ -1,32 +1,74 @@ -# Copyright 2026 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates the core cuda.bindings.nvml functionality by -# implementing a subset of the NVIDIA System Management Interface (nvidia-smi) -# command line tool in Python. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ - +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1"] +# dependencies = ["cuda-python>=13.0.0"] # /// +""" +Mini nvidia-smi with cuda.bindings.nvml + +A Python subset of the ``nvidia-smi`` command-line tool implemented against +the raw ``cuda.bindings.nvml`` module. Prints a compact table with: + + * driver version, CUDA driver version + * per-GPU: index, name, persistence mode, PCI bus id, display state, + ECC mode, fan speed, temperature, performance state, + power usage / cap, memory used / total, GPU utilization, compute mode + +This sample is the canonical low-level demo for +``cuda.bindings.nvml``. The high-level counterpart lives in +[`samples/systemInfo/`](../../systemInfo/), which wraps NVML through +``cuda.core.system``. + +Note: fields like fan speed, power draw, ECC state and display state come +back as ``NvmlError`` on GPUs that don't report them (server SKUs, headless +setups). The sample tolerates those with per-field ``try/except`` and +prints ``N/A``. +""" + import sys -from cuda.bindings import nvml +try: + from cuda.bindings import nvml +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + ################################################################################## # FORMATTING HELPERS - # Utilities to help format the output table. See below for NVML usage. +################################################################################## def format_size(bytes_val: int) -> str: - """Formats bytes to MiB.""" + """Format bytes as MiB, matching nvidia-smi's memory column.""" return f"{bytes_val / (1024 * 1024):.0f}MiB" @@ -44,10 +86,7 @@ def _create_line_format(self, descriptor): parts.append("| ") sizes.append(1) for i, align in enumerate(section): - if i == len(section) - 1: - direct = ">" - else: - direct = "<" + direct = ">" if i == len(section) - 1 else "<" parts.append(f"{{:{direct}{align}}} ") sizes[-1] += align + 1 parts.append("|") @@ -98,7 +137,8 @@ def print_table(metadata, devices): ################################################################################## -# NVML USAGE EXAMPLES +# NVML USAGE +################################################################################## def collect_info(): @@ -110,17 +150,12 @@ def collect_info(): metadata["cuda_version"] = f"{cuda_major}.{cuda_minor}" devices = [] - device_count = nvml.device_get_count_v2() for i in range(device_count): - device = {} - device["index"] = i - + device = {"index": i} handle = nvml.device_get_handle_by_index_v2(i) - - name = nvml.device_get_name(handle) - device["name"] = name + device["name"] = nvml.device_get_name(handle) try: persistence = nvml.device_get_persistence_mode(handle) @@ -176,36 +211,26 @@ def collect_info(): usage_str = f"{power_usage // 1000}W" except nvml.NvmlError: usage_str = "N/A" - try: power_cap = nvml.device_get_power_management_limit(handle) # mW cap_str = f"{power_cap // 1000}W" except nvml.NvmlError: cap_str = "N/A" - - pwr_str = f"{usage_str} / {cap_str}" - device["power"] = pwr_str + device["power"] = f"{usage_str} / {cap_str}" try: mem_info = nvml.device_get_memory_info_v2(handle) except nvml.NvmlError: - mem_str = "N/A" + device["memory"] = "N/A" else: - mem_used = format_size(mem_info.used) - mem_total = format_size(mem_info.total) - mem_str = f"{mem_used} / {mem_total}" - - device["memory"] = mem_str + device["memory"] = f"{format_size(mem_info.used)} / {format_size(mem_info.total)}" try: util_rates = nvml.device_get_utilization_rates(handle) except nvml.NvmlError: - util_str = "N/A" + device["utilization"] = "N/A" else: - gpu_util = util_rates.gpu - util_str = f"{gpu_util: >3}%" - - device["utilization"] = util_str + device["utilization"] = f"{util_rates.gpu: >3}%" try: compute_mode = nvml.device_get_compute_mode(handle) @@ -231,8 +256,8 @@ def main(): try: nvml.init_v2() except nvml.NvmlError as e: - print(f"Failed to initialize NVML: {e}") - sys.exit(1) + print(f"Failed to initialize NVML: {e}", file=sys.stderr) + return 1 try: metadata, devices = collect_info() @@ -240,6 +265,8 @@ def main(): finally: nvml.shutdown() + return 0 + if __name__ == "__main__": - main() + sys.exit(main()) diff --git a/samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt b/samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt new file mode 100644 index 00000000000..aad92dc8a03 --- /dev/null +++ b/samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt @@ -0,0 +1,4 @@ +# nvidiaSmi Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 diff --git a/samples/Utilities/cuda_bindings_utils.py b/samples/Utilities/cuda_bindings_utils.py new file mode 100644 index 00000000000..66b049132de --- /dev/null +++ b/samples/Utilities/cuda_bindings_utils.py @@ -0,0 +1,243 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +Common helpers for cuda-bindings-flavored samples. + +Provides small utilities used by samples that program directly against +``cuda.bindings.driver`` / ``cuda.bindings.runtime`` / ``cuda.bindings.nvrtc`` +/ ``cuda.bindings.nvml``, so each sample stays focused on the concept it +demonstrates instead of the boilerplate: + + * ``check_cuda_errors(result)`` -- unwrap the ``(status, *values)`` tuple + returned by any ``cuda.bindings`` call, raising on error. + * ``KernelHelper`` -- compile a CUDA C++ source string with NVRTC and load + the resulting cubin/PTX as a module. + * ``find_cuda_device()`` / ``find_cuda_device_drv()`` -- pick a CUDA device, + honoring an optional ``--device=`` CLI flag. + * ``check_cmd_line_flag(flag)`` / ``get_cmd_line_argument_int(flag)`` -- + minimal CLI flag helpers used by the upstream cuda-samples style. + * ``requirement_not_met(msg)`` -- print ``msg`` to stderr and exit with the + orchestrator-recognized WAIVED status (exit code 2). + * ``check_compute_capability_too_low(dev_id, (major, minor))`` -- waive when + the current device is below a required compute capability. + +These helpers were adapted from the private example-helpers module that +used to ship with ``cuda.bindings`` before the examples migration, with +one difference: ``requirement_not_met`` exits with code 2 (WAIVED, +recognized by the ``samples/`` orchestrator) rather than the historic +code 1. +""" + +import sys + +import numpy as np + +from cuda import pathfinder +from cuda.bindings import driver as cuda +from cuda.bindings import nvrtc +from cuda.bindings import runtime as cudart + +EXIT_WAIVED = 2 + + +# --------------------------------------------------------------------------- +# CLI helpers +# --------------------------------------------------------------------------- + + +def check_cmd_line_flag(flag: str) -> bool: + """Return True when any argv entry starts with ``flag`` (e.g. ``device=``).""" + return any(arg.startswith(flag) for arg in sys.argv[1:]) + + +def get_cmd_line_argument_int(flag: str) -> int: + """Return the integer following ``flag=`` in argv, or 0 if not present.""" + for arg in sys.argv[1:]: + if arg.startswith(flag): + _, _, value = arg.partition("=") + if value: + try: + return int(value) + except ValueError: + return 0 + return 0 + + +# --------------------------------------------------------------------------- +# Waive helpers +# --------------------------------------------------------------------------- + + +def requirement_not_met(message: str) -> None: + """Print ``message`` to stderr and exit with WAIVED status (exit code 2).""" + print(message, file=sys.stderr) + sys.exit(EXIT_WAIVED) + + +# --------------------------------------------------------------------------- +# Error handling +# --------------------------------------------------------------------------- + + +def _cuda_get_error_enum(error): + if isinstance(error, cuda.CUresult): + err, name = cuda.cuGetErrorName(error) + return name if err == cuda.CUresult.CUDA_SUCCESS else "" + if isinstance(error, cudart.cudaError_t): + return cudart.cudaGetErrorName(error)[1] + if isinstance(error, nvrtc.nvrtcResult): + return nvrtc.nvrtcGetErrorString(error)[1] + raise RuntimeError(f"Unknown error type: {error}") + + +def check_cuda_errors(result): + """Unwrap ``result = (status, *values)`` from a ``cuda.bindings`` call. + + Raises ``RuntimeError`` when ``status`` indicates a failure; otherwise + returns the single value (for two-tuples), all trailing values (for + three-or-more-tuples), or ``None`` (for one-tuples). + """ + if result[0].value: + raise RuntimeError(f"CUDA error code={result[0].value}({_cuda_get_error_enum(result[0])})") + if len(result) == 1: + return None + if len(result) == 2: + return result[1] + return result[1:] + + +# --------------------------------------------------------------------------- +# Device selection +# --------------------------------------------------------------------------- + + +def find_cuda_device() -> int: + """Runtime-API device selection. Honors ``--device=`` on argv.""" + dev_id = 0 + if check_cmd_line_flag("device="): + dev_id = get_cmd_line_argument_int("device=") + check_cuda_errors(cudart.cudaSetDevice(dev_id)) + return dev_id + + +def find_cuda_device_drv(): + """Driver-API device selection. Honors ``--device=`` on argv.""" + dev_id = 0 + if check_cmd_line_flag("device="): + dev_id = get_cmd_line_argument_int("device=") + check_cuda_errors(cuda.cuInit(0)) + return check_cuda_errors(cuda.cuDeviceGet(dev_id)) + + +def check_compute_capability_too_low(dev_id: int, required_cc_major_minor) -> None: + """Waive if the current device is below the required compute capability.""" + cc_major = check_cuda_errors( + cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMajor, dev_id) + ) + cc_minor = check_cuda_errors( + cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMinor, dev_id) + ) + have = (cc_major, cc_minor) + if have < tuple(required_cc_major_minor): + requirement_not_met( + f"CUDA device compute capability too low: have={have!r}, required={tuple(required_cc_major_minor)!r}" + ) + + +# --------------------------------------------------------------------------- +# NVRTC compile + module load helper +# --------------------------------------------------------------------------- + + +class KernelHelper: + """Compile a CUDA C++ source string via NVRTC and load it as a module. + + On construction the source is compiled to a cubin (or PTX on older NVRTC), + the resulting module is loaded, and ``get_function(name)`` returns the + ``CUfunction`` for the given kernel entry point. + + The NVRTC include path is populated via ``cuda.pathfinder`` so kernels + that ``#include`` CUDA headers (e.g. ``cooperative_groups.h``) resolve + against the currently installed toolkit. + """ + + def __init__(self, code: str, dev_id: int) -> None: + include_dirs = [] + for libname in ("cudart", "cccl"): + hdr_dir = pathfinder.find_nvidia_header_directory(libname) + if hdr_dir is None: + requirement_not_met(f'pathfinder.find_nvidia_header_directory("{libname}") returned None') + include_dirs.append(hdr_dir) + + prog = check_cuda_errors(nvrtc.nvrtcCreateProgram(str.encode(code), b"sourceCode.cu", 0, None, None)) + + # Initialize CUDA runtime (needed on the very first device call). + check_cuda_errors(cudart.cudaFree(0)) + + major = check_cuda_errors( + cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMajor, dev_id) + ) + minor = check_cuda_errors( + cudart.cudaDeviceGetAttribute(cudart.cudaDeviceAttr.cudaDevAttrComputeCapabilityMinor, dev_id) + ) + _, nvrtc_minor = check_cuda_errors(nvrtc.nvrtcVersion()) + use_cubin = nvrtc_minor >= 1 + prefix = "sm" if use_cubin else "compute" + arch_arg = bytes(f"--gpu-architecture={prefix}_{major}{minor}", "ascii") + + opts = [ + b"--fmad=true", + arch_arg, + b"--std=c++17", + b"-default-device", + ] + for inc_dir in include_dirs: + opts.append(f"--include-path={inc_dir}".encode()) + + try: + check_cuda_errors(nvrtc.nvrtcCompileProgram(prog, len(opts), opts)) + except RuntimeError as err: + log_size = check_cuda_errors(nvrtc.nvrtcGetProgramLogSize(prog)) + log = b" " * log_size + check_cuda_errors(nvrtc.nvrtcGetProgramLog(prog, log)) + print(log.decode(), file=sys.stderr) + print(err, file=sys.stderr) + sys.exit(1) + + if use_cubin: + data_size = check_cuda_errors(nvrtc.nvrtcGetCUBINSize(prog)) + data = b" " * data_size + check_cuda_errors(nvrtc.nvrtcGetCUBIN(prog, data)) + else: + data_size = check_cuda_errors(nvrtc.nvrtcGetPTXSize(prog)) + data = b" " * data_size + check_cuda_errors(nvrtc.nvrtcGetPTX(prog, data)) + + self.module = check_cuda_errors(cuda.cuModuleLoadData(np.char.array(data))) + + def get_function(self, name: bytes): + return check_cuda_errors(cuda.cuModuleGetFunction(self.module, name)) diff --git a/samples/extra/isoFdModelling/README.md b/samples/extra/isoFdModelling/README.md new file mode 100644 index 00000000000..d9fe4ca80c8 --- /dev/null +++ b/samples/extra/isoFdModelling/README.md @@ -0,0 +1,111 @@ +# Sample: Multi-GPU Isotropic FD Wave Propagation (Python) + +## Description + +3D acoustic finite-difference wave propagator, striped across every visible +CUDA device. The X-Y volume is split evenly and each device owns a subset +of Z slices; neighboring subvolumes exchange halo regions via +``cuMemcpyPeerAsync`` between timesteps. + +Compute and halo exchange run on separate CUDA streams per device +(``streamCenter`` and ``streamHalo``) so halo copies overlap with the +interior update. Peer-to-peer access is enabled with +``cuCtxEnablePeerAccess`` between every pair of participating devices. + +The kernels compute a 2-nd-order-in-time / 8-th-order-in-space stencil +using vectorized ``float2`` loads plus shared memory tiling for the +horizontal neighborhood, and register accumulation for the vertical +neighborhood — a fairly realistic HPC kernel. + +This is the only sample in ``/samples`` that teaches the multi-GPU HPC +pattern: per-device contexts, halo exchange via ``cuMemcpyPeerAsync``, +and compute/comm overlap on two streams per device. + +Waives with exit code 2 unless there are 2+ CUDA devices with +peer-to-peer access enabled between them. The sample optionally displays +the final wavefield with ``matplotlib`` if available; the display is +skipped when ``matplotlib`` is not installed. + +## What You'll Learn + +- Managing one CUDA context per device with `cuCtxCreate`, `cuCtxSetCurrent`, + and `cuCtxEnablePeerAccess` +- Splitting a volume across GPUs and exchanging halos with + `cuMemcpyPeerAsync` +- Overlapping compute (`streamCenter`) with halo exchange (`streamHalo`) on + two streams per device using `cuStreamWaitEvent` +- A realistic FD wave kernel using shared-memory tiling, register queues, + and vectorized `float2` loads +- Feature-detecting P2P support with `cuDeviceCanAccessPeer` before + attempting a multi-GPU run + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings +- `numpy` - array plumbing on the host +- `matplotlib` (optional) - final-wavefield display + +## Key APIs + +### From `cuda.bindings.driver` + +- `cuCtxCreate`, `cuCtxSetCurrent`, `cuCtxGetDevice`, `cuCtxDestroy` +- `cuCtxEnablePeerAccess`, `cuDeviceCanAccessPeer` +- `cuStreamCreate` / `cuStreamDestroy` / `cuStreamSynchronize` +- `cuMemAlloc` / `cuMemFree` / `cuMemsetD32` +- `cuMemcpyPeerAsync`, `cuMemcpyDtoHAsync`, `cuMemcpyHtoDAsync` +- `cuLaunchKernel` + +## Requirements + +### Hardware + +- **2 or more CUDA-capable GPUs with peer-to-peer access enabled between + them.** On many consumer GPUs (e.g. GeForce RTX 4090) P2P is disabled; + the sample waives with exit code 2 in that case. +- Data-center / NVLink-connected GPUs (A100, H100, etc.) are the intended + target hardware. + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` +- `matplotlib` (optional) + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python isoFdModelling.py +``` + +## Expected Output + +On a P2P-capable multi-GPU system the sample propagates a wavefield for +several hundred timesteps and prints per-iteration stats. On systems +without peer access it waives: + +``` +Two or more GPUs with Peer-to-Peer access capability are required +``` + +## Files + +- `isoFdModelling.py` - Python implementation using `cuda.bindings.driver` +- `README.md` - This file +- `requirements.txt` - Sample dependencies +- `../../Utilities/cuda_bindings_utils.py` - Shared bindings helpers (imported by this sample) + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [`samples/simpleP2P/`](../../simpleP2P/) - basic peer-to-peer access +- [CUDA C++ Programming Guide — Peer-to-Peer Memory Access](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#peer-to-peer-memory-access) diff --git a/cuda_bindings/examples/extra/iso_fd_modelling.py b/samples/extra/isoFdModelling/isoFdModelling.py similarity index 90% rename from cuda_bindings/examples/extra/iso_fd_modelling.py rename to samples/extra/isoFdModelling/isoFdModelling.py index 2bb4768a3c2..6fb9d8366cd 100644 --- a/cuda_bindings/examples/extra/iso_fd_modelling.py +++ b/samples/extra/isoFdModelling/isoFdModelling.py @@ -1,24 +1,64 @@ -# Copyright 2021-2025 NVIDIA Corporation. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# ################################################################################ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. # -# This example demonstrates isotropic finite-difference wave propagation -# modelling across multiple GPUs with peer-to-peer halo exchange. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. # -# ################################################################################ +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda_bindings>13.2.1", "numpy", "matplotlib"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] # /// +""" +Multi-GPU isotropic finite-difference wave propagation + +3D acoustic FD wave propagator, striped across every visible CUDA device. +The X-Y volume is split evenly and each device owns a subset of Z slices; +neighboring subvolumes exchange halo regions via cuMemcpyPeerAsync between +timesteps. Compute (streamCenter) and halo exchange (streamHalo) run on +separate streams so the halo copies overlap with the interior update. + +This is the only sample in /samples that teaches the multi-GPU HPC +pattern: per-device contexts, halo exchange via cuMemcpyPeerAsync, +and compute/comm overlap on two streams per device. + +Note: the sample optionally displays the final wavefield with matplotlib +if it is available; when running as a smoke test in CI you can pass +--no-display (default behavior). +""" + +import sys +from pathlib import Path + +# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) + import time import numpy as np +from cuda_bindings_utils import KernelHelper, check_cuda_errors, requirement_not_met from cuda.bindings import driver as cuda from cuda.bindings import runtime as cudart -from cuda.bindings._example_helpers import KernelHelper, check_cuda_errors, requirement_not_met iso_propagator = """\ extern "C" diff --git a/samples/extra/isoFdModelling/requirements.txt b/samples/extra/isoFdModelling/requirements.txt new file mode 100644 index 00000000000..05f280873bb --- /dev/null +++ b/samples/extra/isoFdModelling/requirements.txt @@ -0,0 +1,9 @@ +# isoFdModelling Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 +# Optional: matplotlib enables the wavefield display at the end of the run. +# The sample runs without it; the display is skipped when matplotlib is not +# available. +matplotlib diff --git a/samples/extra/jitProgram/README.md b/samples/extra/jitProgram/README.md new file mode 100644 index 00000000000..dc2c959862e --- /dev/null +++ b/samples/extra/jitProgram/README.md @@ -0,0 +1,105 @@ +# Sample: Raw NVRTC + Driver API SAXPY (Python) + +## Description + +Walks through the raw NVRTC + driver-API pipeline for compiling and +launching a CUDA kernel. This is the "under the hood" companion to the +higher-level [`samples/jitLtoLinking/`](../../jitLtoLinking/) sample: +``jitLtoLinking`` uses ``cuda.core.Program`` and ``cuda.core.Linker``; +this sample makes the individual NVRTC + ``cuModule*`` calls those +higher-level abstractions wrap. + +The full flow is: + +``` +nvrtcCreateProgram -> nvrtcCompileProgram -> nvrtcGetProgramLog + -> nvrtcGetCUBIN / nvrtcGetPTX +cuModuleLoadData -> cuModuleGetFunction("saxpy") +cuLaunchKernel -> cuStreamSynchronize +cuModuleUnload -> cuCtxDestroy +``` + +The kernel is the standard single-precision AXPY: ``out = a * x + y``. + +## What You'll Learn + +- The complete NVRTC compile pipeline: create program, compile with + options, retrieve the log, retrieve CUBIN (or PTX on older NVRTC) +- Loading a compiled module with `cuModuleLoadData` and resolving a kernel + entry point with `cuModuleGetFunction` +- Passing typed kernel arguments through `cuLaunchKernel` using a + `(values, ctypes)` pair +- Async copies + stream synchronization for host / device transfers +- Correctly tearing down all driver-owned resources + +## Key Libraries + +- [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - low-level driver + NVRTC bindings +- `numpy` - host-side input/output buffers + +## Key APIs + +### From `cuda.bindings.nvrtc` + +- `nvrtcCreateProgram` / `nvrtcCompileProgram` +- `nvrtcGetProgramLogSize` / `nvrtcGetProgramLog` +- `nvrtcGetCUBINSize` / `nvrtcGetCUBIN` +- `nvrtcGetPTXSize` / `nvrtcGetPTX` +- `nvrtcVersion` + +### From `cuda.bindings.driver` + +- `cuInit`, `cuDeviceGet`, `cuDeviceGetAttribute` +- `cuCtxCreate` / `cuCtxDestroy` +- `cuModuleLoadData` / `cuModuleGetFunction` / `cuModuleUnload` +- `cuMemAlloc` / `cuMemFree` +- `cuStreamCreate` / `cuStreamSynchronize` / `cuStreamDestroy` +- `cuMemcpyHtoDAsync` / `cuMemcpyDtoHAsync` +- `cuLaunchKernel` + +## Requirements + +### Hardware + +- NVIDIA GPU with Compute Capability 5.0 or higher + +### Software + +- CUDA Toolkit 13.0 or newer +- Python 3.10 or newer +- `cuda-python` (>=13.0.0) +- `numpy` + +## Installation + +```bash +pip install -r requirements.txt +``` + +## How to Run + +```bash +python jitProgram.py +``` + +## Expected Output + +``` +SAXPY through raw NVRTC + driver API verified. +Done +``` + +(An empty compile log line may print before the verification message.) + +## Files + +- `jitProgram.py` - Python implementation using raw `cuda.bindings.nvrtc` + `cuda.bindings.driver` +- `README.md` - This file +- `requirements.txt` - Sample dependencies + +## See Also + +- [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) +- [`cuda.bindings` NVRTC API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/nvrtc.html) +- [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) +- [`samples/jitLtoLinking/`](../../jitLtoLinking/) - the high-level `cuda.core` equivalent diff --git a/samples/extra/jitProgram/jitProgram.py b/samples/extra/jitProgram/jitProgram.py new file mode 100644 index 00000000000..95746f919ad --- /dev/null +++ b/samples/extra/jitProgram/jitProgram.py @@ -0,0 +1,230 @@ +# Copyright (c) 2025, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# /// script +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# /// + +""" +Raw NVRTC compilation + driver-API module loading + +This is the under-the-hood companion to the high-level +[`samples/jitLtoLinking/`](../../jitLtoLinking/) sample. Where +``jitLtoLinking`` uses ``cuda.core.Program`` and ``cuda.core.Linker`` to +compile and link device code, this sample walks through the raw calls that +those higher-level classes wrap: + + * ``nvrtcCreateProgram`` -> ``nvrtcCompileProgram`` -> retrieve the log + * ``nvrtcGetCUBIN`` (or ``nvrtcGetPTX`` on older NVRTC) -> device bytes + * ``cuModuleLoadData`` -> load the module + * ``cuModuleGetFunction`` -> get a ``CUfunction`` for a named symbol + * ``cuLaunchKernel`` -> launch it, then ``cuModuleUnload`` + +Read this alongside ``jitLtoLinking`` when you want to see what the +``cuda.core`` compile/link pipeline is doing internally. +""" + +import ctypes +import sys + +try: + import numpy as np + + from cuda.bindings import driver as cuda + from cuda.bindings import nvrtc +except ImportError as e: + print(f"Error: Required package not found: {e}") + print("Please install from requirements.txt:") + print(" pip install -r requirements.txt") + sys.exit(1) + + +SAXPY_KERNEL = """\ +extern "C" __global__ +void saxpy(float a, float *x, float *y, float *out, size_t n) +{ + size_t tid = blockIdx.x * blockDim.x + threadIdx.x; + if (tid < n) { + out[tid] = a * x[tid] + y[tid]; + } +} +""" + + +def _assert_drv(err): + if isinstance(err, cuda.CUresult): + if err != cuda.CUresult.CUDA_SUCCESS: + raise RuntimeError(f"Cuda Error: {err}") + elif isinstance(err, nvrtc.nvrtcResult): + if err != nvrtc.nvrtcResult.NVRTC_SUCCESS: + raise RuntimeError(f"Nvrtc Error: {err}") + else: + raise RuntimeError(f"Unknown error type: {err}") + + +def main(): + # ---- 1) Initialize the driver and get a device + context ---- + (err,) = cuda.cuInit(0) + _assert_drv(err) + + err, cu_device = cuda.cuDeviceGet(0) + _assert_drv(err) + + err, context = cuda.cuCtxCreate(None, 0, cu_device) + _assert_drv(err) + + # ---- 2) Create an NVRTC program from the SAXPY source ---- + err, prog = nvrtc.nvrtcCreateProgram(str.encode(SAXPY_KERNEL), b"saxpy.cu", 0, None, None) + _assert_drv(err) + + # ---- 3) Pick a target architecture and choose CUBIN vs PTX ---- + err, major = cuda.cuDeviceGetAttribute( + cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, cu_device + ) + _assert_drv(err) + err, minor = cuda.cuDeviceGetAttribute( + cuda.CUdevice_attribute.CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, cu_device + ) + _assert_drv(err) + err, _nvrtc_major, nvrtc_minor = nvrtc.nvrtcVersion() + _assert_drv(err) + use_cubin = nvrtc_minor >= 1 + prefix = "sm" if use_cubin else "compute" + arch_arg = bytes(f"--gpu-architecture={prefix}_{major}{minor}", "ascii") + + # ---- 4) Compile and print the log (may be empty on success) ---- + opts = [b"--fmad=false", arch_arg] + (err,) = nvrtc.nvrtcCompileProgram(prog, len(opts), opts) + _assert_drv(err) + + err, log_size = nvrtc.nvrtcGetProgramLogSize(prog) + _assert_drv(err) + log = b" " * log_size + (err,) = nvrtc.nvrtcGetProgramLog(prog, log) + _assert_drv(err) + print(log.decode()) + + # ---- 5) Retrieve either CUBIN or PTX bytes ---- + if use_cubin: + err, data_size = nvrtc.nvrtcGetCUBINSize(prog) + _assert_drv(err) + data = b" " * data_size + (err,) = nvrtc.nvrtcGetCUBIN(prog, data) + _assert_drv(err) + else: + err, data_size = nvrtc.nvrtcGetPTXSize(prog) + _assert_drv(err) + data = b" " * data_size + (err,) = nvrtc.nvrtcGetPTX(prog, data) + _assert_drv(err) + + # ---- 6) Load the module and get the kernel entry point ---- + data = np.char.array(data) + err, module = cuda.cuModuleLoadData(data) + _assert_drv(err) + err, kernel = cuda.cuModuleGetFunction(module, b"saxpy") + _assert_drv(err) + + # ---- 7) Launch the kernel and verify ---- + num_threads = 128 + num_blocks = 32 + a = np.float32(2.0) + n = np.array(num_threads * num_blocks, dtype=np.uint32) + buffer_size = n * a.itemsize + + err, d_x = cuda.cuMemAlloc(buffer_size) + _assert_drv(err) + err, d_y = cuda.cuMemAlloc(buffer_size) + _assert_drv(err) + err, d_out = cuda.cuMemAlloc(buffer_size) + _assert_drv(err) + + h_x = np.random.rand(n).astype(dtype=np.float32) + h_y = np.random.rand(n).astype(dtype=np.float32) + h_out = np.zeros(n).astype(dtype=np.float32) + + err, stream = cuda.cuStreamCreate(0) + _assert_drv(err) + + (err,) = cuda.cuMemcpyHtoDAsync(d_x, h_x, buffer_size, stream) + _assert_drv(err) + (err,) = cuda.cuMemcpyHtoDAsync(d_y, h_y, buffer_size, stream) + _assert_drv(err) + (err,) = cuda.cuStreamSynchronize(stream) + _assert_drv(err) + + # Sanity: host output is still zeros before the kernel runs. + h_z = a * h_x + h_y + if np.allclose(h_out, h_z): + raise ValueError("Error inside tolerance for host-device vectors") + + arg_values = (a, d_x, d_y, d_out, n) + arg_types = (ctypes.c_float, None, None, None, ctypes.c_size_t) + (err,) = cuda.cuLaunchKernel( + kernel, + num_blocks, + 1, + 1, # grid dim + num_threads, + 1, + 1, # block dim + 0, + stream, # sharedMemBytes, stream + (arg_values, arg_types), + 0, + ) + _assert_drv(err) + + (err,) = cuda.cuMemcpyDtoHAsync(h_out, d_out, buffer_size, stream) + _assert_drv(err) + (err,) = cuda.cuStreamSynchronize(stream) + _assert_drv(err) + + h_z = a * h_x + h_y + if not np.allclose(h_out, h_z): + raise ValueError("Error outside tolerance for host-device vectors") + + # ---- 8) Tear down ---- + (err,) = cuda.cuStreamDestroy(stream) + _assert_drv(err) + (err,) = cuda.cuMemFree(d_x) + _assert_drv(err) + (err,) = cuda.cuMemFree(d_y) + _assert_drv(err) + (err,) = cuda.cuMemFree(d_out) + _assert_drv(err) + (err,) = cuda.cuModuleUnload(module) + _assert_drv(err) + (err,) = cuda.cuCtxDestroy(context) + _assert_drv(err) + + print("SAXPY through raw NVRTC + driver API verified.") + print("Done") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/samples/extra/jitProgram/requirements.txt b/samples/extra/jitProgram/requirements.txt new file mode 100644 index 00000000000..484bae204a8 --- /dev/null +++ b/samples/extra/jitProgram/requirements.txt @@ -0,0 +1,5 @@ +# jitProgram Sample Requirements +# Install with: pip install -r requirements.txt + +cuda-python>=13.0.0 +numpy>=1.24 diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh index 7d46a39f85f..2085e62c909 100755 --- a/scripts/run_tests.sh +++ b/scripts/run_tests.sh @@ -7,7 +7,7 @@ set -euo pipefail # Simple, dependency-free orchestrator to run tests for all packages. # Usage: -# scripts/run_tests.sh [ -v|--verbose ] [ --install | --no-install ] [ --with-cython | --skip-cython ] [ --with-examples | --skip-examples ] [ --with-ptds ] +# scripts/run_tests.sh [ -v|--verbose ] [ --install | --no-install ] [ --with-cython | --skip-cython ] [ --with-ptds ] # scripts/run_tests.sh [ flags ] # pathfinder -> bindings -> core # scripts/run_tests.sh [ flags ] core # only core # scripts/run_tests.sh [ flags ] bindings # only bindings @@ -35,8 +35,6 @@ Options: --no-install Skip install checks (assume environment is ready) --with-cython Build and run cython tests (needs CUDA_HOME for core) --skip-cython Skip cython tests (default) - --with-examples Run examples where applicable (e.g., cuda_bindings/examples) - --skip-examples Skip running examples (default) --with-ptds Re-run cuda_bindings tests with PTDS (CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM=1) -h, --help Show this help and exit @@ -51,7 +49,6 @@ USAGE # Parse optional flags VERBOSE=0 RUN_CYTHON=0 -RUN_EXAMPLES=1 RUN_PTDS=1 INSTALL_MODE=auto # auto|force|skip while [[ $# -gt 0 ]]; do @@ -80,12 +77,9 @@ while [[ $# -gt 0 ]]; do RUN_CYTHON=0 shift ;; - --with-examples) - RUN_EXAMPLES=1 - shift - ;; - --skip-examples) - RUN_EXAMPLES=0 + --with-examples|--skip-examples) + # No-op: examples were migrated to the top-level ./samples directory + # and are exercised by the cuda_core suite. shift ;; --with-ptds) @@ -203,13 +197,8 @@ run_bindings() { local rc_ptds=$? add_result "bindings-ptds" "${rc_ptds}" fi - if [ ${RUN_EXAMPLES} -eq 1 ] && [ -d examples ]; then - # Bindings examples are pytest-based (contain their own pytest.ini) - echo "[examples] cuda_bindings/examples" - run_pytest examples/ - local rc_ex=$? - add_result "bindings-examples" "${rc_ex}" - fi + # Note: cuda_bindings examples were migrated to the top-level ./samples + # directory and are exercised by the cuda_core suite. if [ ${RUN_CYTHON} -eq 1 ] && [ -d tests/cython ]; then if [ -x tests/cython/build_tests.sh ]; then echo "[build] cuda_bindings cython tests" @@ -228,13 +217,9 @@ run_core() { run_pytest tests/ local rc=$? add_result "core" "${rc}" - if [ ${RUN_EXAMPLES} -eq 1 ] && [ -d examples ] && [ -f examples/pytest.ini ]; then - # Only run examples under pytest if they are configured as tests - echo "[examples] cuda_core/examples" - run_pytest examples/ - local rc_ex=$? - add_result "core-examples" "${rc_ex}" - fi + # Note: cuda_core examples were migrated to the top-level ./samples + # directory; the samples are exercised as parametrized tests inside + # cuda_core/tests/example_tests/test_samples.py above. if [ ${RUN_CYTHON} -eq 1 ] && [ -d tests/cython ]; then if [ -x tests/cython/build_tests.sh ]; then echo "[build] cuda_core cython tests" From 70a8a7aa8a54644dc34a6bcaef5cabe2d59847b4 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Thu, 16 Jul 2026 15:10:18 -0500 Subject: [PATCH 07/11] Add missing deps for samples --- cuda_core/pixi.lock | 3794 ++++++++++++++--- cuda_core/pixi.toml | 39 +- .../extra/isoFdModelling/isoFdModelling.py | 2 +- samples/launchConfigTuning/README.md | 4 +- samples/matrixMulSharedMem/README.md | 20 - .../matrixMulSharedMem/matrixMulSharedMem.py | 9 +- samples/matrixMulSharedMem/requirements.txt | 20 +- samples/multiGPUGradientAverage/README.md | 2 +- samples/pageRank/README.md | 2 +- samples/pageRank/pageRank.py | 2 +- samples/simpleP2P/README.md | 2 +- 11 files changed, 3221 insertions(+), 675 deletions(-) diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index b1d5bc5dbaa..fcba6aa106d 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -2254,14 +2254,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.0-py314h4a8dc5f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda @@ -2280,8 +2283,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h1bf8424_901.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda @@ -2293,6 +2299,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda @@ -2312,12 +2319,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h5875eb1_mkl.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda @@ -2325,19 +2335,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_hfef963f_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.6.0-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric1-2.6.0-h6b3ec72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda @@ -2345,44 +2363,53 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h5e43f62_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.10.0-hd93470c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h7a07914_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h7a07914_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h78e8023_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpmix-5.0.8-h31fc519_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h3a69515_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h538a264_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda @@ -2392,7 +2419,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.1-cuda130_mkl_h5535f43_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.0-cuda130_mkl_h6edde62_300.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda @@ -2406,33 +2433,42 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2026.0.0-hecca717_915.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpi4py-4.1.2-py314hab80c86_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.30.7.1-h1aa9b5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/onednn-3.12-omp_h83de36e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/onemkl-license-2026.0.0-ha770c72_915.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-h67ed482_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.1-py314h9891dd4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda @@ -2444,17 +2480,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.1-cuda130_mkl_py314_h5d99997_300.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.1-cuda129_mkl_h0d04637_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.0-cuda130_mkl_py314_he284d22_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.0-cuda129_mkl_h0d04637_300.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.10-hdeec2a5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda @@ -2464,20 +2506,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.1-cuda130py314h1cdc6f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.0-cuda130py314h1cdc6f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucc-1.8.0-h2521932_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.20.1-hf72d326_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda @@ -2486,6 +2540,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda @@ -2494,21 +2549,33 @@ environments: - conda: ../cuda_bindings build: py314hd3a1e81_0 - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/fc/97/a7139cbecd8123d693c2b67b984a584d8088ea8a1f85617139b5879c0e47/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_26_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/32/d4/fad332f1923d47a0eafac37fde5259aad8987969eed6cceb33cb04f035a4/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/e1/05b50692b647cac3c18200ac485b04f342f00ed173c9cc46767274469a15/llvmlite-0.48.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/0f/26/885774c006de6620ed3d10f45d8e20fe0b8e6aad6d573211a2cbc8b3e528/numba-0.66.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/df/73/8934508d27efd9a930489059b980bc1e75336574be31bffb284a9e782fa7/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/4c/74/a07afd16866ee9f3afcf60e7d5dd1ad3ddc5fb9d56998fce0629eb2671a9/nvmath_python-1.0.0-cp314-cp314-manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f7/e1/e02fafc01c18f1868a2d2c030953f49e38d65f2d95884789a6c46ff308f1/nvtx-0.2.15-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.1.0-py314h0bd77cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.3.1-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-crt-tools-13.3.33-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-13.3.29-h8f3c8d4_0.conda @@ -2527,10 +2594,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h0327ddc_901.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_hd1a4c92_912.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fmt-12.1.0-h20c602a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 @@ -2540,6 +2610,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda @@ -2557,11 +2628,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda @@ -2569,19 +2643,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcublas-13.5.1.27-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.3.2-hf71c8f5_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfabric-2.6.0-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfabric1-2.6.0-h6b50f16_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda @@ -2593,41 +2674,47 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.1-h96a7f82_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-hbae46ee_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.10.0-he3ecef4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-openmp_h1a8b088_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.4.1-h1915271_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.4.1-h1915271_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.4.1-h3d5001d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2025.4.1-h3d5001d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2025.4.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2025.4.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2025.4.1-h07d5dce_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2025.4.1-h07d5dce_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2025.4.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2025.4.1-h38473e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2025.4.1-hfae3067_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpmix-5.0.8-h83c401c_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h38371b1_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h61c7711_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda @@ -2637,7 +2724,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.12.1-cuda130_generic_h4328193_200.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.10.0-cuda130_generic_hf217558_201.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda @@ -2649,30 +2736,38 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.8-he40846f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.4.0-he6dc3fb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.2-h3faef18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpi4py-4.1.2-py314hf3deed3_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.30.7.1-h2b99535_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.0-py314he1698a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/onednn-3.12-omp_h605b386_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openmpi-5.0.10-hbbf8ccc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.1-py314hd7d8586_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda @@ -2684,17 +2779,23 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.12.1-cuda130_generic_py314_h1da07bd_200.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.12.1-cuda129_generic_hda344be_200.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h0c96c11_201.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda129_generic_hdc58e1e_201.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.10-had2c13b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sleef-3.9.0-h5bb93e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda @@ -2704,19 +2805,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.7.1-cuda130py314ha788bc0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucc-1.8.0-he629949_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.20.1-h62a42b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda @@ -2725,6 +2838,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda @@ -2733,22 +2847,37 @@ environments: - conda: ../cuda_bindings build: py314h3ff45e1_0 - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d0/4e/89737a87b22a5ed8748951fb6446762ff1b0fb4aadc0865b759fbc51ba92/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_24_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e0/14/db2256f3045fa17763726c09d519be4f876bfadeed85cfea539b42ecae25/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/c3/470b8c4ff9ae2db2f9cf5c3e73de76ed908a32788ae9eb5602d43e6a476b/llvmlite-0.48.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/93/99/edebf7de890b73973d839dd971cf73734adfb81ffa1b4504f84b9059c3e5/numba-0.66.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/bc/35/3c2a05375b01159632ed90384a04a08725b83b49d2e511f44158c5ec2c43/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/69/30/45414e35ff2eee7db3da037e5707037ccf9d2b5218ffbdb055ea4d5aa98a/nvidia_nvjitlink-13.3.33-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/7a/a2/512f5d0a9e2bdfe0b52c7afe7dbdd3c140fa18ab41c1c863f59eee8808df/nvmath_python-1.0.0-cp314-cp314-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/5b/ca0ba6fa769d08174b7a5b4775c279e2e26611cdd5e7833aa699187871c7/nvtx-0.2.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl win-64: + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_h6d5d71d_901.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 @@ -2758,6 +2887,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.6-h1f5b9c4_0.conda @@ -2766,19 +2896,26 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda @@ -2793,6 +2930,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -2801,51 +2939,81 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.6-py314h02f10f6_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.10-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . build: py314hd7f1909_0 - conda: ../cuda_bindings build: py314hd7f1909_0 - conda: ../cuda_pathfinder + - pypi: https://files.pythonhosted.org/packages/48/45/2734be44dbc80ac082ec23a86b41c8294992dcb90033645ed1bc50aafe4c/cuda_bindings-13.3.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/f2/e9/bb426cdc083f7bce8482ec5f6ff932e1d9858a88a43eefbaa68cbb337416/cuda_cccl-1.1.1-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/6f/15/8d1f52cba966f7a130108132b197b13fbcacee715aa764baa79cd67f9169/cuda_core-1.1.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c9/2d/6a5171fb7236ac0895e1a02ccba3735bf291e8597239aa6421894d3c0ba8/llvmlite-0.48.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/66/c5/b46ad28ac3681d035ea21365c5e052149062e1a0a9affd0563d2760ea6ff/numba-0.66.0-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/3f/e3/613f6fc457f430775d124bea2e38033802fe97ab412a032191ac9b117d3a/numba_cuda-0.30.4-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/67/f2/ec9c05a108095828dfc58840978c627b3c313fdf2a567c6de9ffbbb46901/nvidia_nvjitlink-13.3.33-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/43/da/d94c5904b0c7878be75994ba541b7937c9ecef50dc633fa10d149885cf4f/nvmath_python-1.0.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/20/77/a2b64335bab7c75fe1c054cc4ebe2d3b3234cbdb04d2e1d6ca73551c54f5/nvtx-0.2.15-cp314-cp314-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -2908,6 +3076,7 @@ packages: - msys2-conda-epoch <0.0a0 license: BSD-3-Clause license_family: BSD + purls: [] size: 52252 timestamp: 1770943776666 - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -3006,17 +3175,6 @@ packages: license_family: BSD size: 2706396 timestamp: 1718551242397 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda - sha256: a228f46f68fa3e2e50a09b5a4cefd1ee2c1ce868bfa2a288867b3d44b6e77427 - md5: a3c86229b531656c2bce99e8a6c6de4a - depends: - - libstdcxx >=14 - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 4091040 - timestamp: 1780752489693 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda sha256: ac438ce5d3d3673a9188b535fc7cda413b479f0d52536aeeac1bd82faa656ea0 md5: cc744ac4efe5bcaa8cca51ff5b850df0 @@ -3025,6 +3183,7 @@ packages: - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD + purls: [] size: 3250813 timestamp: 1718551360260 - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda @@ -3249,6 +3408,87 @@ packages: license_family: GPL size: 5830940 timestamp: 1770267725685 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 + depends: + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20103 + timestamp: 1764017231353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + sha256: 1fdee53dea5baa0b4d7ccd3bc0269e81017032c7cfe8843b6a0622eddf05714b + md5: 5c933384d588a06cd8dac78ca2864aab + depends: + - brotli-bin 1.2.0 he30d5cf_1 + - libbrotlidec 1.2.0 he30d5cf_1 + - libbrotlienc 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20145 + timestamp: 1764017310011 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + sha256: a4fffdf1c9b9d3d0d787e20c724cff3a284dfa3773f9ce609c93b1cfd0ce8933 + md5: bc58fdbced45bb096364de0fba1637af + depends: + - brotli-bin 1.2.0 hfd05255_1 + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 20342 + timestamp: 1764017988883 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 + depends: + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 21021 + timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda + sha256: cffd260d3b1527ff8c1d29f00e10f4e1d4bccbe4d5e605c23af68453cf78d32b + md5: b31f6f3a888c3f8f4c5a9dafc2575187 + depends: + - libbrotlidec 1.2.0 he30d5cf_1 + - libbrotlienc 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 20758 + timestamp: 1764017301339 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + sha256: e76966232ef9612de33c2087e3c92c2dc42ea5f300050735a3c646f33bce0429 + md5: 6abd7089eb3f0c790235fe469558d190 + depends: + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 22714 + timestamp: 1764017952449 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 md5: 8910d2c46f7e7b519129f486e0fe927a @@ -3466,9 +3706,9 @@ packages: - pkg:pypi/certifi?source=compressed-mapping size: 151445 timestamp: 1772001170301 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py314h4a8dc5f_1.conda - sha256: c6339858a0aaf5d939e00d345c98b99e4558f285942b27232ac098ad17ac7f8e - md5: cf45f4278afd6f4e6d03eda0f435d527 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.0-py314h4a8dc5f_0.conda + sha256: 39d0d45c4c73162c0aadd0b1bce6ce42ca354da65979f49d6084ff00ed5c26b4 + md5: 26f3b9c52441a170b2008cbc227f740a depends: - __glibc >=2.17,<3.0.a0 - libffi >=3.5.2,<3.6.0a0 @@ -3479,12 +3719,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/cffi?source=hash-mapping - size: 300271 - timestamp: 1761203085220 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py314h0bd77cf_1.conda - sha256: 728e55b32bf538e792010308fbe55d26d02903ddc295fbe101167903a123dd6f - md5: f333c475896dbc8b15efd8f7c61154c7 + - pkg:pypi/cffi?source=compressed-mapping + size: 306297 + timestamp: 1783424159025 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.1.0-py314h0bd77cf_0.conda + sha256: d249228639bb1e98763ffa7c4d32e1862d5e428d9fef86c38df8a84445402ab6 + md5: 8e12e433607a8e9eb28d79b027c5612c depends: - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 @@ -3495,8 +3735,8 @@ packages: license_family: MIT purls: - pkg:pypi/cffi?source=hash-mapping - size: 318357 - timestamp: 1761203973223 + size: 329473 + timestamp: 1783425307959 - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda sha256: 924f2f01fa7a62401145ef35ab6fc95f323b7418b2644a87fea0ea68048880ed md5: c360170be1c9183654a240aadbedad94 @@ -3621,6 +3861,54 @@ packages: license_family: GPL size: 54725 timestamp: 1771382417485 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + sha256: b0314a7f1fb4a294b1a8bcf5481d4a8d9412a9fee23b7e3f93fb10e4d504f2cc + md5: 95bede9cdb7a30a4b611223d52a01aa4 + depends: + - numpy >=1.25 + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 324013 + timestamp: 1769155968691 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda + sha256: ce3575300f89e6d384cb28f44d11a52862087b3fbd82127300f3ec8b292a553d + md5: 015503b3e0c818f2e773665aacada937 + depends: + - numpy >=1.25 + - python + - libstdcxx >=14 + - libgcc >=14 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 342661 + timestamp: 1769155977005 +- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + sha256: f141bcbf8e490b49b2f53f517173d13a64d75e43cfae170e0d931cb0b66f4bce + md5: c26934035616f7d578f9da0491aed3d8 + depends: + - numpy >=1.25 + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/contourpy?source=hash-mapping + size: 247437 + timestamp: 1769155978556 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda noarch: generic sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c @@ -3655,6 +3943,39 @@ packages: - pkg:pypi/cssutils?source=hash-mapping size: 284664 timestamp: 1747322864144 +- pypi: https://files.pythonhosted.org/packages/48/45/2734be44dbc80ac082ec23a86b41c8294992dcb90033645ed1bc50aafe4c/cuda_bindings-13.3.1-cp314-cp314-win_amd64.whl + name: cuda-bindings + version: 13.3.1 + sha256: 8de12ef60bf40756852cb62bbb40460609269f6ece522903d1cc93d73a3ececb + requires_dist: + - cuda-pathfinder>=1.4.2 + - cuda-toolkit[nvfatbin,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'all' + - cuda-toolkit[cufile]==13.* ; sys_platform == 'linux' and extra == 'all' + - cuda-toolkit==13.* ; extra == 'all' + - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + name: cuda-bindings + version: 13.3.1 + sha256: 1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8 + requires_dist: + - cuda-pathfinder>=1.4.2 + - cuda-toolkit[nvfatbin,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'all' + - cuda-toolkit[cufile]==13.* ; sys_platform == 'linux' and extra == 'all' + - cuda-toolkit==13.* ; extra == 'all' + - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: cuda-bindings + version: 13.3.1 + sha256: efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80 + requires_dist: + - cuda-pathfinder>=1.4.2 + - cuda-toolkit[nvfatbin,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'all' + - cuda-toolkit[cufile]==13.* ; sys_platform == 'linux' and extra == 'all' + - cuda-toolkit==13.* ; extra == 'all' + - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' + requires_python: '>=3.10' - conda: ../cuda_bindings name: cuda-bindings version: 13.2.0 @@ -3801,6 +4122,174 @@ packages: license: LicenseRef-NVIDIA-SOFTWARE-LICENSE size: 3891535 timestamp: 1773288261512 +- pypi: https://files.pythonhosted.org/packages/d0/4e/89737a87b22a5ed8748951fb6446762ff1b0fb4aadc0865b759fbc51ba92/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_24_aarch64.whl + name: cuda-cccl + version: 1.1.1 + sha256: fb337eac92da867e9b2d3b2e45a9cbe563e92f26279715e6b8289f0ec4931c23 + requires_dist: + - numpy + - cuda-pathfinder>=1.2.3 + - cuda-core + - typing-extensions + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-cu12' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc]==12.* ; extra == 'minimal-cu12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-cu13' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'minimal-cu13' + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-sysctk12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-sysctk13' + - cuda-cccl[minimal-cu12] ; extra == 'cu12' + - numba>=0.60.0,<0.66 ; extra == 'cu12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu12' + - cuda-cccl[minimal-cu13] ; extra == 'cu13' + - numba>=0.60.0,<0.66 ; extra == 'cu13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu13' + - cuda-cccl[minimal-sysctk12] ; extra == 'sysctk12' + - numba>=0.60.0,<0.66 ; extra == 'sysctk12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk12' + - cuda-cccl[minimal-sysctk13] ; extra == 'sysctk13' + - numba>=0.60.0,<0.66 ; extra == 'sysctk13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk13' + - cuda-cccl[cu12] ; extra == 'test-cu12' + - pytest ; extra == 'test-cu12' + - pytest-xdist ; extra == 'test-cu12' + - cuda-cccl[cu13] ; extra == 'test-cu13' + - pytest ; extra == 'test-cu13' + - pytest-xdist ; extra == 'test-cu13' + - cuda-cccl[sysctk12] ; extra == 'test-sysctk12' + - pytest ; extra == 'test-sysctk12' + - pytest-xdist ; extra == 'test-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'test-sysctk13' + - pytest ; extra == 'test-sysctk13' + - pytest-xdist ; extra == 'test-sysctk13' + - cuda-cccl[cu12] ; extra == 'bench-cu12' + - cuda-bench[cu12] ; extra == 'bench-cu12' + - cupy-cuda12x ; extra == 'bench-cu12' + - pytest-benchmark ; extra == 'bench-cu12' + - cuda-cccl[cu13] ; extra == 'bench-cu13' + - cuda-bench[cu13] ; extra == 'bench-cu13' + - cupy-cuda13x ; extra == 'bench-cu13' + - pytest-benchmark ; extra == 'bench-cu13' + - cuda-cccl[sysctk12] ; extra == 'bench-sysctk12' + - cuda-bench[cu12] ; extra == 'bench-sysctk12' + - cupy-cuda12x ; extra == 'bench-sysctk12' + - pytest-benchmark ; extra == 'bench-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'bench-sysctk13' + - cuda-bench[cu13] ; extra == 'bench-sysctk13' + - cupy-cuda13x ; extra == 'bench-sysctk13' + - pytest-benchmark ; extra == 'bench-sysctk13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f2/e9/bb426cdc083f7bce8482ec5f6ff932e1d9858a88a43eefbaa68cbb337416/cuda_cccl-1.1.1-cp314-cp314-win_amd64.whl + name: cuda-cccl + version: 1.1.1 + sha256: 755b399ea4bf74b5d5b3cf25b51683f70349091e887178a4216f56825c1e1277 + requires_dist: + - numpy + - cuda-pathfinder>=1.2.3 + - cuda-core + - typing-extensions + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-cu12' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc]==12.* ; extra == 'minimal-cu12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-cu13' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'minimal-cu13' + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-sysctk12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-sysctk13' + - cuda-cccl[minimal-cu12] ; extra == 'cu12' + - numba>=0.60.0,<0.66 ; extra == 'cu12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu12' + - cuda-cccl[minimal-cu13] ; extra == 'cu13' + - numba>=0.60.0,<0.66 ; extra == 'cu13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu13' + - cuda-cccl[minimal-sysctk12] ; extra == 'sysctk12' + - numba>=0.60.0,<0.66 ; extra == 'sysctk12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk12' + - cuda-cccl[minimal-sysctk13] ; extra == 'sysctk13' + - numba>=0.60.0,<0.66 ; extra == 'sysctk13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk13' + - cuda-cccl[cu12] ; extra == 'test-cu12' + - pytest ; extra == 'test-cu12' + - pytest-xdist ; extra == 'test-cu12' + - cuda-cccl[cu13] ; extra == 'test-cu13' + - pytest ; extra == 'test-cu13' + - pytest-xdist ; extra == 'test-cu13' + - cuda-cccl[sysctk12] ; extra == 'test-sysctk12' + - pytest ; extra == 'test-sysctk12' + - pytest-xdist ; extra == 'test-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'test-sysctk13' + - pytest ; extra == 'test-sysctk13' + - pytest-xdist ; extra == 'test-sysctk13' + - cuda-cccl[cu12] ; extra == 'bench-cu12' + - cuda-bench[cu12] ; extra == 'bench-cu12' + - cupy-cuda12x ; extra == 'bench-cu12' + - pytest-benchmark ; extra == 'bench-cu12' + - cuda-cccl[cu13] ; extra == 'bench-cu13' + - cuda-bench[cu13] ; extra == 'bench-cu13' + - cupy-cuda13x ; extra == 'bench-cu13' + - pytest-benchmark ; extra == 'bench-cu13' + - cuda-cccl[sysctk12] ; extra == 'bench-sysctk12' + - cuda-bench[cu12] ; extra == 'bench-sysctk12' + - cupy-cuda12x ; extra == 'bench-sysctk12' + - pytest-benchmark ; extra == 'bench-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'bench-sysctk13' + - cuda-bench[cu13] ; extra == 'bench-sysctk13' + - cupy-cuda13x ; extra == 'bench-sysctk13' + - pytest-benchmark ; extra == 'bench-sysctk13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/fc/97/a7139cbecd8123d693c2b67b984a584d8088ea8a1f85617139b5879c0e47/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_26_x86_64.whl + name: cuda-cccl + version: 1.1.1 + sha256: 722f224f3aac82105681b230fadf0f477faa6ae3863323388e8873bf3120061f + requires_dist: + - numpy + - cuda-pathfinder>=1.2.3 + - cuda-core + - typing-extensions + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-cu12' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc]==12.* ; extra == 'minimal-cu12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-cu13' + - cuda-toolkit[cudart,nvcc,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'minimal-cu13' + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'minimal-sysctk12' + - cuda-bindings>=13.0.0,<14.0.0 ; extra == 'minimal-sysctk13' + - cuda-cccl[minimal-cu12] ; extra == 'cu12' + - numba>=0.60.0,<0.66 ; extra == 'cu12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu12' + - cuda-cccl[minimal-cu13] ; extra == 'cu13' + - numba>=0.60.0,<0.66 ; extra == 'cu13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'cu13' + - cuda-cccl[minimal-sysctk12] ; extra == 'sysctk12' + - numba>=0.60.0,<0.66 ; extra == 'sysctk12' + - numba-cuda[cu12]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk12' + - cuda-cccl[minimal-sysctk13] ; extra == 'sysctk13' + - numba>=0.60.0,<0.66 ; extra == 'sysctk13' + - numba-cuda[cu13]>=0.23.0,!=0.27.*,!=0.28.*,!=0.29.*,!=0.30.0 ; extra == 'sysctk13' + - cuda-cccl[cu12] ; extra == 'test-cu12' + - pytest ; extra == 'test-cu12' + - pytest-xdist ; extra == 'test-cu12' + - cuda-cccl[cu13] ; extra == 'test-cu13' + - pytest ; extra == 'test-cu13' + - pytest-xdist ; extra == 'test-cu13' + - cuda-cccl[sysctk12] ; extra == 'test-sysctk12' + - pytest ; extra == 'test-sysctk12' + - pytest-xdist ; extra == 'test-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'test-sysctk13' + - pytest ; extra == 'test-sysctk13' + - pytest-xdist ; extra == 'test-sysctk13' + - cuda-cccl[cu12] ; extra == 'bench-cu12' + - cuda-bench[cu12] ; extra == 'bench-cu12' + - cupy-cuda12x ; extra == 'bench-cu12' + - pytest-benchmark ; extra == 'bench-cu12' + - cuda-cccl[cu13] ; extra == 'bench-cu13' + - cuda-bench[cu13] ; extra == 'bench-cu13' + - cupy-cuda13x ; extra == 'bench-cu13' + - pytest-benchmark ; extra == 'bench-cu13' + - cuda-cccl[sysctk12] ; extra == 'bench-sysctk12' + - cuda-bench[cu12] ; extra == 'bench-sysctk12' + - cupy-cuda12x ; extra == 'bench-sysctk12' + - pytest-benchmark ; extra == 'bench-sysctk12' + - cuda-cccl[sysctk13] ; extra == 'bench-sysctk13' + - cuda-bench[cu13] ; extra == 'bench-sysctk13' + - cupy-cuda13x ; extra == 'bench-sysctk13' + - pytest-benchmark ; extra == 'bench-sysctk13' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda sha256: 2ee3b9564ca326226e5cda41d11b251482df8e7c757e333d28ec75213c75d126 md5: 87ff6381e33b76e5b9b179a2cdd005ec @@ -3818,6 +4307,15 @@ packages: purls: [] size: 1472271 timestamp: 1779895496841 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda + sha256: 51106d05567031d9b10a26bcaea95022c9ae91ce44758df5dec86d46985bef61 + md5: c7aab5efb8e8151a038f9eb271f23dcf + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1475805 + timestamp: 1782773759292 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda sha256: b4efaee8fa95b9ec97a462dc343914a138ece704895e33caa52ac55968f7adfa md5: 71e4d87a72bf003bd05f05a502288b2a @@ -3837,6 +4335,16 @@ packages: purls: [] size: 1481900 timestamp: 1779895522474 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda + sha256: 2f9d85d0297b0c461518e5665351d73ffc5f7c9e2aa8b6e3e1cd9498bdd31cd0 + md5: 29bc81fe5927466cd27f2e1151e8502a + depends: + - arm-variant * sbsa + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + size: 1480995 + timestamp: 1782773779842 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda sha256: 681eb1d9afd596e04329a82b04734c0e37c6ecb94b3380f3a378d61983e2a8cc md5: 8f897dca7111f3bb4ded97ba6947b186 @@ -3853,6 +4361,45 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 1462453 timestamp: 1779895589763 +- pypi: https://files.pythonhosted.org/packages/32/d4/fad332f1923d47a0eafac37fde5259aad8987969eed6cceb33cb04f035a4/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: cuda-core + version: 1.1.0 + sha256: dc8103c78b9c15ad6b1ea48de7763b429c8fde42bec43a9dd0550868994a0ce4 + requires_dist: + - cuda-pathfinder>=1.4.2 + - numpy + - backports-strenum ; python_full_version < '3.11' + - cuda-bindings[all]==12.* ; extra == 'cu12' + - cuda-toolkit==12.* ; extra == 'cu12' + - cuda-bindings[all]==13.* ; extra == 'cu13' + - cuda-toolkit==13.* ; extra == 'cu13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/6f/15/8d1f52cba966f7a130108132b197b13fbcacee715aa764baa79cd67f9169/cuda_core-1.1.0-cp314-cp314-win_amd64.whl + name: cuda-core + version: 1.1.0 + sha256: d0531306d2894523e261418491a68b8385481c9fa0552d78fd3ba6b746a20942 + requires_dist: + - cuda-pathfinder>=1.4.2 + - numpy + - backports-strenum ; python_full_version < '3.11' + - cuda-bindings[all]==12.* ; extra == 'cu12' + - cuda-toolkit==12.* ; extra == 'cu12' + - cuda-bindings[all]==13.* ; extra == 'cu13' + - cuda-toolkit==13.* ; extra == 'cu13' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/e0/14/db2256f3045fa17763726c09d519be4f876bfadeed85cfea539b42ecae25/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + name: cuda-core + version: 1.1.0 + sha256: 0a47d03b0bdb57f82ce3e8563b4fc4d7432be629ac07ad749ecd6821d683288d + requires_dist: + - cuda-pathfinder>=1.4.2 + - numpy + - backports-strenum ; python_full_version < '3.11' + - cuda-bindings[all]==12.* ; extra == 'cu12' + - cuda-toolkit==12.* ; extra == 'cu12' + - cuda-bindings[all]==13.* ; extra == 'cu13' + - cuda-toolkit==13.* ; extra == 'cu13' + requires_python: '>=3.10' - conda: . name: cuda-core version: 0.7.0 @@ -5089,6 +5636,11 @@ packages: purls: [] size: 45453672 timestamp: 1779905194696 +- pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + name: cuda-pathfinder + version: 1.5.6 + sha256: 7e4c07c117b78ba1fb35dac4c444d21f3677b1b1ff56175c53a8e3025c5b43c0 + requires_python: '>=3.10' - conda: ../cuda_pathfinder name: cuda-pathfinder version: 1.3.4a0 @@ -5275,6 +5827,49 @@ packages: - pkg:pypi/cupy?source=hash-mapping size: 39191318 timestamp: 1779504103703 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/cycler?source=hash-mapping + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 210103 + timestamp: 1771943128249 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + sha256: 0606296a3b0cc757229dd97db8c6dc0f77e54f975f89ae63c36fb01e2a2abe61 + md5: f4fbf4001970e3e58984281a12c99969 + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + purls: [] + size: 224450 + timestamp: 1771943147365 - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda sha256: f700d10c2a794710a1656a6fdb8908fb04f3c7812ac4f17187777646ede1a3d9 md5: 866fd3d25b767bccb4adc8476f4035cd @@ -5473,6 +6068,41 @@ packages: - pkg:pypi/domdf-python-tools?source=hash-mapping size: 96253 timestamp: 1739444562482 +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71809 + timestamp: 1765193127016 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda + sha256: a636dfd17adc2a859cbdfce97e449e338b02a9f099c6dc0941c9f26bf448cca9 + md5: 9fd794eaf983eabf975ead524540b4be + depends: + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 71905 + timestamp: 1765194538141 +- conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda + sha256: 09e30a170e0da3e9847d449b594b5e55e6ae2852edd3a3680e05753a5e015605 + md5: 3d3caf4ccc6415023640af4b1b33060a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 70943 + timestamp: 1765193243911 - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda sha256: 07f06106f9c15d36dff4694d1191e7c0f42273f175ad8d7abbffd347dfe33d4c md5: 8b259cc3194c36e0235f873c6dae9eef @@ -5697,66 +6327,65 @@ packages: license_family: GPL size: 12035194 timestamp: 1773008913159 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h0327ddc_901.conda - sha256: 12f1d33ba6975ae1f2f799111665bd3e527d5aefd29adec27bf731f4e59a9eeb - md5: 00e3601ba812380631f089f650625c61 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_hd1a4c92_912.conda + sha256: 7d47ff6c53a705ec12cd02e22020857224862702614c299d938632adc2e157bf + md5: 046fbf5d7e36bbebca3915bb88fd8bc8 depends: - - alsa-lib >=1.2.16.1,<1.3.0a0 - - aom >=3.14.1,<3.15.0a0 + - alsa-lib >=1.2.15.3,<1.3.0a0 + - aom >=3.9.1,<3.10.0a0 - bzip2 >=1.0.8,<2.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.18.1,<3.0a0 + - fontconfig >=2.15.0,<3.0a0 - fonts-conda-ecosystem - gmp >=6.3.0,<7.0a0 - - harfbuzz >=14.2.1 + - harfbuzz >=12.3.2 - lame >=3.100,<3.101.0a0 - libass >=0.17.4,<0.17.5.0a0 - - libexpat >=2.8.1,<3.0a0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 + - libexpat >=2.7.3,<3.0a0 + - libfreetype >=2.14.1 + - libfreetype6 >=2.14.1 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - libjxl >=0.11,<1.0a0 - - liblzma >=5.8.3,<6.0a0 - - libopenvino >=2026.2.1,<2026.2.2.0a0 - - libopenvino-arm-cpu-plugin >=2026.2.1,<2026.2.2.0a0 - - libopenvino-auto-batch-plugin >=2026.2.1,<2026.2.2.0a0 - - libopenvino-auto-plugin >=2026.2.1,<2026.2.2.0a0 - - libopenvino-hetero-plugin >=2026.2.1,<2026.2.2.0a0 - - libopenvino-ir-frontend >=2026.2.1,<2026.2.2.0a0 - - libopenvino-onnx-frontend >=2026.2.1,<2026.2.2.0a0 - - libopenvino-paddle-frontend >=2026.2.1,<2026.2.2.0a0 - - libopenvino-pytorch-frontend >=2026.2.1,<2026.2.2.0a0 - - libopenvino-tensorflow-frontend >=2026.2.1,<2026.2.2.0a0 - - libopenvino-tensorflow-lite-frontend >=2026.2.1,<2026.2.2.0a0 + - libjxl >=0.11,<0.12.0a0 + - liblzma >=5.8.2,<6.0a0 + - libopenvino >=2025.4.1,<2025.4.2.0a0 + - libopenvino-arm-cpu-plugin >=2025.4.1,<2025.4.2.0a0 + - libopenvino-auto-batch-plugin >=2025.4.1,<2025.4.2.0a0 + - libopenvino-auto-plugin >=2025.4.1,<2025.4.2.0a0 + - libopenvino-hetero-plugin >=2025.4.1,<2025.4.2.0a0 + - libopenvino-ir-frontend >=2025.4.1,<2025.4.2.0a0 + - libopenvino-onnx-frontend >=2025.4.1,<2025.4.2.0a0 + - libopenvino-paddle-frontend >=2025.4.1,<2025.4.2.0a0 + - libopenvino-pytorch-frontend >=2025.4.1,<2025.4.2.0a0 + - libopenvino-tensorflow-frontend >=2025.4.1,<2025.4.2.0a0 + - libopenvino-tensorflow-lite-frontend >=2025.4.1,<2025.4.2.0a0 - libopus >=1.6.1,<2.0a0 - - libplacebo >=7.360.1,<7.361.0a0 - - librsvg >=2.62.3,<3.0a0 + - librsvg >=2.60.0,<3.0a0 - libstdcxx >=14 - libvorbis >=1.3.7,<1.4.0a0 - libvpx >=1.15.2,<1.16.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 + - libvulkan-loader >=1.4.328.1,<2.0a0 - libwebp-base >=1.6.0,<2.0a0 - libxcb >=1.17.0,<2.0a0 - libxml2 - libxml2-16 >=2.14.6 - - libzlib >=1.3.2,<2.0a0 + - libzlib >=1.3.1,<2.0a0 - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.7,<4.0a0 + - openssl >=3.5.5,<4.0a0 - pulseaudio-client >=17.0,<17.1.0a0 - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2026.2,<2026.3.0a0 + - shaderc >=2025.5,<2025.6.0a0 - svt-av1 >=4.0.1,<4.0.2.0a0 - x264 >=1!164.3095,<1!165 - x265 >=3.5,<3.6.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libx11 >=1.8.12,<2.0a0 constrains: - __cuda >=12.8 license: GPL-2.0-or-later license_family: GPL purls: [] - size: 12711897 - timestamp: 1782260316539 + size: 12036520 + timestamp: 1769713781879 - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_hb2d76f6_914.conda sha256: fbe7916ed95bdc9650c9906865ab21cc04fb337548fdffec94f64a547ba3644d md5: 7cffff39ee349bddb81e1de24c780f34 @@ -6032,6 +6661,22 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + sha256: c9752235f1ff7061d834e5e4a3d0adf71ebeeff2b3fad82dab607edce7f70c91 + md5: 0509ee74d95e5b98eb6fe2a47760e399 + depends: + - brotli + - munkres + - python >=3.10 + - unicodedata2 >=15.1.0 + track_features: + - fonttools_no_compile + license: MIT + license_family: MIT + purls: + - pkg:pypi/fonttools?source=hash-mapping + size: 846038 + timestamp: 1778770337113 - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda sha256: 36857701b46828b6760c3c1652414ee504e7fc12740261ac6fcff3959b72bd7a md5: eeec961fec28e747e1e1dc0446277452 @@ -7448,6 +8093,50 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + sha256: e3488ea4a336f29e57de8f282bf40c0505cfc482e03004615e694b48e7d9c79f + md5: 7397e418cab519b8d789936cf2dde6f6 + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 77363 + timestamp: 1773067048780 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + sha256: 06e4be177958444f4f047380656611cbc467e36d1e3318add141397ce4cc24ef + md5: cae18ed89f7f6dc0adc0aafe4c47bf3d + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 83264 + timestamp: 1773067330528 +- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + sha256: 37cbc49fd7255532d09fb3bc9cc699554693e632fa90678a9b3d0ed12557d0d7 + md5: 0508c8dabeab91311e5c59b5e3f6d278 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/kiwisolver?source=hash-mapping + size: 73330 + timestamp: 1773067062280 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 md5: fb53fb07ce46a575c5d004bbc96032c2 @@ -7464,16 +8153,47 @@ packages: purls: [] size: 1386730 timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba - md5: d9ca108bd680ea86a963104b6b3e95ca +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + sha256: 9b07046870772f28740e3f6149f09ff222843733087a33c5540b169c6289652d + md5: 54157a1c8c0bb70f62dd0b17fba7e7f2 depends: + - __glibc >=2.17,<3.0.a0 - keyutils >=1.6.3,<2.0a0 - libedit >=3.1.20250104,<3.2.0a0 - libedit >=3.1.20250104,<4.0a0 - libgcc >=14 - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1388990 + timestamp: 1781859420533 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda + sha256: b644718416a22b5d57c1194ea7207b7f8d33d6a2b42775763782d76cd7457aea + md5: 5fd2304064ef6199d1f91ec60ee7b820 + depends: + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.7,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1518484 + timestamp: 1781859412954 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba + md5: d9ca108bd680ea86a963104b6b3e95ca + depends: + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 license: MIT license_family: MIT purls: [] @@ -7492,6 +8212,19 @@ packages: purls: [] size: 751055 timestamp: 1769769688841 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + sha256: c55745796e762ba9e817ab1fc0f21f1a049e202f90fa762df39578f37923f6c2 + md5: 00335c2c4a98656554771aaf6f1a7400 + depends: + - openssl >=3.5.7,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 750320 + timestamp: 1781859644591 - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab md5: a8832b479f93521a9e7b5b743803be51 @@ -7549,6 +8282,20 @@ packages: purls: [] size: 296564 timestamp: 1780211834883 +- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + sha256: 5ed63a32639a130564a870becb679fd52dfb816666a61ed3c023917389010480 + md5: 1df4012c8a2478699d07bc26af66d41e + depends: + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 523194 + timestamp: 1780211799997 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 md5: 12bd9a3f089ee6c9266a37dab82afabd @@ -7678,23 +8425,23 @@ packages: - abseil-cpp =20260107.1 license: Apache-2.0 license_family: Apache + purls: [] size: 1384817 timestamp: 1770863194876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda - sha256: 32933de2d4fa6e6ffd949052815b49cb65a0649ad70007155c533ab97ea8cefd - md5: c4393db381bffa0a83a8d9e47b238106 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda + sha256: 28bb0a5f3177bb3b45a89d309b93bef65645671d1c97ae7bbcfa74481bf33f3c + md5: 4db30fe7ba05e2ce66595ed646064861 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 + - libgcc >=13 + - libstdcxx >=13 constrains: - - abseil-cpp =20260526.0 - - libabseil-static =20260526.0=cxx17* + - abseil-cpp =20250512.1 + - libabseil-static =20250512.1=cxx17* license: Apache-2.0 license_family: Apache purls: [] - size: 1437712 - timestamp: 1780524559298 + size: 1327580 + timestamp: 1750194149128 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260107.1-cxx17_h6983b43_0.conda sha256: 37675140819e10235a8ff342cb09f688f843ac390b64856d8e230700bbd7d5aa md5: 2a19160c13e688710dd200812fc9a6d3 @@ -7708,20 +8455,6 @@ packages: license_family: Apache size: 1401836 timestamp: 1770863223557 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda - sha256: 51f53ae6266889f0972a10c2773465da5554fdf55ac15b9dea3e7f77520022d9 - md5: d8637f7cc7143fe4ad2eceac8e8cf033 - depends: - - libgcc >=14 - - libstdcxx >=14 - constrains: - - abseil-cpp =20260526.0 - - libabseil-static =20260526.0=cxx17* - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1457025 - timestamp: 1780524543286 - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda sha256: 035eb8b54e03e72e42ef707420f9979c7427776ea99e0f1e3c969f92eb573f19 md5: d3be7b2870bf7aff45b12ea53165babd @@ -8213,6 +8946,74 @@ packages: purls: [] size: 68443 timestamp: 1779859701498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + sha256: ccb8bd0a8f2d57675b6a60dabb0cc8becb35c2748ac4ec920d7f7625b93c16d8 + md5: 864e6d29ec7378b89ff5b5c9c629099e + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 24175081 + timestamp: 1782358841320 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + sha256: 16ff2afd00acf94320dcfacc7124bbb67ae542d48e5c5ac74627e8690df10dfa + md5: 483b80c996ae6e15317459ebd71d7033 + depends: + - libstdcxx >=14 + - libgcc >=14 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 24213552 + timestamp: 1782358853037 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda + sha256: b90ed8467a692788477c06bc0359fac52ed5651d801ddef189ba4b7ecf3ce38c + md5: 2a913525f4201f1adab2711fcf6f89b3 + depends: + - libclang-cpp22.1 ==22.1.8 default_h6c227bf_3 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 14283567 + timestamp: 1782358841320 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda + sha256: ef4c63c93751dd2582c4f72d9558faaec68eb26d149406373d5af8e509008c48 + md5: baa5eb601eacb3cc438aad5b343d9b61 + depends: + - libclang-cpp22.1 ==22.1.8 default_h0cc847a_3 + - libstdcxx >=14 + - libgcc >=14 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 14311328 + timestamp: 1782358853037 +- conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda + sha256: 34a25466769d1233d8f36a78d5f9f40279bae3fc4b70852acbd04b159ac4d183 + md5: c45c5a60b68368f62415941c1d9f0ab7 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 34917944 + timestamp: 1782358781159 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda sha256: 39a1183f64d4ebff942117f7be9c0883b772ddf5796dee18bdda1d52949a9627 md5: 7bd32031313d7dca6c8250429b94bd03 @@ -8295,9 +9096,9 @@ packages: purls: [] size: 78215168 timestamp: 1780355336257 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.8.0.10-he387df4_0.conda - sha256: f23ac30a306476480b94e9a5634b695e235426d78c426c1d0f69895ac3bfcee7 - md5: a595ebcdfd12786a1e9e1ad1a7d47537 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda + sha256: b51195f067cb90871b0673dfe8564015513c4f81509018313efcb0a14d3f2391 + md5: c53276b4f3f8eeaa91813b8a0196eb91 depends: - __glibc >=2.28,<3.0.a0 - _openmp_mutex >=4.5 @@ -8307,13 +9108,13 @@ packages: - libgcc >=14 - libstdcxx >=14 constrains: + - libcudss-commlayer-nccl 0.7.1.4 h7a53d9e_1 + - libcudss-commlayer-mpi 0.7.1.4 h40415f0_1 - libcudss0 <0.0.0a0 - - libcudss-commlayer-nccl 0.8.0.10 h5eac28b_0 - - libcudss-commlayer-mpi 0.8.0.10 h40415f0_0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 78088194 - timestamp: 1780355374368 + size: 62631375 + timestamp: 1770671821410 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda sha256: bd69d4b63be28c36e0fa962256666672e3f2eff5dfc06bdd545acef278f83754 md5: b347b9844eb16238c7f7b62cd2bd1e68 @@ -8394,6 +9195,33 @@ packages: purls: [] size: 997204 timestamp: 1782772368681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda + sha256: 41b04f995c9f63af8c4065a35931e46cbc2fdd6b9bf7e4c19f90d53cbb2bc8e5 + md5: 67828c963b17db7dc989fe5d509ef04a + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 4553739 + timestamp: 1770903929794 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda sha256: 9a1615a44f0d01fcc23b4f1be4c8f86b2e19e3974481e826180dd261b67dcad6 md5: 6172124b5a746cc1f3f9fc7fac9f6740 @@ -8528,18 +9356,6 @@ packages: purls: [] size: 311420 timestamp: 1777838991858 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.3.2-hf71c8f5_4.conda - sha256: 4e41c61b67d6f077db7364bc2911c4d81e6c8080b86605e9d0adb97a5ed654b6 - md5: 530f83c19ee601cb9cda5b305ddf02fd - depends: - - libgcc >=14 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: [] - size: 316167 - timestamp: 1777838999692 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 md5: 9314bc5a1fe7d1044dc9dfd3ef400535 @@ -8645,6 +9461,51 @@ packages: purls: [] size: 54600 timestamp: 1779728234591 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + sha256: e4b46919c9bb65930bce238bd2736110ed7b8c30e5cd5394e4e1edb48de54843 + md5: 5bc6d55503483aabe8a90c5e7f49a2a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libegl 1.7.0 ha4b6fd6_3 + - libgl-devel 1.7.0 ha4b6fd6_3 + - xorg-libx11 + license: LicenseRef-libglvnd + purls: [] + size: 31718 + timestamp: 1779728222280 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + sha256: 2b5ae66aa91215e915df3c520fed85a17231a067339b54f0594d93689b684c86 + md5: 8ebac3af4a69a9a41c16442a65bf3ac4 + depends: + - libegl 1.7.0 hd24410f_3 + - libgl-devel 1.7.0 hd24410f_3 + - xorg-libx11 + license: LicenseRef-libglvnd + purls: [] + size: 31552 + timestamp: 1779728260736 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 427426 + timestamp: 1685725977222 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda + sha256: 01333cc7d6e6985dd5700b43660d90e9e58049182017fd24862088ecbe1458e4 + md5: 96ae6083cd1ac9f6bc81631ac835b317 + depends: + - libgcc-ng >=12 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 438992 + timestamp: 1685726046519 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 @@ -8759,6 +9620,52 @@ packages: purls: [] size: 71631 timestamp: 1781203724164 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.6.0-ha770c72_0.conda + sha256: 45bb0eb92000a3f82555cc948013935aace8a1ea522b79700f58d3906c18e846 + md5: b04e60c49d09399a009f3bb70bb53a23 + depends: + - libfabric1 2.6.0 h6b3ec72_0 + license: BSD-2-Clause OR GPL-2.0-only + license_family: BSD + purls: [] + size: 14365 + timestamp: 1782364120544 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfabric-2.6.0-h8af1aa0_0.conda + sha256: b0a8c7e03897b28b5d18afe3d2a81d22db665cfbc60db580c6d5a5ec2701b832 + md5: d22c0987ebdad5301396bf8bf2003d17 + depends: + - libfabric1 2.6.0 h6b50f16_0 + license: BSD-2-Clause OR GPL-2.0-only + license_family: BSD + purls: [] + size: 14418 + timestamp: 1782364086739 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric1-2.6.0-h6b3ec72_0.conda + sha256: ba8de6a838bc0727ef8e5a1409c6735465b7b582627a9b4c2704126e53903f43 + md5: 7d8c510157360d0a6fdd84a1d3db8de7 + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - rdma-core >=63.0 + license: BSD-2-Clause OR GPL-2.0-only + license_family: BSD + purls: [] + size: 734920 + timestamp: 1782364119825 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfabric1-2.6.0-h6b50f16_0.conda + sha256: 90f5fd379a36779c54f92dcea2a211b06eedd982c6948a3e9b5baf0132617653 + md5: 385cd929680ecee54788f6e718f55d63 + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=14 + - libnl >=3.11.0,<4.0a0 + - rdma-core >=63.0 + license: BSD-2-Clause OR GPL-2.0-only + license_family: BSD + purls: [] + size: 802702 + timestamp: 1782364085626 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -9019,6 +9926,21 @@ packages: license_family: GPL size: 820022 timestamp: 1771382190160 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + sha256: 80e80ef5e31b00b12539db3c5aaecde60dab91381abfc1060e323d5c3b016dce + md5: cc5d690fc1c629038f13c68e88e65f44 + depends: + - _openmp_mutex >=4.5 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 h8ee18e1_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 821854 + timestamp: 1778273037795 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda sha256: 1abc6a81ee66e8ac9ac09a26e2d6ad7bba23f0a0cc3a6118654f036f9c0e1854 md5: 06901733131833f5edd68cf3d9679798 @@ -9134,6 +10056,18 @@ packages: purls: [] size: 27523 timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f + md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 + depends: + - libgfortran5 15.2.0 h68bc16d_19 + constrains: + - libgfortran-ng ==15.2.0=*_19 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27655 + timestamp: 1778269042954 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 md5: 41f261f5e4e2e8cbd236c2f1f15dae1b @@ -9171,6 +10105,19 @@ packages: purls: [] size: 2482475 timestamp: 1771378241063 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 + md5: 85072b0ad177c966294f129b7c04a2d5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2483673 + timestamp: 1778269025089 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 md5: 574d88ce3348331e962cfa5ed451b247 @@ -9271,22 +10218,22 @@ packages: license: LGPL-2.1-or-later size: 4398701 timestamp: 1771863239578 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda - sha256: 33eb5d5310a5c2c0a4707a0afa644801c2e08c8f70c45e1f62f354116dfe0970 - md5: 17d484ab9c8179c6a6e5b7dbb5065afc +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + sha256: 4bee10e62796f01e4fa2b5849135b1cc061337fe9cf5eb9bd79e9664922ae0e4 + md5: 889febc66cd9e4190f80ef9718fa239b depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - libffi >=3.5.2,<3.6.0a0 - pcre2 >=10.47,<10.48.0a0 - - libzlib >=1.3.2,<2.0a0 - - libiconv >=1.18,<2.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later purls: [] - size: 4754097 - timestamp: 1778508800134 + size: 4754220 + timestamp: 1782463895250 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec md5: 4ac4372fc4d7f20630a91314cdac8afd @@ -9301,21 +10248,21 @@ packages: license: LGPL-2.1-or-later size: 4512186 timestamp: 1771863220969 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.1-h96a7f82_2.conda - sha256: 050285afdb7bd98b1b8fb052af9da31fafde586a49d3b56dd33d5338b2d0e411 - md5: 16d72f76bf6fead4a29efb2fede0a06b +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda + sha256: 6a13152a81513117b8d41bf64dea56c731d877bcced5a24fab738e3c0f9ac58c + md5: 31d404d8c0755d0f9062a4459f5a1084 depends: - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - libffi >=3.5.2,<3.6.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later purls: [] - size: 4946648 - timestamp: 1778508920982 + size: 4943441 + timestamp: 1782464048865 - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda sha256: f035fb25f8858f201e0055c719ef91022e9465cd51fe803304b781863286fb10 md5: 0329a7e92c8c8b61fcaaf7ad44642a96 @@ -9333,24 +10280,24 @@ packages: license: LGPL-2.1-or-later size: 4095369 timestamp: 1771863229701 -- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda - sha256: f61277e224e9889c221bb2eac0f57d5aeeb82fc45d3dc326957d251c97444f7c - md5: 5fb838786a8317ebb38056bbe236d3ff +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + sha256: 20d4a182b8aa1d71b331579fae281bb3ccb1a199257ce15fadc53786031a7408 + md5: 5be116480ef34a5646894d7f7cd7ae41 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 - pcre2 >=10.47,<10.48.0a0 - - libintl >=0.22.5,<1.0a0 - libffi >=3.5.2,<3.6.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later purls: [] - size: 4522891 - timestamp: 1778508851933 + size: 4518265 + timestamp: 1782463965040 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 md5: 434ca7e50e40f4918ab701e3facd59a0 @@ -9491,6 +10438,78 @@ packages: license_family: GPL size: 663864 timestamp: 1771382118742 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + sha256: 4dc958ced2fc7f42bc675b07e2c9abe3e150875ffdf62ca551d94fc6facf1fd7 + md5: f1147651e3fdd585e2f442c0c2fc8f2d + depends: + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + constrains: + - msys2-conda-epoch <0.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 664640 + timestamp: 1778272979661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda + sha256: 821c315f6b5171aa89e735be2ad84e74eb3f898fc7610ee36cfecd95dfa789e8 + md5: fb4669c3990b94ea32fbb81f433e9aa6 + depends: + - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1297668 + timestamp: 1782800580119 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda + sha256: ae1d16dd62f626c4dab1240a49f6b04e14e4f30140e5fb26bb835821dba114b6 + md5: 655cedd9626545089b9e9ead153cf619 + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1334601 + timestamp: 1782800489368 +- conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda + sha256: 634a64cf43f1ce5a4139334bcdbde54d6854ae33d881ae1774377965e21051a5 + md5: 005469a341088900ca235892d3154c24 + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 1008194 + timestamp: 1782801000396 - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda sha256: 2cf160794dda62cf93539adf16d26cfd31092829f2a2757dbdd562984c1b110a md5: 0ed3aa3e3e6bc85050d38881673a692f @@ -9961,25 +10980,56 @@ packages: purls: [] size: 81027 timestamp: 1779859714698 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb - md5: c7c83eecbb72d88b940c249af56c8b17 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda + sha256: e9b5f301d6b001a9b8ce782157f56b75c92c4fbc9eba95dc6345c1139251d13b + md5: 298bb2483fc7d15396147cf1c1465359 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - constrains: - - xz 5.8.2.* - license: 0BSD + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache purls: [] - size: 113207 - timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d - md5: b88d90cad08e6bc8ad540cb310a761fb + size: 44320272 + timestamp: 1781788728739 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda + sha256: dc943f1730a27f5fb36682c9852f7196f671c3a9df4a0a7a8f7ba665637c9151 + md5: 6fc7875f99e39c80dca8fcdc60e6559e depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - constrains: + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 43302008 + timestamp: 1781785783993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: c7c83eecbb72d88b940c249af56c8b17 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.2.* + license: 0BSD + purls: [] + size: 113207 + timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: - xz 5.8.3.* license: 0BSD purls: [] @@ -10052,9 +11102,9 @@ packages: purls: [] size: 272468878 timestamp: 1773078724253 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.10.0-he3ecef4_0.conda - sha256: 72b40c75a7bc547b856954f12ba32cd815b26ace064564dc2569e44967cf87fc - md5: 1392ce38ffe86b9612c27cdfef98404d +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda + sha256: 1511c96dcab0968a344d16a5bbb6791aeefc344e2ef4740a1137cfb62f95ebc6 + md5: c6eec8ae18b32f1e444353dd526fb040 depends: - __glibc >=2.28,<3.0.a0 - _openmp_mutex >=4.5 @@ -10070,8 +11120,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 324720276 - timestamp: 1773081195270 + size: 460673720 + timestamp: 1767143113267 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa @@ -10126,6 +11176,25 @@ packages: purls: [] size: 768716 timestamp: 1731846931826 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + sha256: 0e303d7a8845391bd1634efb65dc9d9b82b5608ebeb32fb77a56d1ed696d2eee + md5: 835c7c4137821de5c309f4266a51ba89 + depends: + - libgcc-ng >=9.3.0 + license: LGPL-2.1-or-later + purls: [] + size: 39449 + timestamp: 1609781865660 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda sha256: 3de6aed48ca7a705aa22444b54ad7236f0e1f9dc7f41ec3e2273e6cb991be213 md5: 1f9be211f7ec5c88b1d2d561aee7884d @@ -10399,6 +11468,25 @@ packages: purls: [] size: 5136501 timestamp: 1776993280434 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + sha256: 90777039b48529283df5f16383fc399866024257a8bd93de583f4730db1ab30a + md5: c2bd8055a2e2dce7a7f32cfd02101fb6 + depends: + - __glibc >=2.17,<3.0.a0 + - libglvnd 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + purls: [] + size: 51767 + timestamp: 1779728204026 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + sha256: 9b964590b23c0a0357850653e09ab0d3f840ac5d0068ff927a61b5f00d6dbf65 + md5: 86958137ec1885e2da78804996c99d5f + depends: + - libglvnd 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + purls: [] + size: 58759 + timestamp: 1779728245599 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda sha256: a396a2d1aa267f21c98717ac097138b32e41e4c40ae501729bded3801476eeb5 md5: 9f0596e995efe372c470ff45c93131cb @@ -10412,9 +11500,9 @@ packages: license_family: APACHE size: 6582302 timestamp: 1772727204779 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda - sha256: 7941fb9ba8c3a5a0a2401dc4120e8fcb561b96d928c43374eb93f545019a2858 - md5: ea41753f926f73966629d81fdf20ec6f +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_0.conda + sha256: 359ebf5f33d781b82fa20f7e37ae1428ae164eab71a1083d56c45a4eea6a59d4 + md5: ec442fe25ba489c4891760284a653ad5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -10424,8 +11512,19 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 6823841 - timestamp: 1782219077259 + size: 6808640 + timestamp: 1781861971161 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.4.1-h1915271_1.conda + sha256: abad976c8393f7c8df5d4d46828754d5fac6547a87881f2488a4b5193036e9be + md5: 2de2dd2a04e1701918c738de12316edc + depends: + - libgcc >=14 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + - tbb >=2022.3.0 + purls: [] + size: 5665824 + timestamp: 1769898242484 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda sha256: 6f8558cc4ee4d490db88640e71d3f79fa7552701d91c09ad6f1371dadb9bd3f1 md5: c8ff442d02723939711a726d9ff71eac @@ -10438,19 +11537,18 @@ packages: license_family: APACHE size: 5742222 timestamp: 1772721263739 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda - sha256: b1b0553cfa613bffa8bed04b3a880d651cc08ffe565e07362c3071597069c4d4 - md5: e18fa81e8db0a20a8d5385902c12ce7c +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.4.1-h1915271_1.conda + sha256: 650f22de910785c20db54018b10585a9ecc786863a9e7f8c7a87dd43882a7faf + md5: 8db41f12f4e44a07dc3ba5aae0718127 depends: - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2023.0.0 - license: Apache-2.0 - license_family: APACHE + - tbb >=2022.3.0 purls: [] - size: 5984918 - timestamp: 1782213524008 + size: 10070230 + timestamp: 1769898273278 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda sha256: 8fff4375f324bdf8a3fe20c489710b692340007b7af2da1d14f6832990c24891 md5: ef26404d824453138bf0a12a8bb033df @@ -10464,20 +11562,6 @@ packages: license_family: APACHE size: 10237615 timestamp: 1772721303162 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda - sha256: 72d90363b68266a9dc704008032e1f9acb91e080212e89dc189ea8135b199781 - md5: 2641ed1135e1316f5dd6f9512bcd6845 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2023.0.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 10313623 - timestamp: 1782213543505 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda sha256: 286de85805dc69ce0bd25367ae2a20c8096ddef35eb2483474eb246dacd5387e md5: ee41df976413676f794af2785b291b0c @@ -10491,20 +11575,31 @@ packages: license_family: APACHE size: 114431 timestamp: 1772727230331 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda - sha256: 3ac14d36fa890840ae8474b8a9f0a094b8542fd8fbc409faf3d465c68f20aff0 - md5: 5698a64698e14e8a2e9e16f8f0de0e2e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_0.conda + sha256: 06aa73ee3e5ad42accb9c49efa611b2c0e55d3d289011e25609e2ff9ef55beca + md5: 7ed9332302888b52d2c2e0e0314a3551 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 114628 - timestamp: 1782219097820 + size: 114872 + timestamp: 1781861991517 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.4.1-h3d5001d_1.conda + sha256: 20ad358c3fefe92fc9fcbe5c04724e3a42ea1c42f1ab22c30717e4ea29cffd6b + md5: 12034632b6b732f3b2baee37c320ea94 + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + - tbb >=2022.3.0 + purls: [] + size: 111764 + timestamp: 1769898305839 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.0.0-h3d5001d_1.conda sha256: da7926f66318e539c9f20c2f5f3719a5ba663c6b9d5471e5223d290450219748 md5: 5e984d6405a8f8529d7429f28a7f285e @@ -10517,19 +11612,6 @@ packages: license_family: APACHE size: 111064 timestamp: 1772721336786 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda - sha256: 523247ab847e3e71ae213311491d5cc0bbb26f2c39ad4c71df9179c1b469e39f - md5: 55060a39fb1c4f7b4c6f3c514879790b - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - - tbb >=2023.0.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 111073 - timestamp: 1782213572597 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda sha256: 9988ed6339a5eb044ae8d079e2b22f5a310c41e49a0cf716057f30b21ef9cec2 md5: ca025fa5c42ba94453636a2ae333de6b @@ -10543,20 +11625,31 @@ packages: license_family: APACHE size: 249056 timestamp: 1772727247597 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda - sha256: 499a472fc7b598ad3753b8f2afe60eb5a277d48eca9362e8aca094b2862587a7 - md5: 2ce088ef09292930d4cb3262ce7e144d +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_0.conda + sha256: d66c56521195650637ce9a9ff69574c8cf6504de09fbe3a93f3570a48afef00c + md5: dc6b534dd7bb283ed9b90265b4e1daec depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 250912 - timestamp: 1782219111223 + size: 251243 + timestamp: 1781862003942 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2025.4.1-h3d5001d_1.conda + sha256: 6f3ebd706cedd8f0cc281481ec4d08ed30be94009cf6ed979098095136ebbbe8 + md5: c762ca6e933d57145d126d1a891701c5 + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + - tbb >=2022.3.0 + purls: [] + size: 235829 + timestamp: 1769898319432 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.0.0-h3d5001d_1.conda sha256: 20f1958e160c64f3d207f1dbdb6960cc5642070a472bebffc0d587b2f6429033 md5: 573b3f5ec3963e0153501a2676660ee4 @@ -10569,19 +11662,6 @@ packages: license_family: APACHE size: 236010 timestamp: 1772721351244 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda - sha256: 803cf60b354ba780fffe509d013e2603bee30e2a3496cbb772105cdde60f99b5 - md5: ea0cea8d43d94d3118533f2f89e71cd4 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - - tbb >=2023.0.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 238031 - timestamp: 1782213582645 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda sha256: c7db498aeda5b0f36b347f4211b93b66ba108faaf54157a08bae8fa3c3af5f81 md5: 07a23e96db38f63d9763f666b2db66aa @@ -10595,20 +11675,31 @@ packages: license_family: APACHE size: 211582 timestamp: 1772727264950 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda - sha256: bec24379598a4405de171ad151945e79743c6bd049aceabf190b753c3f7a11da - md5: 02e71250f7ca786c4b183d0a39ef63ab +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_0.conda + sha256: 6bb7e901f8dac9aede5129eac09d20019883863187413fea753932e012041d17 + md5: 9f4c3874f4dad7144bb22aa2c5738163 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 215488 - timestamp: 1782219123433 + size: 215859 + timestamp: 1781862014684 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2025.4.1-he07c6df_1.conda + sha256: 1d69f0676f79e4136e3154237d45f2f04f12aa8db56e53e542ab987062ad561d + md5: 00666acb159ba5a0d5214166c9db5aaa + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + purls: [] + size: 204116 + timestamp: 1769898333070 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.0.0-he07c6df_1.conda sha256: 3778ea3887c9a9300761e3f39ce86976746a35aa1392a4b76e4e4d3ce9e095b4 md5: 74bd299545a1fe23439bf6e071ed9710 @@ -10621,19 +11712,6 @@ packages: license_family: APACHE size: 202574 timestamp: 1772721365749 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda - sha256: 5d216b218170b78e5513d6cef1b76aeebb4b517579a8d98af06a2cf4b2de7050 - md5: ba98371ee8a8122294c44381b4a128d9 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 207050 - timestamp: 1782213592772 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda sha256: 01a28c0bd1f205b3800e7759e30bc8e8a75836e0d5a73a745b4da42837bbb174 md5: b43b96578573ddbcc8d084ae6e44c964 @@ -10648,21 +11726,21 @@ packages: license_family: APACHE size: 13173323 timestamp: 1772727282718 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda - sha256: eecc040a7838752a2dff9b4435a4c59bbc67b83e0c880457935b968206cb20b5 - md5: 7288f979a74cfe3fd4b32d8a0dc7baa4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_0.conda + sha256: 1c252564fa4bce1116ade1ac2391dee953c1a32c8c27e33c317f4bee76f8fb0d + md5: c04e7e7ad7eb07a4d42e6dec4af470e1 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 13637410 - timestamp: 1782219135415 + size: 13615152 + timestamp: 1781862026012 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda sha256: 720b87e1d5f1a10c577e040d4bf425072a978e925c6dfab8b1551bc848007c94 md5: 26e8e92c90d1a22af6eac8e9507d9b8f @@ -10678,13 +11756,13 @@ packages: license_family: APACHE size: 11402462 timestamp: 1772727323957 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda - sha256: a47442ce578b022e19a306f963536a108cc79385f4e09d57a14a849b6a864604 - md5: c0a258b12f0c18c476b8344dbd6db8d5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_0.conda + sha256: b92fb19d7b1a8326f215c8d86183d17783f5fe973c567652a92d2a2e063a9c50 + md5: d50c93b6826b14c38015df51e1c3175b depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - ocl-icd >=2.3.4,<3.0a0 - pugixml >=1.15,<1.16.0a0 @@ -10692,8 +11770,8 @@ packages: license: Apache-2.0 license_family: APACHE purls: [] - size: 12367381 - timestamp: 1782219178219 + size: 12363489 + timestamp: 1781862058675 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda sha256: df7eb2b23a1af38f2cd2281353309f2e2a04da1374ecedc7c6745c2a67ba617c md5: 01ba8b179ac45b2b37fe2d4225dddcc7 @@ -10709,22 +11787,22 @@ packages: license_family: APACHE size: 1994640 timestamp: 1772727360780 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda - sha256: 45a91feb68ccce90ad0fa86520572233ca20be56deae0c920f86133d020ad1e8 - md5: c214b149e108e92672e0ee097ebe16f7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_0.conda + sha256: 1e03f956529e14f0ee6592d69beb2e96f3b48e9d9b1e5431b54408ef337fcbfe + md5: f3e8e367237c3193e9f2103ff801dd5a depends: - __glibc >=2.17,<3.0.a0 - level-zero >=1.29.0,<2.0a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE purls: [] - size: 2630818 - timestamp: 1782219217519 + size: 2625212 + timestamp: 1781862087967 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda sha256: 8e7356b0b80b3f180615e264694d6811d388b210155d419553ff64e42f78ffa0 md5: aa002c4d343b01cdcc458c95cd071d1b @@ -10738,20 +11816,31 @@ packages: license_family: APACHE size: 192778 timestamp: 1772727380069 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda - sha256: ebeba9a3ac9505ee69b556865b7d1b9fbbad01ca1ebe6a4249ff62c3dc677b47 - md5: 2d946aebcf06e9ba438880987050e975 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_0.conda + sha256: ac0b1b08cd7d3ae4b4231bbc35fafe0c7b5fcb2ddd09d61d1773846b9fa7508b + md5: 2720c6a739bff56d850422f5550924ab depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 201061 - timestamp: 1782219232657 + size: 201278 + timestamp: 1781862100893 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2025.4.1-he07c6df_1.conda + sha256: 96d68f77e2db5cc38daa4986bc4c513aa07101ff77d7df6657916fe0e668d9c2 + md5: 67473b7ae7462074c5eac133011d0025 + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + - pugixml >=1.15,<1.16.0a0 + purls: [] + size: 190629 + timestamp: 1769898346574 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.0.0-he07c6df_1.conda sha256: 5d191b9d29fb2bbaca95bcd7325fbc3329c1049eccda4b84cfd79c64d4b6dc83 md5: 0946447f9717222c95c24f958d73dba9 @@ -10764,19 +11853,6 @@ packages: license_family: APACHE size: 185648 timestamp: 1772721380070 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda - sha256: 20fe9837f7ef18faca2f6fa0c722fcfd3cf363444b2d0835c7e3a1c8a6a4bbff - md5: 6141a1a2540c990df35ee4c35d6ee4d1 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 196276 - timestamp: 1782213602819 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda sha256: 35a68214201e807bd9a31f94e618cb6a5385198e89eef46dde6c122cff77da58 md5: 218084544c2e7e78e4b8877ec37b8cdb @@ -10792,22 +11868,35 @@ packages: license_family: APACHE size: 1860687 timestamp: 1772727397981 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda - sha256: 7b105c0102356352d6d9518a112ff6343dab6b8f32c837809117cd26cbf006df - md5: 3bd3599825189418ea14b2c9da3a6d87 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h7a07914_0.conda + sha256: 6ded75f33541fa9eb0b9a30ecab232f5683546c35da5cf9a494546da14e8a0df + md5: 7fdc943e958611c651512530459c71d4 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 + - libopenvino 2026.2.1 h1f0fae8_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE purls: [] - size: 1944558 - timestamp: 1782219246849 + size: 1945050 + timestamp: 1781862113537 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2025.4.1-h07d5dce_1.conda + sha256: 2539b5b38528d08be32550b6c98d73d4f8e05b793b91c5cfb6d65f3b323cf28b + md5: f3dfb94f18fce4072aeb9d5ed119e9d4 + depends: + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + purls: [] + size: 1692258 + timestamp: 1769898360577 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.0.0-h558496d_1.conda sha256: 9496ef9b24c3dcf3dda58a11360095fdd427d828d33705a1d9b90a4f1a5783c3 md5: 55e11d3e2f930299df66be96928e432d @@ -10822,21 +11911,6 @@ packages: license_family: APACHE size: 1665115 timestamp: 1772721394860 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda - sha256: f4f0ffdc53e266cd66e019525fdcabb5544bd89b043b12cf73d37e7128dd32ec - md5: 284180cfb8d20ce6218531fdff158315 - depends: - - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1770837 - timestamp: 1782213614201 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda sha256: cb37b717480207a66443a93d4342cf88210a74c0820fc0edd70e4fc791a64779 md5: 74915e5e271ef76a89f711eff5959a75 @@ -10852,22 +11926,35 @@ packages: license_family: APACHE size: 684224 timestamp: 1772727417276 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda - sha256: af45c03d41ebe0b48c28b68be31ee919cb801ac5077164808a66db515ad6a316 - md5: 91e198085bff9d8fa02d4d947f026ba8 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h7a07914_0.conda + sha256: d3d8bb8ba8ef57a54d81a140cb9256434561ccfa667474fc5c412284c8c956f3 + md5: caf9604a769c29952042277dc6012140 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 + - libopenvino 2026.2.1 h1f0fae8_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE purls: [] - size: 690240 - timestamp: 1782219261154 + size: 691255 + timestamp: 1781862126296 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2025.4.1-h07d5dce_1.conda + sha256: ea0cfadb2e67ccad8a7e2f75031fd920058f1a188d5bf66c65b69163563a075f + md5: d99e89493cf8474f6b6e21ccbe18a0e8 + depends: + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + purls: [] + size: 675934 + timestamp: 1769898376449 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.0.0-h558496d_1.conda sha256: 9e04b6c6b370e46bee7306afc9bc76e725042e981102f4c7b6b697b061c7324a md5: d26f5d445e0545ce674b11f496dba1a0 @@ -10882,21 +11969,6 @@ packages: license_family: APACHE size: 631754 timestamp: 1772721411589 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda - sha256: 5ab86f5cad02ff69d87776ddf9bad2c45c84f38579a8cf16464c03436d4c2362 - md5: b45b927c4d1b1128badee6e44146fd62 - depends: - - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 645700 - timestamp: 1782213626352 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda sha256: 086469e5cd8bfde48975fe8641a7d6924e3da00d75dd06c99e03a78df03a0568 md5: 559ef86008749861a53025f669004f18 @@ -10909,19 +11981,29 @@ packages: license_family: APACHE size: 1185558 timestamp: 1772727435039 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda - sha256: e6353874a36143ffb7db7ec2c3767fd5e3434a8eeff41a569bc46e68259f668f - md5: 152d6694f1d05b53319b8376cdd811e4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_0.conda + sha256: 187af1c93e55df819683882863c327a784c07adb5a834753a39570a6b269e53d + md5: f667aba7cb628a70030160744634b273 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE purls: [] - size: 1226625 - timestamp: 1782219274006 + size: 1228072 + timestamp: 1781862137415 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2025.4.1-hfae3067_1.conda + sha256: 1a01d6bf52ba6a5a0234a2c9f45e64b9409a8e2c12250b49f45e61caca00e814 + md5: 01f9e4b03c11cb896dd434f1a5df692e + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + purls: [] + size: 1142325 + timestamp: 1769898392266 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.0.0-hfae3067_1.conda sha256: e62d016274d9aeae8033a37cd742162637ca37cd10a5d436934c2709c58240f2 md5: 0fd361e9e722e741146d818284feca74 @@ -10933,18 +12015,6 @@ packages: license_family: APACHE size: 1091266 timestamp: 1772721428223 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda - sha256: 6a45d6ec341451dacbb7fa379de9a4d13e613fba6d15f7597c5e8dd529c73382 - md5: a82793a12b99b1d04ce77ebe0fd62e51 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1129309 - timestamp: 1782213636874 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda sha256: 3a9a404bc9fd39e7395d49f4bd8facb58a01a31aeceabe8723a9d4f8eb5cc381 md5: fb20f4234bc0e29af1baa13d35e36785 @@ -10961,23 +12031,37 @@ packages: license_family: APACHE size: 1257870 timestamp: 1772727453738 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda - sha256: cffe112815b8eb57528fdfdf8b39f6a0915884291147dab5bc2066d2bf123031 - md5: 89d2455ec2f065786856b0cd2ac1c0c6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h78e8023_0.conda + sha256: 8e127764ec624dddd0d237799079a755fc30c25a4612490454869acb94e21208 + md5: 7ddcaa8f5b954cb83bc54ec8c0fa4774 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 + - libopenvino 2026.2.1 h1f0fae8_0 + - libprotobuf >=6.33.5,<6.33.6.0a0 - libstdcxx >=14 - snappy >=1.2.2,<1.3.0a0 license: Apache-2.0 license_family: APACHE purls: [] - size: 1284650 - timestamp: 1782219287644 + size: 1283493 + timestamp: 1781862149739 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2025.4.1-h38473e3_1.conda + sha256: 61b6cd52c7b36eefdcd61031fcc136dca2bf5da40eb016961675ab0513840718 + md5: d4db7b24db084ec72793dd3bfc93ac7d + depends: + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=14 + - snappy >=1.2.2,<1.3.0a0 + purls: [] + size: 1224764 + timestamp: 1769898407205 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.0.0-h2cb6e3c_1.conda sha256: f4ecfddd9583fa475e2e637ac9226b6ae20482abda53bf4339a29407e6c05cb3 md5: f2c28f19267bfcdf9ec9ed4406a89d0b @@ -10993,22 +12077,6 @@ packages: license_family: APACHE size: 1184078 timestamp: 1772721443833 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda - sha256: cef784d6f72292993c06acc368c157f2093a48acf8556cdbdb6ecedf268e5b42 - md5: 535057ced1e60c5038e9adc80a0b2103 - depends: - - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - - snappy >=1.2.2,<1.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1215232 - timestamp: 1782213648342 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda sha256: e7cee37c92ed0b62c0458c13937b6ad66319f1879f236a31c3a67391a999f429 md5: 0f0281435478b981f672a44d0029018c @@ -11021,19 +12089,29 @@ packages: license_family: APACHE size: 456585 timestamp: 1772727473378 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda - sha256: 142e7b24173ca8c32dbdb29c60f33a56ffb21a4ed733c9d6ab160c3a213ff52e - md5: c1a50f20847df0a8cb462138153ab46f +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_0.conda + sha256: 538de764f715376cfd6a4469b0418642d8b87e8cc92895e335b9e09338bd8dea + md5: 263109d4775fce2644e102b905645299 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.2.1 h1f0fae8_1 + - libopenvino 2026.2.1 h1f0fae8_0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE purls: [] - size: 501906 - timestamp: 1782219300706 + size: 502319 + timestamp: 1781862161304 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2025.4.1-hfae3067_1.conda + sha256: 58366754c4313399bfa5cce26a968e6301412add7996b43d3e8c57978d09f0a8 + md5: 58c4ea65073ff6fbfd7a2f3d41748e25 + depends: + - libgcc >=14 + - libopenvino 2025.4.1 h1915271_1 + - libstdcxx >=14 + purls: [] + size: 456871 + timestamp: 1769898421788 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.0.0-hfae3067_1.conda sha256: b0f32488fd11cd8ed563ad01934360df383f720a2adecf6d36aa3ea2565baab7 md5: 0a160f00a4050e3bf4749129750d0303 @@ -11045,18 +12123,6 @@ packages: license_family: APACHE size: 428895 timestamp: 1772721459028 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda - sha256: 656276bd4072859725a47516c5954a91b408dd65a0d2d3f923964634a29d0ded - md5: 04e867fd452233f43885090c1533af28 - depends: - - libgcc >=14 - - libopenvino 2026.2.1 h9a8427e_1 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 468695 - timestamp: 1782213660401 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd md5: 2446ac1fe030c2aa6141386c1f5a6aed @@ -11145,20 +12211,33 @@ packages: purls: [] size: 549348 timestamp: 1777835950707 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda - sha256: 3af9437023ec7fa8f9bf5e390b7f6ad3df403aa736b0305121d1734af2d0620e - md5: 1909ad87fcdfa8397e3568d01500dc8d +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpmix-5.0.8-h31fc519_4.conda + sha256: 2837759fb832ab8587622602531f8e4b5d5e5ec12ea9b3936be06f384b933800 + md5: bd15ae3916a0cbe005c683bbc33811b7 depends: - - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - libevent >=2.1.12,<2.1.13.0a0 - libgcc >=14 - - lcms2 >=2.19,<3.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libdovi >=3.3.2,<4.0a0 - - shaderc >=2026.2,<2026.3.0a0 - license: LGPL-2.1-or-later + - libhwloc >=2.13.0,<2.13.1.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 731098 + timestamp: 1770962978877 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpmix-5.0.8-h83c401c_4.conda + sha256: 6d52176bda6c9e571df1cc40976020a462631a081ed4fbff04d206f91e0297ed + md5: 63c0a757a2358422238fbf25c70508f8 + depends: + - libevent >=2.1.12,<2.1.13.0a0 + - libgcc >=14 + - libhwloc >=2.13.0,<2.13.1.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD purls: [] - size: 560813 - timestamp: 1777835957369 + size: 728469 + timestamp: 1770963005933 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c md5: 5f13ffc7d30ffec87864e678df9957b4 @@ -11222,6 +12301,33 @@ packages: purls: [] size: 385227 timestamp: 1776315248638 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + sha256: f7232cb79a31f5a5bcd499aea930b469cde8b96d26db9541022493fd274d2a6e + md5: 6c9103e7ea739a3bb3505da49a4708c1 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.13,<2.7.0a0 + - openssl >=3.5.7,<4.0a0 + license: PostgreSQL + purls: [] + size: 2709008 + timestamp: 1782580447454 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + sha256: 8badce81df7b86fde16ad28dea9d5d65ebe318d6eb48865d10fbd4bd296cd152 + md5: aa592f45ebe4bb5a4dd228fdf006b617 + depends: + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - openldap >=2.6.13,<2.7.0a0 + - openssl >=3.5.7,<4.0a0 + license: PostgreSQL + purls: [] + size: 2911832 + timestamp: 1782580350945 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 md5: 11ac478fa72cf12c214199b8a96523f4 @@ -11236,21 +12342,35 @@ packages: license_family: BSD size: 3638698 timestamp: 1769749419271 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h3a69515_1.conda - sha256: a14fc571ea573d733d2c18abb52123c09d56610dbf29d03cc85cf1470f5cc8ae - md5: c80393b49f041180405a587e5ac59b49 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h538a264_2.conda + sha256: eb296398f05e3c1d0df2b616e7dd58b1d764540b5241ecf796480cdf82b29d2a + md5: 0f310965b9db4ef4ed9cd8a1672d9404 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3668552 + timestamp: 1783168697169 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h61c7711_5.conda + sha256: 08f0fd616f4482963e27e0cd7fd0d1913f33a153d3d97028beb8bc2892ff30a7 + md5: ce4282bd8d1af8a2c70d4d05223b89f7 + depends: + - libabseil * cxx17* + - libabseil >=20250512.1,<20250513.0a0 - libgcc >=14 - libstdcxx >=14 - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 3942143 - timestamp: 1781325648920 + size: 3897821 + timestamp: 1780003417336 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.33.5-h1f88751_0.conda sha256: f68780642c215b93f4991c43d88ab0af8a08e66826e68affc65b8905cc21d86b md5: 7f4a589ae616399b7e375053e82a3b12 @@ -11264,20 +12384,52 @@ packages: license_family: BSD size: 3465308 timestamp: 1769748410724 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h38371b1_1.conda - sha256: 19951d88c4e7ddd5b77036eb1343e396ce2a4160bb05db22f506a7fc1dae0e89 - md5: 76593c5f1a65a923de490a5100a10df7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + sha256: 7c9e562842f193f772ef0ba681f238a2d9e5ef637588b6e46eb30cc6aa1940c8 + md5: fa63517815747363c41b439ff9301db1 depends: - - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - __glibc >=2.28,<3.0.a0 - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - license: BSD-3-Clause - license_family: BSD + - libharfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - fribidi >=1.0.16,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 29441 + timestamp: 1782807076031 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + sha256: b287b67ba86d625bdaae919bac0a62ca6f5bc61509f034003df3c6b40f584a92 + md5: bf7fa2b700ba2c7b682aec5db14043c7 + depends: + - libgcc >=14 + - __glibc >=2.28,<3.0.a0 + - fribidi >=1.0.16,<2.0a0 + - libharfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + license: MIT + license_family: MIT + purls: [] + size: 29528 + timestamp: 1782807084739 +- conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda + sha256: 79ca55f7202daa560bffafcf7aef435e48618fe91a5243b8e4a6ed4edfbe63bc + md5: e5ab537cdd3462f26be2803209142913 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libharfbuzz >=14.2.1 + - fribidi >=1.0.16,<2.0a0 + license: MIT + license_family: MIT purls: [] - size: 3711720 - timestamp: 1781325304099 + size: 29296 + timestamp: 1782807186901 - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda sha256: 38b3189cf246f7265e06917f32d046ac375117c88834d045efe73ec48ceacc59 md5: d62da3d560992bfa2feb611d7be813b8 @@ -11856,9 +13008,9 @@ packages: purls: [] size: 993166 timestamp: 1762022118895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.1-cuda130_mkl_h5535f43_300.conda - sha256: 2dd082b5b2c631b62824f41a13cfa88e0e37c6f28d187a9987cbfd116f5a3fd5 - md5: 49b40832a1320f8eb0020d3e9bd18421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtorch-2.12.0-cuda130_mkl_h6edde62_300.conda + sha256: edec54f69102abcdefbd7fb5e484bdd1d21c0dfe8d1d1e7c0daf8309061e679e + md5: d06ce56f57a54cb82a5f30143afeeed0 depends: - __glibc >=2.28,<3.0.a0 - _openmp_mutex * *_llvm @@ -11870,7 +13022,7 @@ packages: - cuda-version >=13.0,<14 - fmt >=12.1.0,<12.2.0a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 - libblas * *mkl - libcblas >=3.11.0,<4.0a0 - libcublas >=13.1.1.3,<14.0a0 @@ -11883,28 +13035,28 @@ packages: - libcusparse >=12.6.3.3,<13.0a0 - libgcc >=14 - libmagma >=2.10.0,<2.10.1.0a0 - - libprotobuf >=7.35.1,<7.35.2.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 - libstdcxx >=14 - libuv >=1.52.1,<2.0a0 - libzlib >=1.3.2,<2.0a0 - - llvm-openmp >=22.1.8 + - llvm-openmp >=22.1.7 - mkl >=2026.0.0,<2027.0a0 - nccl >=2.30.7.1,<3.0a0 - onednn >=3.12,<4.0a0 - pybind11-abi 11 - sleef >=3.9.0,<4.0a0 constrains: - - pytorch-gpu 2.12.1 - - pytorch 2.12.1 cuda130_mkl_*_300 - pytorch-cpu <0.0a0 + - pytorch 2.12.0 cuda130_mkl_*_300 + - pytorch-gpu 2.12.0 license: BSD-3-Clause license_family: BSD purls: [] - size: 472545686 - timestamp: 1781841819133 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.12.1-cuda130_generic_h4328193_200.conda - sha256: 0742a662e62af3e15a326d9927b62b6398fde5c4971a3863aeca178c80af49ff - md5: 46a34bf52048dda3aacf071da129e979 + size: 472594027 + timestamp: 1781365915058 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtorch-2.10.0-cuda130_generic_hf217558_201.conda + sha256: bafe4a9ddf1449550993eedf13a5c8c08419454eb61f50f14a589dc4a3717503 + md5: 5169fc0bd0251fa70619c6d11cf33feb depends: - __glibc >=2.28,<3.0.a0 - _openmp_mutex * *_llvm @@ -11917,40 +13069,39 @@ packages: - cuda-version >=13.0,<14 - fmt >=12.1.0,<12.2.0a0 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20250512.1,<20250513.0a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - libcublas >=13.1.1.3,<14.0a0 - - libcudnn >=9.23.1.3,<10.0a0 - - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcublas >=13.1.0.3,<14.0a0 + - libcudnn >=9.18.0.77,<10.0a0 + - libcudss >=0.7.1.4,<0.7.2.0a0 - libcufft >=12.0.0.61,<13.0a0 - libcufile >=1.15.1.6,<2.0a0 - libcurand >=10.4.0.35,<11.0a0 - libcusolver >=12.0.4.66,<13.0a0 - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=14 + - libgcc >=13 - liblapack >=3.9.0,<4.0a0 - - libmagma >=2.10.0,<2.10.1.0a0 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - - libuv >=1.52.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - llvm-openmp >=22.1.8 - - nccl >=2.30.7.1,<3.0a0 - - onednn >=3.12,<4.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=13 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=21.1.8 + - nccl >=2.29.2.1,<3.0a0 - pybind11-abi 11 - sleef >=3.9.0,<4.0a0 constrains: - - pytorch 2.12.1 cuda130_generic_*_200 - - pytorch-cpu <0.0a0 - - pytorch-gpu 2.12.1 - openblas * openmp_* + - pytorch 2.10.0 cuda130_generic_*_201 + - pytorch-cpu <0.0a0 - libopenblas * openmp_* + - pytorch-gpu 2.10.0 license: BSD-3-Clause license_family: BSD purls: [] - size: 457116875 - timestamp: 1781841668799 + size: 472030916 + timestamp: 1769812368451 - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda sha256: ed4d2c01fbeb1330f112f7e399408634db277d3dfb2dec1d0395f56feaa24351 md5: 6c74fba677b61a0842cbf0f63eee683b @@ -12401,6 +13552,39 @@ packages: purls: [] size: 397493 timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 + md5: a69bbf778a462da324489976c84cfc8c + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - pthread-stubs + - ucrt >=10.0.20348.0 + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + purls: [] + size: 1208687 + timestamp: 1727279378819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 100393 + timestamp: 1702724383534 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + sha256: 6b46c397644091b8a26a3048636d10b989b1bf266d4be5e9474bf763f828f41f + md5: b4df5d7d4b63579d081fd3a4cf99740e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + purls: [] + size: 114269 + timestamp: 1702724369203 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 @@ -12693,6 +13877,45 @@ packages: purls: [] size: 519871 timestamp: 1776376969852 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 245434 + timestamp: 1757963724977 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + sha256: 8a816572a4650149d28c0b8b44e294380de18787735d00c7cf5fad91dba8e286 + md5: 0f31501ccd51a40f0a91381080ae7368 + depends: + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + purls: [] + size: 253367 + timestamp: 1757964660396 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + sha256: 13da38939c2c20e7112d683ab6c9f304bfaf06230a2c6a7cf00359da1a003ec7 + md5: 46034d9d983edc21e84c0b36f1b4ba61 + depends: + - libxml2 + - libxml2-16 >=2.14.6 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + purls: [] + size: 420223 + timestamp: 1757963935611 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -12833,6 +14056,21 @@ packages: purls: [] size: 348002 timestamp: 1781737042070 +- pypi: https://files.pythonhosted.org/packages/c9/2d/6a5171fb7236ac0895e1a02ccba3735bf291e8597239aa6421894d3c0ba8/llvmlite-0.48.0-cp314-cp314-win_amd64.whl + name: llvmlite + version: 0.48.0 + sha256: 966dcab0a598e2bd8fb5f2cc082cf7b07bae564fc485a3a8692393caf986facf + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d6/e1/05b50692b647cac3c18200ac485b04f342f00ed173c9cc46767274469a15/llvmlite-0.48.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: llvmlite + version: 0.48.0 + sha256: 05f0103c8f2f96a37441337e3643863c01b8e83e530aff38960dcb383c54a065 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f7/c3/470b8c4ff9ae2db2f9cf5c3e73de76ed908a32788ae9eb5602d43e6a476b/llvmlite-0.48.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + name: llvmlite + version: 0.48.0 + sha256: 37d66fae72802175b0bfe1ea06e624b51e2d7aee6c3c34bbd09739b8f88e8e0b + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda build_number: 0 sha256: 51e9214548f177db9c3fe70424e3774c95bf19cd69e0e56e83abe2e393228ba1 @@ -12936,6 +14174,140 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 30022 timestamp: 1772445159549 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + sha256: bd375b8d5999ebd47d3eecd3ca7d0cb6b13156b83181bb99c9704b758114058d + md5: 23f8baa07d5e4f97b86cde417babf32b + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=compressed-mapping + size: 14828 + timestamp: 1782829552189 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + sha256: ad593122795468a83fe01d3ce831faea26e34be6ae3a6c3a0702ccd4194d2dfd + md5: 80af8d8643a2e2f5bf47ecd15a2c30a5 + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 14957 + timestamp: 1782829505062 +- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + sha256: 280067b6b6dd6cef3125c517933ce4bd442a957fffa3ae0ca518379ba04c0fb6 + md5: 3aef2aea79e121dde8f8432ad8180a77 + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 15319 + timestamp: 1782829747462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda + sha256: 666a19f61a40c5936bd0f07965b159ced727256fa7e2a4ff9dd5f0146aad86f1 + md5: 5866f3034ce42e8d512e7640f43270fd + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libraqm >=0.10.5,<0.11.0a0 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=compressed-mapping + size: 9004007 + timestamp: 1782829533688 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda + sha256: 56696ee8bc7dcc4ad5f6c39bdc51c4248f256943c1f8bd2cf5cefcecb77fedf6 + md5: 4055d95e01cd2e79b66f9d7ed1213ede + depends: + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libraqm >=0.10.5,<0.11.0a0 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=hash-mapping + size: 8911500 + timestamp: 1782829487715 +- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda + sha256: 94bc6fb3f0dc6337ca3b5dcb3d65da3ede1f24ce14d1e597ed83585bffe59dfc + md5: 99da493a14f3e26e8069e12281ce504f + depends: + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libraqm >=0.10.5,<0.11.0a0 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/matplotlib?source=compressed-mapping + size: 8747069 + timestamp: 1782829728451 - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 md5: 00e120ce3e40bad7bfc78861ce3c4a25 @@ -13195,6 +14567,44 @@ packages: purls: [] size: 558708 timestamp: 1730581372400 +- conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda + sha256: e1698675ec83a2139c0b02165f47eaf0701bcab043443d9008fc0f8867b07798 + md5: 78b827d2852c67c68cd5b2c55f31e376 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6571 + timestamp: 1727683130230 +- conda: https://conda.anaconda.org/conda-forge/linux-64/mpi4py-4.1.2-py314hab80c86_100.conda + sha256: 0e1d44ec3a16e5bc7e83220ae6f0d980b5fa4eaf634f120a433565bf10f58908 + md5: d85ae97af19973b6a6e90c28cf3aa3f3 + depends: + - python + - openmpi >=4.1 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpi4py?source=hash-mapping + size: 874656 + timestamp: 1778930330106 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpi4py-4.1.2-py314hf3deed3_100.conda + sha256: 7c7effe53c11a5323815ca92f4b04ee16e250c4083e2a6c9e0b76cc4a546b584 + md5: bb8cc782893642546a4fe61302853347 + depends: + - python + - openmpi >=4.1 + - python 3.14.* *_cp314 + - libgcc >=14 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/mpi4py?source=hash-mapping + size: 823797 + timestamp: 1778930337240 - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda sha256: 5bbf2f8179ec43d34d67ca8e4989d216c1bdb4b749fe6cb40e86ebf88c1b5300 md5: 2e81b32b805f406d23ba61938a184081 @@ -13251,6 +14661,17 @@ packages: - pkg:pypi/msgpack?source=hash-mapping size: 88657 timestamp: 1762504357246 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/munkres?source=hash-mapping + size: 15851 + timestamp: 1749895533014 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -13446,6 +14867,81 @@ packages: purls: [] size: 3843 timestamp: 1582593857545 +- pypi: https://files.pythonhosted.org/packages/0f/26/885774c006de6620ed3d10f45d8e20fe0b8e6aad6d573211a2cbc8b3e528/numba-0.66.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: numba + version: 0.66.0 + sha256: e2b101f23b8b63978d334574d2039f27f0dccfe1d891756f33a2e2f3e4c88cf4 + requires_dist: + - llvmlite>=0.48.0.dev0,<0.49 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/66/c5/b46ad28ac3681d035ea21365c5e052149062e1a0a9affd0563d2760ea6ff/numba-0.66.0-cp314-cp314-win_amd64.whl + name: numba + version: 0.66.0 + sha256: bd57790acd20f6a468e0ad333ef6b82355e309a92310fb7dff80e919f01a21a9 + requires_dist: + - llvmlite>=0.48.0.dev0,<0.49 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/93/99/edebf7de890b73973d839dd971cf73734adfb81ffa1b4504f84b9059c3e5/numba-0.66.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl + name: numba + version: 0.66.0 + sha256: 63b943eb2c9ba371908ce2cd6dfc643db51fc40f7966993376a1701bc922f537 + requires_dist: + - llvmlite>=0.48.0.dev0,<0.49 + - numpy>=1.22,<2.5 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3f/e3/613f6fc457f430775d124bea2e38033802fe97ab412a032191ac9b117d3a/numba_cuda-0.30.4-cp314-cp314-win_amd64.whl + name: numba-cuda + version: 0.30.4 + sha256: a99227a6a7bc9f953a7abb61917d5ff767b9667f9c01e28d0b6b1def8f0fd991 + requires_dist: + - numba>=0.60.0 + - cuda-bindings>=12.9.1,<14.0.0 + - cuda-core>=0.5.1,<2.0.0 + - cuda-pathfinder>=1.4.0,<2.0.0 + - packaging + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'cu12' + - cuda-toolkit[cccl,cudart,nvcc,nvrtc]==12.* ; extra == 'cu12' + - nvidia-nvjitlink-cu12>=12.3.0,<13.0.0 ; extra == 'cu12' + - cuda-bindings==13.* ; extra == 'cu13' + - cuda-toolkit[cccl,cudart,nvrtc,nvvm]==13.* ; extra == 'cu13' + - nvidia-nvjitlink>=13.0.0,<14.0.0 ; extra == 'cu13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/bc/35/3c2a05375b01159632ed90384a04a08725b83b49d2e511f44158c5ec2c43/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl + name: numba-cuda + version: 0.30.4 + sha256: b153d7f59e9a7834dc5866681b607317c72f0d49f6bbfed06eef82b396cbee84 + requires_dist: + - numba>=0.60.0 + - cuda-bindings>=12.9.1,<14.0.0 + - cuda-core>=0.5.1,<2.0.0 + - cuda-pathfinder>=1.4.0,<2.0.0 + - packaging + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'cu12' + - cuda-toolkit[cccl,cudart,nvcc,nvrtc]==12.* ; extra == 'cu12' + - nvidia-nvjitlink-cu12>=12.3.0,<13.0.0 ; extra == 'cu12' + - cuda-bindings==13.* ; extra == 'cu13' + - cuda-toolkit[cccl,cudart,nvrtc,nvvm]==13.* ; extra == 'cu13' + - nvidia-nvjitlink>=13.0.0,<14.0.0 ; extra == 'cu13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/df/73/8934508d27efd9a930489059b980bc1e75336574be31bffb284a9e782fa7/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: numba-cuda + version: 0.30.4 + sha256: ec8e14ab7d4ecacaa1ff8d662efe5ab3c268e2f1cdad0330d28804b0d19a78c1 + requires_dist: + - numba>=0.60.0 + - cuda-bindings>=12.9.1,<14.0.0 + - cuda-core>=0.5.1,<2.0.0 + - cuda-pathfinder>=1.4.0,<2.0.0 + - packaging + - cuda-bindings>=12.9.1,<13.0.0 ; extra == 'cu12' + - cuda-toolkit[cccl,cudart,nvcc,nvrtc]==12.* ; extra == 'cu12' + - nvidia-nvjitlink-cu12>=12.3.0,<13.0.0 ; extra == 'cu12' + - cuda-bindings==13.* ; extra == 'cu13' + - cuda-toolkit[cccl,cudart,nvrtc,nvvm]==13.* ; extra == 'cu13' + - nvidia-nvjitlink>=13.0.0,<14.0.0 ; extra == 'cu13' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda sha256: 1d8377c8001c15ed12c2713b723213474b435706ab9d34ede69795d64af9e94d md5: 4ea6b620fdf24a1a0bc4f1c7134dfafb @@ -13484,26 +14980,26 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 8927860 timestamp: 1773839233468 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.0-py314h2b28147_0.conda - sha256: bbc665584886c90daf3f33cfbf665f279cf91d4bd5323f0432c16d2bf4d525e7 - md5: bdb21d2b990f9d3aee10fd43aca851fe +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.6-py314h2b28147_0.conda + sha256: bc61ae892973751a6b0e6ecea57ed6d7053224bddcb007165d6ceb1d7344ad47 + md5: f49b5f950379e0b97c35ca97682f7c6a depends: - python - - libgcc >=14 - libstdcxx >=14 + - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libcblas >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - liblapack >=3.9.0,<4.0a0 + - python_abi 3.14.* *_cp314 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 9075918 - timestamp: 1782112541752 + - pkg:pypi/numpy?source=hash-mapping + size: 8928909 + timestamp: 1779169198391 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py314haac167e_1.conda sha256: 1e1366e700156cbddc4daae0fec34a72b74105ba45f9c144f777120552924747 md5: 98ef547c85356475adb2197965c716b6 @@ -13542,25 +15038,25 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 8008045 timestamp: 1773839355275 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.0-py314he1698a1_0.conda - sha256: 8677e6bd3a1a95f8ecf2b0f1ca39f30f55b1aa0865b217bb3cb55b29d3e092fa - md5: 10165160938f6498096bda3e0ff051ac +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda + sha256: 04af718b911f8a3a0095481c7e283aa081a175fe626eccbc2c5644bcb2aba9a1 + md5: 8b173772deea177b45d2a133b509b3f7 depends: - python - libstdcxx >=14 - libgcc >=14 - - libcblas >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - python_abi 3.14.* *_cp314 + - libblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 8158865 - timestamp: 1782112546539 + size: 8002900 + timestamp: 1779169206742 - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda sha256: 34fc25b81cfa987e1825586ddb1a4ac76a246fdef343c9171109017674ad6503 md5: 2fccd2c4e9feb4e4c2a90043015525d6 @@ -13599,16 +15095,16 @@ packages: - pkg:pypi/numpy?source=hash-mapping size: 7311362 timestamp: 1773839141373 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.0-py314h02f10f6_0.conda - sha256: 86c3e926fa1d6f27ebe6b9db11ff12e9a3b6e4b0343bf4a9b489dafd9614da3f - md5: f92585b1624ecdd117b6d13fd4d691ed +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.6-py314h02f10f6_0.conda + sha256: de0eee21d902fb45a58454e3739e04ede7d02bf7575ca0ae9f959f20fa15c76b + md5: df95e6c7325bbae2571e5cef5f9c8096 depends: - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - liblapack >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - python_abi 3.14.* *_cp314 constrains: @@ -13616,9 +15112,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 7436159 - timestamp: 1782112573833 + - pkg:pypi/numpy?source=hash-mapping + size: 7318163 + timestamp: 1779169232086 - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda sha256: 482d94fce136c4352b18c6397b9faf0a3149bfb12499ab1ffebad8db0cb6678f md5: 3aa4b625f20f55cf68e92df5e5bf3c39 @@ -13633,6 +15129,21 @@ packages: - pkg:pypi/numpydoc?source=hash-mapping size: 65801 timestamp: 1764715638266 +- pypi: https://files.pythonhosted.org/packages/67/f2/ec9c05a108095828dfc58840978c627b3c313fdf2a567c6de9ffbbb46901/nvidia_nvjitlink-13.3.33-py3-none-win_amd64.whl + name: nvidia-nvjitlink + version: 13.3.33 + sha256: 4297ee49639b4f2e07255a1d69b3acc7ab2d011bb892b403e91ac98368962e3b + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/69/30/45414e35ff2eee7db3da037e5707037ccf9d2b5218ffbdb055ea4d5aa98a/nvidia_nvjitlink-13.3.33-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl + name: nvidia-nvjitlink + version: 13.3.33 + sha256: ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/f0/ee/580ca6f29dcab0221db8706badca1bbbb084f1975c4d4e83329c3a7e31f0/nvidia_nvjitlink-13.3.33-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl + name: nvidia-nvjitlink + version: 13.3.33 + sha256: 26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5 + requires_python: '>=3' - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl name: nvidia-sphinx-theme version: 0.0.9.post1 @@ -13641,6 +15152,219 @@ packages: - sphinx>=7.1 - pydata-sphinx-theme>=0.15 requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/43/da/d94c5904b0c7878be75994ba541b7937c9ecef50dc633fa10d149885cf4f/nvmath_python-1.0.0-cp314-cp314-win_amd64.whl + name: nvmath-python + version: 1.0.0 + sha256: 89807bd2e8a8ef79bf73868638c83fe5f94082f7d8d7b87e08cc94d072959ec4 + requires_dist: + - cuda-bindings + - cuda-core>=0.5.0,<2 + - cuda-pathfinder>=1.5.1,<2.0 + - numpy>=1.25,<3 + - pywin32 ; sys_platform == 'win32' + - mkl ; (platform_machine == 'AMD64' and extra == 'cpu') or (platform_machine == 'x86_64' and extra == 'cpu') + - nvpl-fft>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - nvpl-blas>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - cuda-bindings>=12.9.2,<13 ; extra == 'sysctk12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'sysctk12' + - cuda-bindings>=13.0.1,<14 ; extra == 'sysctk13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'sysctk13' + - nvmath-python[sysctk12] ; extra == 'cu12' + - cuda-core[cu12] ; extra == 'cu12' + - nvidia-cublas-cu12 ; extra == 'cu12' + - nvidia-cuda-nvrtc-cu12 ; extra == 'cu12' + - nvidia-cuda-runtime-cu12 ; extra == 'cu12' + - nvidia-cudss-cu12==0.8.* ; extra == 'cu12' + - nvidia-cufft-cu12 ; extra == 'cu12' + - nvidia-curand-cu12 ; extra == 'cu12' + - nvidia-cusolver-cu12 ; extra == 'cu12' + - nvidia-cusparse-cu12 ; extra == 'cu12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'cu12' + - nvmath-python[sysctk13] ; extra == 'cu13' + - cuda-core[cu13] ; extra == 'cu13' + - cuda-toolkit[cublas,cudart,cufft,curand,cusolver,cusparse,nvrtc]==13.* ; extra == 'cu13' + - nvidia-cudss-cu13==0.8.* ; extra == 'cu13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'cu13' + - cffi ; extra == 'numba' + - llvmlite ; extra == 'numba' + - numba ; extra == 'numba' + - numba-cuda>=0.28.1,<1 ; extra == 'numba' + - numba-cuda-mlir>=0.4.1,<1 ; python_full_version >= '3.11' and extra == 'numba' + - nvmath-python[sysctk12] ; extra == 'sysctk12-dx' + - nvmath-python[numba] ; extra == 'sysctk12-dx' + - nvmath-python[cu12] ; extra == 'cu12-dx' + - nvmath-python[numba] ; extra == 'cu12-dx' + - nvidia-libmathdx-cu12>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu12-dx' + - nvidia-cuda-cccl-cu12>12.4.127 ; extra == 'cu12-dx' + - nvidia-cuda-nvrtc-cu12!=12.4.*,!=12.5.0 ; extra == 'cu12-dx' + - nvmath-python[sysctk12] ; extra == 'sysctk12-distributed' + - nvidia-nccl-cu12>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nvmath-python[cu12] ; extra == 'cu12-distributed' + - nvmath-python[sysctk12-distributed] ; extra == 'cu12-distributed' + - nvidia-cublasmp-cu12>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cufftmp-cu12 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cusolvermp-cu12>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-nvshmem-cu12>=3.2.5 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvmath-python[sysctk13] ; extra == 'sysctk13-dx' + - nvmath-python[numba] ; extra == 'sysctk13-dx' + - nvmath-python[cu13] ; extra == 'cu13-dx' + - nvmath-python[numba] ; extra == 'cu13-dx' + - nvidia-libmathdx-cu13>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu13-dx' + - cuda-toolkit[cccl,nvrtc]==13.* ; extra == 'cu13-dx' + - nvmath-python[sysctk13] ; extra == 'sysctk13-distributed' + - nvidia-nccl-cu13>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nvmath-python[cu13] ; extra == 'cu13-distributed' + - nvmath-python[sysctk13-distributed] ; extra == 'cu13-distributed' + - cuda-toolkit[cublas]>=13.0.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cublasmp-cu13>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cufftmp-cu13>=12.1.3.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cusolvermp-cu13>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-nvshmem-cu13>=3.2.5 ; sys_platform == 'linux' and extra == 'cu13-distributed' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/4c/74/a07afd16866ee9f3afcf60e7d5dd1ad3ddc5fb9d56998fce0629eb2671a9/nvmath_python-1.0.0-cp314-cp314-manylinux_2_28_x86_64.whl + name: nvmath-python + version: 1.0.0 + sha256: b6ebb9ae1a2d16dc0b7431d0e6c3c72aa7b11f3e3e83d4dc4f046b086fff8fb8 + requires_dist: + - cuda-bindings + - cuda-core>=0.5.0,<2 + - cuda-pathfinder>=1.5.1,<2.0 + - numpy>=1.25,<3 + - pywin32 ; sys_platform == 'win32' + - mkl ; (platform_machine == 'AMD64' and extra == 'cpu') or (platform_machine == 'x86_64' and extra == 'cpu') + - nvpl-fft>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - nvpl-blas>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - cuda-bindings>=12.9.2,<13 ; extra == 'sysctk12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'sysctk12' + - cuda-bindings>=13.0.1,<14 ; extra == 'sysctk13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'sysctk13' + - nvmath-python[sysctk12] ; extra == 'cu12' + - cuda-core[cu12] ; extra == 'cu12' + - nvidia-cublas-cu12 ; extra == 'cu12' + - nvidia-cuda-nvrtc-cu12 ; extra == 'cu12' + - nvidia-cuda-runtime-cu12 ; extra == 'cu12' + - nvidia-cudss-cu12==0.8.* ; extra == 'cu12' + - nvidia-cufft-cu12 ; extra == 'cu12' + - nvidia-curand-cu12 ; extra == 'cu12' + - nvidia-cusolver-cu12 ; extra == 'cu12' + - nvidia-cusparse-cu12 ; extra == 'cu12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'cu12' + - nvmath-python[sysctk13] ; extra == 'cu13' + - cuda-core[cu13] ; extra == 'cu13' + - cuda-toolkit[cublas,cudart,cufft,curand,cusolver,cusparse,nvrtc]==13.* ; extra == 'cu13' + - nvidia-cudss-cu13==0.8.* ; extra == 'cu13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'cu13' + - cffi ; extra == 'numba' + - llvmlite ; extra == 'numba' + - numba ; extra == 'numba' + - numba-cuda>=0.28.1,<1 ; extra == 'numba' + - numba-cuda-mlir>=0.4.1,<1 ; python_full_version >= '3.11' and extra == 'numba' + - nvmath-python[sysctk12] ; extra == 'sysctk12-dx' + - nvmath-python[numba] ; extra == 'sysctk12-dx' + - nvmath-python[cu12] ; extra == 'cu12-dx' + - nvmath-python[numba] ; extra == 'cu12-dx' + - nvidia-libmathdx-cu12>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu12-dx' + - nvidia-cuda-cccl-cu12>12.4.127 ; extra == 'cu12-dx' + - nvidia-cuda-nvrtc-cu12!=12.4.*,!=12.5.0 ; extra == 'cu12-dx' + - nvmath-python[sysctk12] ; extra == 'sysctk12-distributed' + - nvidia-nccl-cu12>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nvmath-python[cu12] ; extra == 'cu12-distributed' + - nvmath-python[sysctk12-distributed] ; extra == 'cu12-distributed' + - nvidia-cublasmp-cu12>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cufftmp-cu12 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cusolvermp-cu12>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-nvshmem-cu12>=3.2.5 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvmath-python[sysctk13] ; extra == 'sysctk13-dx' + - nvmath-python[numba] ; extra == 'sysctk13-dx' + - nvmath-python[cu13] ; extra == 'cu13-dx' + - nvmath-python[numba] ; extra == 'cu13-dx' + - nvidia-libmathdx-cu13>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu13-dx' + - cuda-toolkit[cccl,nvrtc]==13.* ; extra == 'cu13-dx' + - nvmath-python[sysctk13] ; extra == 'sysctk13-distributed' + - nvidia-nccl-cu13>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nvmath-python[cu13] ; extra == 'cu13-distributed' + - nvmath-python[sysctk13-distributed] ; extra == 'cu13-distributed' + - cuda-toolkit[cublas]>=13.0.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cublasmp-cu13>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cufftmp-cu13>=12.1.3.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cusolvermp-cu13>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-nvshmem-cu13>=3.2.5 ; sys_platform == 'linux' and extra == 'cu13-distributed' + requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/7a/a2/512f5d0a9e2bdfe0b52c7afe7dbdd3c140fa18ab41c1c863f59eee8808df/nvmath_python-1.0.0-cp314-cp314-manylinux_2_28_aarch64.whl + name: nvmath-python + version: 1.0.0 + sha256: 7f78fb221df17fbb8e1303d536f5b945122c10febd74b37dea9cb8e44cc586a3 + requires_dist: + - cuda-bindings + - cuda-core>=0.5.0,<2 + - cuda-pathfinder>=1.5.1,<2.0 + - numpy>=1.25,<3 + - pywin32 ; sys_platform == 'win32' + - mkl ; (platform_machine == 'AMD64' and extra == 'cpu') or (platform_machine == 'x86_64' and extra == 'cpu') + - nvpl-fft>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - nvpl-blas>=0.3,<1 ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'cpu' + - cuda-bindings>=12.9.2,<13 ; extra == 'sysctk12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'sysctk12' + - cuda-bindings>=13.0.1,<14 ; extra == 'sysctk13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'sysctk13' + - nvmath-python[sysctk12] ; extra == 'cu12' + - cuda-core[cu12] ; extra == 'cu12' + - nvidia-cublas-cu12 ; extra == 'cu12' + - nvidia-cuda-nvrtc-cu12 ; extra == 'cu12' + - nvidia-cuda-runtime-cu12 ; extra == 'cu12' + - nvidia-cudss-cu12==0.8.* ; extra == 'cu12' + - nvidia-cufft-cu12 ; extra == 'cu12' + - nvidia-curand-cu12 ; extra == 'cu12' + - nvidia-cusolver-cu12 ; extra == 'cu12' + - nvidia-cusparse-cu12 ; extra == 'cu12' + - cutensor-cu12>=2.5.0,<3 ; extra == 'cu12' + - nvmath-python[sysctk13] ; extra == 'cu13' + - cuda-core[cu13] ; extra == 'cu13' + - cuda-toolkit[cublas,cudart,cufft,curand,cusolver,cusparse,nvrtc]==13.* ; extra == 'cu13' + - nvidia-cudss-cu13==0.8.* ; extra == 'cu13' + - cutensor-cu13>=2.5.0,<3 ; extra == 'cu13' + - cffi ; extra == 'numba' + - llvmlite ; extra == 'numba' + - numba ; extra == 'numba' + - numba-cuda>=0.28.1,<1 ; extra == 'numba' + - numba-cuda-mlir>=0.4.1,<1 ; python_full_version >= '3.11' and extra == 'numba' + - nvmath-python[sysctk12] ; extra == 'sysctk12-dx' + - nvmath-python[numba] ; extra == 'sysctk12-dx' + - nvmath-python[cu12] ; extra == 'cu12-dx' + - nvmath-python[numba] ; extra == 'cu12-dx' + - nvidia-libmathdx-cu12>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu12-dx' + - nvidia-cuda-cccl-cu12>12.4.127 ; extra == 'cu12-dx' + - nvidia-cuda-nvrtc-cu12!=12.4.*,!=12.5.0 ; extra == 'cu12-dx' + - nvmath-python[sysctk12] ; extra == 'sysctk12-distributed' + - nvidia-nccl-cu12>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk12-distributed' + - nvmath-python[cu12] ; extra == 'cu12-distributed' + - nvmath-python[sysctk12-distributed] ; extra == 'cu12-distributed' + - nvidia-cublasmp-cu12>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cufftmp-cu12 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-cusolvermp-cu12>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvidia-nvshmem-cu12>=3.2.5 ; sys_platform == 'linux' and extra == 'cu12-distributed' + - nvmath-python[sysctk13] ; extra == 'sysctk13-dx' + - nvmath-python[numba] ; extra == 'sysctk13-dx' + - nvmath-python[cu13] ; extra == 'cu13-dx' + - nvmath-python[numba] ; extra == 'cu13-dx' + - nvidia-libmathdx-cu13>=0.3.1,!=0.3.1.8,<0.4.0 ; extra == 'cu13-dx' + - cuda-toolkit[cccl,nvrtc]==13.* ; extra == 'cu13-dx' + - nvmath-python[sysctk13] ; extra == 'sysctk13-distributed' + - nvidia-nccl-cu13>=2.29.2 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nccl4py>=0.3.1,<0.4 ; sys_platform == 'linux' and extra == 'sysctk13-distributed' + - nvmath-python[cu13] ; extra == 'cu13-distributed' + - nvmath-python[sysctk13-distributed] ; extra == 'cu13-distributed' + - cuda-toolkit[cublas]>=13.0.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cublasmp-cu13>=0.8.1,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cufftmp-cu13>=12.1.3.2 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-cusolvermp-cu13>=0.8.0,<0.10 ; sys_platform == 'linux' and extra == 'cu13-distributed' + - nvidia-nvshmem-cu13>=3.2.5 ; sys_platform == 'linux' and extra == 'cu13-distributed' + requires_python: '>=3.10,<3.15' - pypi: https://files.pythonhosted.org/packages/20/77/a2b64335bab7c75fe1c054cc4ebe2d3b3234cbdb04d2e1d6ca73551c54f5/nvtx-0.2.15-cp314-cp314-win_amd64.whl name: nvtx version: 0.2.15 @@ -13703,17 +15427,6 @@ packages: purls: [] size: 13069211 timestamp: 1779565995400 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/onednn-3.12-omp_h605b386_0.conda - sha256: ff6c1d53eaa1221a46bb77ac871dc8eea8ef070fb975ce9810329a28d65b523e - md5: 365b9ebd06388b4c7647b4b477cde089 - depends: - - libgcc >=14 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 7480320 - timestamp: 1779566014380 - conda: https://conda.anaconda.org/conda-forge/linux-64/onemkl-license-2026.0.0-ha770c72_915.conda sha256: 80008386bb19f8dffc8873d6c1c16f22bb63f19c960d774b647b9a01e99ad624 md5: 0f40953c960dc51ed18611a48f4b22a0 @@ -13817,6 +15530,105 @@ packages: purls: [] size: 392636 timestamp: 1758489353577 +- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + sha256: 24342dee891a49a9ba92e2018ec0bde56cc07fdaec95275f7a55b96f03ea4252 + md5: e723ab7cc2794c954e1b22fde51c16e4 + depends: + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 245594 + timestamp: 1772624841727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 + md5: 680608784722880fbfe1745067570b00 + depends: + - __glibc >=2.17,<3.0.a0 + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 786149 + timestamp: 1775741359582 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + sha256: 08fab1d144a9790763f30bd44ac4a2f288703ad668d8c31d339ddea23e981147 + md5: 67eea19865a3463f75ca0d3a1d096350 + depends: + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + purls: [] + size: 911524 + timestamp: 1775741371965 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-h67ed482_1.conda + sha256: 9d13b09c95f5e9429f295dc89a896dae41a4ca4f77118139b1ff02001ae25127 + md5: afa5d72e0e68fdf2b51b1c80a3d2086b + depends: + - mpi 1.0.* openmpi + - libgcc >=14 + - libgfortran5 >=14.3.0 + - libgfortran + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - libevent >=2.1.12,<2.1.13.0a0 + - libhwloc >=2.13.0,<2.13.1.0a0 + - ucc >=1.6.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucx >=1.20.0,<1.21.0a0 + - libfabric + - libfabric1 >=1.14.0 + - libpmix >=5.0.8,<6.0a0 + - libnl >=3.11.0,<4.0a0 + constrains: + - __cuda >=12.0 + - cuda-version >=12.0 + - libprrte ==0.0.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 3940272 + timestamp: 1772089559619 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openmpi-5.0.10-hbbf8ccc_1.conda + sha256: 170eb64b291513421ee86831796d45677271457652377b5c4106f0ad6d47a5d5 + md5: 5c28aadcdca1d3c5e8cbc168be551829 + depends: + - mpi 1.0.* openmpi + - libstdcxx >=14 + - libgcc >=14 + - libgfortran5 >=14.3.0 + - libgfortran + - libevent >=2.1.12,<2.1.13.0a0 + - libnl >=3.11.0,<4.0a0 + - ucc >=1.6.0,<2.0a0 + - libhwloc >=2.13.0,<2.13.1.0a0 + - libzlib >=1.3.1,<2.0a0 + - libfabric + - libfabric1 >=1.14.0 + - libpmix >=5.0.8,<6.0a0 + - ucx >=1.20.0,<1.21.0a0 + constrains: + - __cuda >=12.0 + - cuda-version >=12.0 + - libprrte ==0.0.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4166055 + timestamp: 1772089565931 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -14130,52 +15942,76 @@ packages: - pkg:pypi/pexpect?source=hash-mapping size: 53561 timestamp: 1733302019362 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda - sha256: 123d8a7c16c88658b4f29e9f115a047598c941708dade74fbaff373a32dbec5e - md5: 76c4757c0ec9d11f969e8eb44899307b +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda + sha256: bcab128df8980514061a78b9c67f5004954048f584da20df8c5a78de9e3f5abb + md5: 233e62a8eb894b79b5c93f4f8dec4dcd depends: - python - - libgcc >=14 - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libtiff >=4.7.1,<4.8.0a0 - openjpeg >=2.5.4,<3.0a0 - libxcb >=1.17.0,<2.0a0 - - libwebp-base >=1.6.0,<2.0a0 - zlib-ng >=2.3.3,<2.4.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 + - libwebp-base >=1.6.0,<2.0a0 - python_abi 3.14.* *_cp314 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - lcms2 >=2.18,<3.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - lcms2 >=2.19.1,<3.0a0 - tk >=8.6.13,<8.7.0a0 license: HPND purls: - pkg:pypi/pillow?source=hash-mapping - size: 1082797 - timestamp: 1775060059882 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.2.0-py314hac3e5ec_0.conda - sha256: 96b26c2657275ffe84ab510edf0865e21999d791485d12794edd4a71b837beb6 - md5: 87d58d103b47c4a8567b3d7666647684 + size: 1108174 + timestamp: 1782912080163 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda + sha256: 8d8c5f524a17e9e441cd25210daddb7a3c97d9316dea8493b2150a496b80ea77 + md5: ec3c5434d1b98093c53fa5a0c559b842 depends: - python - - libgcc >=14 - python 3.14.* *_cp314 + - libgcc >=14 + - tk >=8.6.13,<8.7.0a0 + - python_abi 3.14.* *_cp314 - openjpeg >=2.5.4,<3.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libxcb >=1.17.0,<2.0a0 - - libwebp-base >=1.6.0,<2.0a0 - zlib-ng >=2.3.3,<2.4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - lcms2 >=2.19.1,<3.0a0 + license: HPND + purls: + - pkg:pypi/pillow?source=compressed-mapping + size: 1077965 + timestamp: 1782912107475 +- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda + sha256: c9dc3212ed0021974541072ee3765a5097a0721191c34ee485d7d7e94449648f + md5: 09b8e6ac8f4a257b59e5d3025f3c9c1d + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 - python_abi 3.14.* *_cp314 - - lcms2 >=2.18,<3.0a0 - - tk >=8.6.13,<8.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - libfreetype >=2.14.3 - libfreetype6 >=2.14.3 + - libwebp-base >=1.6.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + - lcms2 >=2.19.1,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 license: HPND purls: - - pkg:pypi/pillow?source=hash-mapping - size: 1062080 - timestamp: 1775060067775 + - pkg:pypi/pillow?source=compressed-mapping + size: 989058 + timestamp: 1782912129930 - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda sha256: 5f66ea31d62188c266c5a8752119b0cc90a5bf05963f665cf48a33e0ec58d39c md5: 09a970fbf75e8ed1aa633827ded6aa4f @@ -14329,12 +16165,24 @@ packages: purls: [] size: 8342 timestamp: 1726803319942 -- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 - md5: 7d9daffbb8d8e0af0f769dbbcd173a54 +- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b + md5: 3c8f2573569bb816483e5cf57efbbe29 depends: - - python >=3.9 - license: ISC + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 9389 + timestamp: 1726802555076 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC purls: - pkg:pypi/ptyprocess?source=hash-mapping size: 19457 @@ -14556,6 +16404,80 @@ packages: - pkg:pypi/pyparsing?source=hash-mapping size: 110893 timestamp: 1769003998136 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda + sha256: e410d0d4151f418dc75ea2dc38dfb0e7a136090b6874e5ca1c699fa840b4994d + md5: 5d2051f0630a568926943fc53c0aaa4c + depends: + - python + - qt6-main 6.11.1.* + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - python_abi 3.14.* *_cp314 + - qt6-main >=6.11.1,<6.12.0a0 + - libclang13 >=22.1.5 + - libxml2 + - libxml2-16 >=2.14.6 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 13821776 + timestamp: 1778933872780 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda + sha256: 773bb42e09bfe13469b3d1db0dd79821146131210bec9eb1b69e761d0b5e9c26 + md5: 48e83c1e5552d2bf7f5c8d7d8bd9fc85 + depends: + - python + - qt6-main 6.11.1.* + - libgcc >=14 + - libstdcxx >=14 + - libopengl >=1.7.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - python_abi 3.14.* *_cp314 + - libegl >=1.7.0,<2.0a0 + - qt6-main >=6.11.1,<6.12.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libgl >=1.7.0,<2.0a0 + - libclang13 >=22.1.5 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 12361659 + timestamp: 1778933881635 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda + sha256: 070802d5e1e1c1feb24d481efbd90b300fb0ecc1ce4312a3bbcbaae4393c05f9 + md5: 638be6b8674e7acf7a84132903cf4c8e + depends: + - python + - qt6-main 6.11.1.* + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libxslt >=1.1.43,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - qt6-main >=6.11.1,<6.12.0a0 + - python_abi 3.14.* *_cp314 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libclang13 >=22.1.5 + license: LGPL-3.0-only + license_family: LGPL + purls: + - pkg:pypi/pyside6?source=hash-mapping + - pkg:pypi/shiboken6?source=hash-mapping + size: 11579652 + timestamp: 1778933912020 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -14872,9 +16794,9 @@ packages: purls: [] size: 6989 timestamp: 1752805904792 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.1-cuda130_mkl_py314_h5d99997_300.conda - sha256: dabbecc8dcf3af4718a4c5a80a5d44f280811873f27daa4b041f3ec20d8f533c - md5: b25f00231badfc906d431c515ce7ecc6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.0-cuda130_mkl_py314_he284d22_300.conda + sha256: dae5acdd456c28519656f98fe34526cf23156b3308579e7d7924c093297561c7 + md5: cadb48706f4010e41dac133839b2644c depends: - __cuda - __glibc >=2.28,<3.0.a0 @@ -14890,7 +16812,7 @@ packages: - fsspec - jinja2 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20260107.1,<20260108.0a0 - libblas * *mkl - libcblas >=3.11.0,<4.0a0 - libcublas >=13.1.1.3,<14.0a0 @@ -14903,12 +16825,12 @@ packages: - libcusparse >=12.6.3.3,<13.0a0 - libgcc >=14 - libmagma >=2.10.0,<2.10.1.0a0 - - libprotobuf >=7.35.1,<7.35.2.0a0 + - libprotobuf >=6.33.5,<6.33.6.0a0 - libstdcxx >=14 - - libtorch 2.12.1 cuda130_mkl_h5535f43_300 + - libtorch 2.12.0 cuda130_mkl_h6edde62_300 - libuv >=1.52.1,<2.0a0 - libzlib >=1.3.2,<2.0a0 - - llvm-openmp >=22.1.8 + - llvm-openmp >=22.1.7 - mkl >=2026.0.0,<2027.0a0 - nccl >=2.30.7.1,<3.0a0 - networkx @@ -14922,20 +16844,20 @@ packages: - setuptools <82 - sleef >=3.9.0,<4.0a0 - sympy >=1.13.3 - - triton 3.7.1 + - triton 3.7.0 - typing_extensions >=4.10.0 constrains: - - pytorch-gpu 2.12.1 - pytorch-cpu <0.0a0 + - pytorch-gpu 2.12.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 26990927 - timestamp: 1781843342171 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.12.1-cuda130_generic_py314_h1da07bd_200.conda - sha256: 46688459ca322948021c689eff157a2f87d0235c08d49f086fbf3dda0b8870d0 - md5: 1736ee7eb6b9e5a82dc025b3a013a6e2 + size: 27110492 + timestamp: 1781368272647 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h0c96c11_201.conda + sha256: 34cbced3f1489da71cb1f429fe9c34572a4ecce44b65f46be89bb5afff98d5f1 + md5: 7dd9d6ddef98b56e40d34e51bfa4ff77 depends: - __cuda - __glibc >=2.28,<3.0.a0 @@ -14952,71 +16874,74 @@ packages: - fsspec - jinja2 - libabseil * cxx17* - - libabseil >=20260526.0,<20260527.0a0 + - libabseil >=20250512.1,<20250513.0a0 - libcblas >=3.9.0,<4.0a0 - - libcublas >=13.1.1.3,<14.0a0 - - libcudnn >=9.23.1.3,<10.0a0 - - libcudss >=0.8.0.10,<0.8.1.0a0 + - libcublas >=13.1.0.3,<14.0a0 + - libcudnn >=9.18.0.77,<10.0a0 + - libcudss >=0.7.1.4,<0.7.2.0a0 - libcufft >=12.0.0.61,<13.0a0 - libcufile >=1.15.1.6,<2.0a0 - libcurand >=10.4.0.35,<11.0a0 - libcusolver >=12.0.4.66,<13.0a0 - libcusparse >=12.6.3.3,<13.0a0 - - libgcc >=14 + - libgcc >=13 - liblapack >=3.9.0,<4.0a0 - - libmagma >=2.10.0,<2.10.1.0a0 - - libprotobuf >=7.35.1,<7.35.2.0a0 - - libstdcxx >=14 - - libtorch 2.12.1 cuda130_generic_h4328193_200 - - libuv >=1.52.1,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - llvm-openmp >=22.1.8 - - nccl >=2.30.7.1,<3.0a0 + - libmagma >=2.9.0,<2.9.1.0a0 + - libprotobuf >=6.31.1,<6.31.2.0a0 + - libstdcxx >=13 + - libtorch 2.10.0 cuda130_generic_hf217558_201 + - libuv >=1.51.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - llvm-openmp >=21.1.8 + - nccl >=2.29.2.1,<3.0a0 - networkx - nomkl - numpy >=1.23,<3 - - onednn >=3.12,<4.0a0 - optree >=0.13.0 - pybind11 - pybind11-abi 11 - python >=3.14,<3.15.0a0 - python >=3.14,<3.15.0a0 *_cp314 - python_abi 3.14.* *_cp314 - - setuptools <82 + - setuptools - sleef >=3.9.0,<4.0a0 - sympy >=1.13.3 - - triton 3.7.1 + - triton 3.6.0 - typing_extensions >=4.10.0 constrains: - - pytorch-gpu 2.12.1 - pytorch-cpu <0.0a0 + - pytorch-gpu 2.10.0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/torch?source=hash-mapping - size: 26781142 - timestamp: 1781843840773 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.1-cuda129_mkl_h0d04637_300.conda - sha256: 6962557638794695e9368fec8358913138de6ac42263f4106b0b0d289aa8c90f - md5: e0e4cda52c574ebc52a1433de2f64b42 + size: 27785489 + timestamp: 1769815120766 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.0-cuda129_mkl_h0d04637_300.conda + sha256: 17c3e4ecb2db7b382a83953d28d4c322bf575ef85747852f232dc3acd3f8a4f4 + md5: fab928406ec0676c0c0a45abebf1f535 depends: - - pytorch 2.12.1 cuda*_mkl*300 + - pytorch 2.12.0 cuda*_mkl*300 license: BSD-3-Clause license_family: BSD purls: [] - size: 55687 - timestamp: 1781849857048 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.12.1-cuda129_generic_hda344be_200.conda - sha256: 0c149b792c00a17accbc4f3b944090a95e95e02f9a7a93dc81f5775f4ed20b9d - md5: be94b3604dab4bba2c92d71aaf10d5c3 + size: 58390 + timestamp: 1781372651784 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda129_generic_hdc58e1e_201.conda + sha256: af88b67bd7b6a23fc04e5fd0d896b0588d0efbecd33c68a0a27a9a55475c1b4c + md5: b0b477b5d4be01b3c2303559e7e06afb depends: - - arm-variant * sbsa - - pytorch 2.12.1 cuda*_generic*200 + - pytorch 2.10.0 cuda*_generic*201 license: BSD-3-Clause license_family: BSD purls: [] - size: 55745 - timestamp: 1781849755104 + size: 51900 + timestamp: 1769828256299 +- pypi: https://files.pythonhosted.org/packages/21/82/3bf86d2e2808902013132e1ce905a7da0da53790f3836c64bf44d55e24f3/pywin32-312-cp314-cp314-win_amd64.whl + name: pywin32 + version: '312' + sha256: a4dd3a848290ef724347b19f301045831d8e802fa4464f491b98b1e0a081432e + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py314h8f8f202_1.conda sha256: 6918a8067f296f3c65d43e84558170c9e6c3f4dd735cfe041af41a7fdba7b171 md5: 2d7b7ba21e8a8ced0eca553d4d53f773 @@ -15134,6 +17059,217 @@ packages: - pkg:pypi/pyzmq?source=hash-mapping size: 183235 timestamp: 1771716967192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + sha256: 49f777bdf3c5e030a8c7b24c58cdfe9486b51d6ae0001841079a3228bdf9fb51 + md5: bb138086d938e2b64f5f364945793ebf + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + purls: [] + size: 554571 + timestamp: 1720813941183 +- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 + md5: 854fbdff64b572b5c0b470f334d34c11 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LicenseRef-Qhull + purls: [] + size: 1377020 + timestamp: 1720814433486 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda + sha256: aefbc43bde188ff4027d480da99c7fa9e8e6341e9762e065190239cb9b99bb1c + md5: 331d660aef48fec733a878dd1f8f4206 + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgl-devel + - libegl-devel + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libpq >=18.4,<19.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - wayland >=1.25.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - libpng >=1.6.58,<1.7.0a0 + - harfbuzz >=14.2.1 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - zstd >=1.5.7,<1.6.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - icu >=78.3,<79.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - alsa-lib >=1.2.16,<1.3.0a0 + - openssl >=3.5.6,<4.0a0 + - libglib >=2.88.1,<3.0a0 + - libgl >=1.7.0,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - dbus >=1.16.2,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 60185421 + timestamp: 1780593127053 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda + sha256: 2ccded6ae260724733b80c1fb1c627068fd9cc8752ad425a3ea827fd4675ec23 + md5: bff3e4e7be46f5800da83261c2cec35b + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgl-devel + - libegl-devel + - libstdcxx >=14 + - libgcc >=14 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + - dbus >=1.16.2,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libglib >=2.88.1,<3.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - harfbuzz >=14.2.1 + - libwebp-base >=1.6.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - icu >=78.3,<79.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - alsa-lib >=1.2.16,<1.3.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libpq >=18.4,<19.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 63087962 + timestamp: 1780593135478 +- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda + sha256: c0f0552a879e18282799431c7d2769b269839ac3b3735082e754df3c6fa0728d + md5: a8d735f3faf356a24acf9eea0a940a0f + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - krb5 >=1.22.2,<1.23.0a0 + - libglib >=2.88.1,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - icu >=78.3,<79.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libsqlite >=3.53.1,<4.0a0 + - harfbuzz >=14.2.0 + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + purls: [] + size: 89576886 + timestamp: 1780400596481 - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda sha256: 8e0b7962cf8bec9a016cd91a6c6dc1f9ebc8e7e316b1d572f7b9047d0de54717 md5: d487d93d170e332ab39803e05912a762 @@ -15620,6 +17756,17 @@ packages: license_family: MIT size: 639697 timestamp: 1773074868565 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + sha256: 48a9f96016505debadfc67f06de7ac548decbc38d327409b24b0432ef6f16335 + md5: 6bf6acbab2499830180ec88c3aff2fa4 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=compressed-mapping + size: 642081 + timestamp: 1783619174976 - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda sha256: 0c2d6f24ee2b614ee1da4d7d99cc9944ea1ace65455a47d48d8c1f726317168a md5: 8dc8dda113c4c568256bdd486b6e842e @@ -15657,21 +17804,9 @@ packages: - spirv-tools >=2026,<2027.0a0 license: Apache-2.0 license_family: Apache + purls: [] size: 115498 timestamp: 1770208786806 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda - sha256: 487c021f4f10ae963e9192c9bbc0d3bba8f11cb3a2bb91fd351e4ea3e1ebc109 - md5: 9a389f225e6d2a8cc1e425c128caffe8 - depends: - - glslang >=16,<17.0a0 - - libgcc >=14 - - libstdcxx >=14 - - spirv-tools >=2026,<2027.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 115991 - timestamp: 1777360628740 - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-h8fa7867_1.conda sha256: b2f6e199df47ca314294ad393818d6b499fd544703abcede0f19007b8f8f10e4 md5: 04d62bc008ee442843e2f24f603ea1a6 @@ -16349,6 +18484,20 @@ packages: - pkg:pypi/tornado?source=compressed-mapping size: 912476 timestamp: 1774358032579 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + sha256: bbb7056f7c5fd606df16ed73ee68687050de2c02fd69a3f69a1cb533a7ed2ae8 + md5: 4a8e5889712641aabdf6695e292857fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 918368 + timestamp: 1781006801436 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py314hafb4487_0.conda sha256: a7096330909a4b3345cbaecea099613929aae52900310209e0e27e616b550e4c md5: 6fa496cc0b64d496a6a755c9de72f17b @@ -16362,6 +18511,19 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 914247 timestamp: 1774359407535 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + sha256: 7a5157dabdc88f2e16a45f8e342657ceb0d4515b8640c8a4f1c3b3de88dcc92e + md5: 82b0cb99192ae48eca75f25102fd5ce0 + depends: + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 916897 + timestamp: 1781007943867 - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda sha256: 49d64837dd02475903479ca47b82669bd6c9f7e6afde61860c6f3f2bd57d8a03 md5: 87b1215adf7f0ba1fb9250af9fc668e1 @@ -16377,6 +18539,21 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 914835 timestamp: 1774358183098 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + sha256: 6b9f5a195ca148f7c6b9a4a0a026631979b3112c43cd7c1064085ff833dfa4f0 + md5: b1b9bf11a82e608c5649d7462de94c5f + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 919275 + timestamp: 1781006902968 - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 md5: 019a7385be9af33791c989871317e1ed @@ -16388,9 +18565,9 @@ packages: - pkg:pypi/traitlets?source=hash-mapping size: 110051 timestamp: 1733367480074 -- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.1-cuda130py314h1cdc6f0_1.conda - sha256: c526abff27dd48435fe15019c4fec3c8a31c0435ea1d1f9fb5a8145cdc4319f0 - md5: 13491b40def8e902433945de06b88b85 +- conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.0-cuda130py314h1cdc6f0_0.conda + sha256: 5d515e426cb529fa269d653df5ee5d355f6dfc7d5b24bece552f5b9da84625d2 + md5: 26aec7cb81f5a0cafe6bc826d089fe70 depends: - python - setuptools @@ -16398,23 +18575,23 @@ packages: - cuda-cuobjdump - cuda-cudart - cuda-cupti + - cuda-version >=13.0,<14 - libstdcxx >=14 - libgcc >=14 - - cuda-version >=13.0,<14 - __glibc >=2.28,<3.0.a0 - - libzlib >=1.3.2,<2.0a0 - zstd >=1.5.7,<1.6.0a0 - - cuda-cupti >=13.0.85,<14.0a0 + - libzlib >=1.3.2,<2.0a0 - python_abi 3.14.* *_cp314 + - cuda-cupti >=13.0.85,<14.0a0 license: MIT license_family: MIT purls: - pkg:pypi/triton?source=hash-mapping - size: 40376689 - timestamp: 1781881965775 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.7.1-cuda130py314ha788bc0_1.conda - sha256: 29a6a5028fd2d99a35886b268045da54d27b9b15b30b96cf4f351d4b5b43c2b0 - md5: aaee2741e58071208ce075fd1f89e4e9 + size: 252952506 + timestamp: 1779707815642 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_2.conda + sha256: ef23731246966345aaffa731c92cb81ecdb3ea4e677fe2f96bcfe25d80e58a97 + md5: 83a619850f6587aa5a597a36c0fe528d depends: - python - setuptools @@ -16422,21 +18599,22 @@ packages: - cuda-cuobjdump - cuda-cudart - cuda-cupti - - cuda-version >=13.0,<14 - - arm-variant * sbsa - - __glibc >=2.28,<3.0.a0 - libstdcxx >=14 - libgcc >=14 - - cuda-cupti >=13.0.85,<14.0a0 + - arm-variant * sbsa + - python 3.14.* *_cp314 + - cuda-version >=13.0,<14 + - __glibc >=2.28,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 - - libzlib >=1.3.2,<2.0a0 + - cuda-cupti >=13.0.85,<14.0a0 - python_abi 3.14.* *_cp314 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT purls: - pkg:pypi/triton?source=hash-mapping - size: 47202278 - timestamp: 1781881972923 + size: 244696037 + timestamp: 1779452430163 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -16479,6 +18657,42 @@ packages: purls: [] size: 119135 timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ucc-1.8.0-h2521932_0.conda + sha256: 4f883997c690fe2100619853b2d5b3af226ecf9f2ed10158d1e73f744ce24cd3 + md5: 8b265ef54d5129a6c5cceef553d9768b + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - rdma-core >=63.0 + - ucx >=1.20.1,<1.20.2.0a0 + constrains: + - cuda-version >=13,<14.0a0 + - nccl >=2.30.4.1,<3.0a0 + - cuda-cudart + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 10020375 + timestamp: 1781051119792 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucc-1.8.0-he629949_0.conda + sha256: ec39070c0753f25651b702cdbc0f7e2ae63e50c9f4ecefc765dcb1526190890e + md5: 64f7639c5fe8366af0aecc6b68cb453a + depends: + - __glibc >=2.28,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - rdma-core >=63.0 + - ucx >=1.20.1,<1.20.2.0a0 + constrains: + - cuda-version >=13,<14.0a0 + - cuda-cudart + - nccl >=2.30.4.1,<3.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 10149403 + timestamp: 1781051160710 - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 md5: 71b24316859acd00bdb8b38f5e2ce328 @@ -16489,6 +18703,83 @@ packages: purls: [] size: 694692 timestamp: 1756385147981 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.20.1-hf72d326_0.conda + sha256: 96341dbb30e77b0c89522f850edc42572a0d7937646898bb2d57b93a5c348e0c + md5: 227baf40539ae6858afe99634faf883d + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + - rdma-core >=61.0 + constrains: + - cuda-cudart + - cuda-version >=13,<14.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7866533 + timestamp: 1779828179257 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.20.1-h62a42b4_0.conda + sha256: c74d15f5734c09a60ee0bc12c30eba325ec7d72afaa50781ec7dcc5a763f22fd + md5: d99452fecc606351f25b789f903c8e00 + depends: + - __glibc >=2.28,<3.0.a0 + - _openmp_mutex >=4.5 + - libgcc >=14 + - libstdcxx >=14 + - rdma-core >=61.0 + constrains: + - cuda-cudart + - cuda-version >=13,<14.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7808868 + timestamp: 1779828229221 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + sha256: ff1c1d7c23b91c9b0eb93a3e1380f4e2ac6c37ea2bba4f932a5484e9a55bba30 + md5: 494fdf358c152f9fdd0673c128c2f3dd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 409562 + timestamp: 1770909102180 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda + sha256: fcc5e4515df19c3c781d3d70f69837c03d1f725d4e166cb3006cf656243f58bf + md5: 9479a1d1b844dfeefd287a16515811a0 + depends: + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 410032 + timestamp: 1770909146009 +- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + sha256: 9041e463044944460f73f9528f2ec491180f0ffe857e3555aa8160b81050b8d9 + md5: d6b580a13384df5155c6ca19ee66854e + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/unicodedata2?source=hash-mapping + size: 406126 + timestamp: 1770909191618 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a md5: 9272daa869e03efe68833e3dc7a02130 @@ -16761,6 +19052,148 @@ packages: purls: [] size: 5517425 timestamp: 1646611941216 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + sha256: d874906e236a5edc9309d479599bf2de4d8adca0f23c355b76759d5fb3c4bef8 + md5: 159ffec8f7fab775669a538f0b29373a + depends: + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 21517 + timestamp: 1750437961489 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 20829 + timestamp: 1763366954390 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + sha256: 2e31eeeac0ad76229a565f1df3a8fb4ea54852a68404a99558adab9c92c0ac4d + md5: 8b70063c86f7f9a0b045e78d2d9971f7 + depends: + - libgcc >=14 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 21639 + timestamp: 1763367131001 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + sha256: a43058edc001e8fb97f9b291028a6ca16a8969d9b56a998c7aecea083323ac97 + md5: b82e5c78dbbfa931980e8bfe83bce913 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + purls: [] + size: 24910 + timestamp: 1718880504308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + sha256: 9d92daa7feb0e14f81bf0d4b3f0b6ff1e8cec3ff514df8a0c06c4d49b518c315 + md5: 57ca8564599ddf8b633c4ea6afee6f3a + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14343 + timestamp: 1718846624153 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + sha256: 5827f5617c9741599f72bb7f090726f89c6ef91e4bada621895fdc2bbadfb0f1 + md5: 7beeda4223c5484ef72d89fb66b7e8c1 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18139 + timestamp: 1718849914457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + sha256: 3f52cd8783e7d953c54266255fd11886c611c2620545eabc28ec8cf470ae8be7 + md5: f14dcda6894722e421da2b7dcffb0b78 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + purls: [] + size: 50772 + timestamp: 1718845072660 - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 md5: b56e0c8432b56decafae7e78c5f29ba5 @@ -16895,6 +19328,43 @@ packages: purls: [] size: 16317 timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + sha256: 156a583fa43609507146de1c4926172286d92458c307bb90871579601f6bc568 + md5: 8436cab9a76015dfe7208d3c9f97c156 + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 109246 + timestamp: 1762977105140 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda + sha256: 554f986ffa781d3393079926931465e61291d1eb8a56a03ad4a8e54b1ae233f4 + md5: 9c639c1abdbfe6759c5beb2c1db4bc13 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 14915 + timestamp: 1770044415607 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a md5: 2ccd714aa2242315acaf0a67faea780b @@ -16922,6 +19392,33 @@ packages: purls: [] size: 34596 timestamp: 1730908388714 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda + sha256: 3afaa2f43eb4cb679fc0c3d9d7c50f0f2c80cc5d3df01d5d5fd60655d0bfa9be + md5: d5773c4e4d64428d7ddaa01f6f845dc7 + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + purls: [] + size: 13794 + timestamp: 1727891406431 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 md5: 1dafce8548e38671bea82e3f5c6ce22f @@ -16943,6 +19440,18 @@ packages: purls: [] size: 21039 timestamp: 1762979038025 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + sha256: 366b8ae202c3b48958f0b8784bbfdc37243d3ee1b1cd4b8e76c10abe41fa258b + md5: a7c03e38aa9c0e84d41881b9236eacfb + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + purls: [] + size: 70691 + timestamp: 1762977015220 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f md5: 34e54f03dfea3e7a2dcf1453a85f1085 @@ -17143,6 +19652,31 @@ packages: purls: [] size: 33786 timestamp: 1727964907993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + sha256: 6f6f2b32754e09c2334e067ba5d2d38715f2432cd9fb41d6f66de0591f8f4f94 + md5: b15ca02584678f38df6e114c32f93959 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 19148 + timestamp: 1769434729220 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda sha256: 7a8c64938428c2bfd016359f9cb3c44f94acc256c6167dbdade9f2a1f5ca7a36 md5: aa8d21be4b461ce612d8f5fb791decae @@ -17289,6 +19823,18 @@ packages: purls: [] size: 121046 timestamp: 1770167944449 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda + sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 + md5: 46a21c0a4e65f1a135251fc7c8663f83 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + purls: [] + size: 124542 + timestamp: 1770167984883 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index 9ee85474f52..2b9d96c86cd 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -30,16 +30,34 @@ cuda-pathfinder = { path = "../cuda_pathfinder" } [feature.samples.dependencies] cuda-core = { path = "." } +# Common / cross-platform sample deps. cffi = "*" pyglet = "*" pytest = "*" -numpy = "*" +# numpy pinned <2.5 so `numba` (transitive dep of `numba-cuda` in +# samples/simplePrint) can install; numba currently requires numpy<2.5. +numpy = "<2.5" +matplotlib = "*" # samples/extra/isoFdModelling +setuptools = "*" # samples/0_Introduction/stridedMemoryViewCpu (cffi JIT build) [feature.samples.system-requirements] cuda = "13" [feature.samples.pypi-dependencies] +# cuda.compute (CCCL Python module) is required by 5 samples: binarySearch, +# cudaComputeLambdas, matrixMulSharedMem, parallelReduction, prefixSum. +# The conda-forge `cuda-cccl` package only installs C++ headers; the PyPI +# wheel is the one that exposes `cuda.cccl` to Python. +cuda-cccl = "*" +# nvtx: samples/kernelNsysProfile nvtx = "*" +# numba-cuda: samples/simplePrint (pin >=0.29 to match the sample's +# PEP 723 declaration; older 0.0.x releases resolve otherwise). +numba-cuda = ">=0.29.0" +# nvmath-python: samples/matrixMulSharedMem +nvmath-python = "*" +# nvidia-nvjitlink: samples/simplePrint (was nvidia-nvjitlink-cu13, now deprecated) +nvidia-nvjitlink = "*" [feature.samples.target.linux.dependencies] cupy = "*" @@ -47,6 +65,25 @@ pytorch-gpu = "*" libgl-devel = "*" gxx = "*" pillow = "*" +# mpi4py + openmpi: samples/multiGPUGradientAverage +mpi4py = "*" +openmpi = "*" +# NOTE: two sample deps are intentionally NOT installed here: +# +# * `tensorflow` (samples/customTensorFlowKernel) -- +# conda-forge tensorflow ships an object whose shared library requires +# an executable stack, which fails to load on hardened kernels +# (`cannot enable executable stack as shared object requires`). The +# sample self-waives when TensorFlow is missing / broken; users who +# want to run it should `pip install tensorflow` into a separate env. +# +# * `cudf-cu13`, `cugraph-cu13`, `dask-cuda` (samples/pageRank) -- +# the RAPIDS stack is not on the conda-forge channel used here; it +# lives on the `rapidsai` channel and pulls in ~2 GB of dependencies. +# Left out to keep the samples env solvable. Users who want to run +# samples/pageRank can install those wheels via +# `pip install -r samples/pageRank/requirements.txt` into a dedicated +# environment. [feature.samples.target.linux-64.activation.env] CUDA_HOME = "$CONDA_PREFIX/targets/x86_64-linux" diff --git a/samples/extra/isoFdModelling/isoFdModelling.py b/samples/extra/isoFdModelling/isoFdModelling.py index 6fb9d8366cd..79ea940bf41 100644 --- a/samples/extra/isoFdModelling/isoFdModelling.py +++ b/samples/extra/isoFdModelling/isoFdModelling.py @@ -25,7 +25,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24"] +# dependencies = ["cuda-python>=13.0.0", "numpy>=1.24", "matplotlib"] # /// """ diff --git a/samples/launchConfigTuning/README.md b/samples/launchConfigTuning/README.md index 6870f1d7e9c..8e909e43fe9 100644 --- a/samples/launchConfigTuning/README.md +++ b/samples/launchConfigTuning/README.md @@ -44,8 +44,8 @@ Thread block size significantly impacts performance due to: ```python # Use CUDA events for accurate GPU timing (not CPU wall-clock) -start_event = device.create_event(options=EventOptions(enable_timing=True)) -end_event = device.create_event(options=EventOptions(enable_timing=True)) +start_event = device.create_event(options=EventOptions(timing_enabled=True)) +end_event = device.create_event(options=EventOptions(timing_enabled=True)) stream.record(start_event) for _ in range(n_iterations): diff --git a/samples/matrixMulSharedMem/README.md b/samples/matrixMulSharedMem/README.md index 67c0df69751..6de9f690c7c 100644 --- a/samples/matrixMulSharedMem/README.md +++ b/samples/matrixMulSharedMem/README.md @@ -1,25 +1,5 @@ # Matrix Multiplication with Shared Memory (GEMM) -> **Known issue — version-pinned sample.** Unlike the other samples in this -> repository, this sample is pinned to `cuda-core==0.7.0` and -> `nvmath-python[cu13]==0.9.0`. The reason is that nvmath-python 0.9.0 -> still uses `cuda-core`'s pre-1.0 API name `EventOptions(enable_timing=...)` -> in its own internals, which `cuda-core>=1.0` no longer accepts. -> -> If you install this sample's `requirements.txt` into the same environment -> as the other samples, pip will downgrade `cuda-core` and the other -> samples (which use the 1.0 API) will stop working. The recommended -> workflow is one of: -> -> - Install this sample's requirements in a **dedicated virtual -> environment**, or -> - Re-run the other samples' `pip install -r requirements.txt` afterwards -> to upgrade `cuda-core` back to 1.0. -> -> This sample will be re-aligned with the rest of the repository -> (`cuda-core>=1.0.0`) once nvmath-python ships a release that targets -> cuda-core's 1.0 naming audit. - Demonstrates efficient matrix multiplication using nvmath-python APIs and custom CUDA kernels with tiling, shared memory, and loop unrolling. ## Overview diff --git a/samples/matrixMulSharedMem/matrixMulSharedMem.py b/samples/matrixMulSharedMem/matrixMulSharedMem.py index 6086a7aaf12..a6f3cc3ad4d 100644 --- a/samples/matrixMulSharedMem/matrixMulSharedMem.py +++ b/samples/matrixMulSharedMem/matrixMulSharedMem.py @@ -25,7 +25,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # /// script -# dependencies = ["cuda-python>=13.0.0", "cuda-core==0.7.0", "cupy-cuda13x>=14.0.0", "numpy>=2.3.2", "nvmath-python[cu13]==0.9.0"] +# dependencies = ["cuda-python>=13.0.0", "cuda-core>=1.0.0", "cupy-cuda13x>=14.0.0", "numpy>=1.24", "nvmath-python[cu13]>=1.0.0"] # /// """ @@ -137,12 +137,7 @@ def run_matmul_benchmark( # Setup print(f"\nMatrix: A({m}x{k}) × B({k}x{n}) = C({m}x{n})") total_ops = 2 * m * n * k - # NOTE: this sample is pinned to cuda-core==0.7.0 (see requirements.txt) - # because nvmath-python 0.9.0 still uses cuda-core's pre-1.0 API name - # `enable_timing`. Once nvmath ships a release compatible with cuda-core - # 1.0, bump the pins in requirements.txt and rename this kwarg to - # `timing_enabled` to match the rest of the samples. - event_opts = EventOptions(enable_timing=True) + event_opts = EventOptions(timing_enabled=True) # Allocate matrices rng = cp.random.default_rng(42) diff --git a/samples/matrixMulSharedMem/requirements.txt b/samples/matrixMulSharedMem/requirements.txt index 0b397174cd2..d6576794e9d 100644 --- a/samples/matrixMulSharedMem/requirements.txt +++ b/samples/matrixMulSharedMem/requirements.txt @@ -1,20 +1,8 @@ # Matrix Multiplication with Shared Memory (GEMM) Requirements -# -# IMPORTANT: this sample pins older versions of cuda-core and nvmath-python -# on purpose. nvmath-python 0.9.0 (the current CUDA-13 release at the time -# of CTK 13.3) calls cuda-core's pre-1.0 API name `EventOptions(enable_timing=...)` -# in its own internals. With cuda-core 1.0+ that kwarg was renamed to -# `timing_enabled` and the old name is rejected, so any cuda-core>=1.0 + -# nvmath-python 0.9.0 combination raises a TypeError at runtime. -# -# Until nvmath-python ships a release that targets the cuda-core 1.0 naming -# audit, this sample requires the older cuda-core 0.7 line. Installing this -# requirements.txt into the same environment as the other samples will -# downgrade cuda-core; use a dedicated venv for this sample, or reinstall -# the other samples' requirements afterwards to upgrade cuda-core back. +# Install with: pip install -r requirements.txt cuda-python>=13.0.0 -cuda-core==0.7.0 +cuda-core>=1.0.0 cupy-cuda13x>=14.0.0 -numpy>=2.3.2 -nvmath-python[cu13]==0.9.0 +numpy>=1.24 +nvmath-python[cu13]>=1.0.0 diff --git a/samples/multiGPUGradientAverage/README.md b/samples/multiGPUGradientAverage/README.md index c6cfa8594c0..90c2555f2f5 100644 --- a/samples/multiGPUGradientAverage/README.md +++ b/samples/multiGPUGradientAverage/README.md @@ -106,7 +106,7 @@ GPU timing is measured using cuda.core Event: ```python from cuda.core import EventOptions -timing_options = EventOptions(enable_timing=True) +timing_options = EventOptions(timing_enabled=True) start_event = stream.record(options=timing_options) # ... GPU work ... end_event = stream.record(options=timing_options) diff --git a/samples/pageRank/README.md b/samples/pageRank/README.md index 3be6964c688..d0dddca1ab3 100644 --- a/samples/pageRank/README.md +++ b/samples/pageRank/README.md @@ -42,7 +42,7 @@ Demonstrates GPU-accelerated PageRank computation for graph analysis using RAPID ### From cuda.core: - `Device(0)` - Create device, `device.set_current()`, `device.create_stream()` -- `EventOptions(enable_timing=True)` - GPU timing via `stream.record()` +- `EventOptions(timing_enabled=True)` - GPU timing via `stream.record()` - `cp.cuda.Stream.from_external(stream).use()` - Make cuDF/cuGraph use cuda.core stream ### From cuGraph: diff --git a/samples/pageRank/pageRank.py b/samples/pageRank/pageRank.py index b587ec2710b..da99f7a5c56 100644 --- a/samples/pageRank/pageRank.py +++ b/samples/pageRank/pageRank.py @@ -265,7 +265,7 @@ def run_pagerank_benchmark( G = cugraph.Graph(directed=True) G.from_cudf_edgelist(gdf, source="src", destination="dst", store_transposed=True) - event_opts = EventOptions(enable_timing=True) + event_opts = EventOptions(timing_enabled=True) try: # Warmup diff --git a/samples/simpleP2P/README.md b/samples/simpleP2P/README.md index 774109073c4..980ca09db1e 100644 --- a/samples/simpleP2P/README.md +++ b/samples/simpleP2P/README.md @@ -37,7 +37,7 @@ This sample demonstrates peer-to-peer (P2P) memory access between multiple GPUs - Example: `mr.peer_accessible_by = [1]` grants device 1 access - Example: `mr.peer_accessible_by = []` revokes all access - `PinnedMemoryResource()` – Allocate pinned (page-locked) host memory -- `EventOptions(enable_timing=True)` – Create options for CUDA events with timing enabled +- `EventOptions(timing_enabled=True)` – Create options for CUDA events with timing enabled - `stream.record(options=event_options)` – Record a CUDA event on a stream - `event.elapsed_time(start_event)` – Get elapsed time in milliseconds between two events - `stream.wait_event(event)` – Make a stream wait for an event to complete From 80900779d8862f8fdded96997b618ac0af92f56a Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Fri, 17 Jul 2026 10:19:50 -0500 Subject: [PATCH 08/11] Cleanup --- .../cuda/bindings/_bindings/cyruntime.pxd | 649 ------ .../cuda/bindings/_bindings/cyruntime.pyx | 1956 ----------------- .../bindings/_bindings/cyruntime_ptds.pxd | 652 ------ .../bindings/_bindings/cyruntime_ptds.pyx | 975 -------- .../cuda/bindings/cyruntime_functions.pxi | 975 -------- .../cuda/bindings/cyruntime_types.pxi | 1777 --------------- cuda_bindings/pixi.toml | 2 +- cuda_core/pixi.lock | 92 +- cuda_core/pixi.toml | 25 +- cuda_core/pytest.ini | 1 + cuda_core/tests/example_tests/run_samples.py | 179 +- .../tests/example_tests/test_run_samples.py | 161 ++ .../example_tests/test_sample_environment.py | 51 + .../example_tests/test_sample_verification.py | 58 + cuda_pathfinder/pixi.toml | 2 +- samples/Utilities/cuda_samples_utils.py | 13 + .../copyImageArraytoGPU.py | 108 +- .../kernelNsysProfile/kernelNsysProfile.py | 32 +- .../launchConfigTuning/launchConfigTuning.py | 13 +- .../streamingCopyComputeOverlap.py | 25 +- 20 files changed, 549 insertions(+), 7197 deletions(-) delete mode 100644 cuda_bindings/cuda/bindings/_bindings/cyruntime.pxd delete mode 100644 cuda_bindings/cuda/bindings/_bindings/cyruntime.pyx delete mode 100644 cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pxd delete mode 100644 cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pyx delete mode 100644 cuda_bindings/cuda/bindings/cyruntime_functions.pxi delete mode 100644 cuda_bindings/cuda/bindings/cyruntime_types.pxi create mode 100644 cuda_core/tests/example_tests/test_run_samples.py create mode 100644 cuda_core/tests/example_tests/test_sample_environment.py create mode 100644 cuda_core/tests/example_tests/test_sample_verification.py diff --git a/cuda_bindings/cuda/bindings/_bindings/cyruntime.pxd b/cuda_bindings/cuda/bindings/_bindings/cyruntime.pxd deleted file mode 100644 index 12c4d5f32f2..00000000000 --- a/cuda_bindings/cuda/bindings/_bindings/cyruntime.pxd +++ /dev/null @@ -1,649 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. -include "../cyruntime_types.pxi" - -include "../_lib/cyruntime/cyruntime.pxd" - -cdef cudaError_t _cudaDeviceReset() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSynchronize() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetLimit(cudaLimit limit, size_t value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetLimit(size_t* pValue, cudaLimit limit) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetTexture1DLinearMaxWidth(size_t* maxWidthInElements, const cudaChannelFormatDesc* fmtDesc, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetCacheConfig(cudaFuncCache* pCacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetStreamPriorityRange(int* leastPriority, int* greatestPriority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetCacheConfig(cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetByPCIBusId(int* device, const char* pciBusId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetPCIBusId(char* pciBusId, int length, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcGetEventHandle(cudaIpcEventHandle_t* handle, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcOpenEventHandle(cudaEvent_t* event, cudaIpcEventHandle_t handle) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcGetMemHandle(cudaIpcMemHandle_t* handle, void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcOpenMemHandle(void** devPtr, cudaIpcMemHandle_t handle, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcCloseMemHandle(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceFlushGPUDirectRDMAWrites(cudaFlushGPUDirectRDMAWritesTarget target, cudaFlushGPUDirectRDMAWritesScope scope) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceRegisterAsyncNotification(int device, cudaAsyncCallback callbackFunc, void* userData, cudaAsyncCallbackHandle_t* callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceUnregisterAsyncNotification(int device, cudaAsyncCallbackHandle_t callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetSharedMemConfig(cudaSharedMemConfig* pConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetSharedMemConfig(cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetLastError() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaPeekAtLastError() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef const char* _cudaGetErrorName(cudaError_t error) except ?NULL nogil - -cdef const char* _cudaGetErrorString(cudaError_t error) except ?NULL nogil - -cdef cudaError_t _cudaGetDeviceCount(int* count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDeviceProperties(cudaDeviceProp* prop, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetHostAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetDefaultMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetMemPool(int device, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetNvSciSyncAttributes(void* nvSciSyncAttrList, int device, int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetP2PAttribute(int* value, cudaDeviceP2PAttr attr, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetP2PAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaChooseDevice(int* device, const cudaDeviceProp* prop) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaInitDevice(int device, unsigned int deviceFlags, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSetDevice(int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDevice(int* device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSetDeviceFlags(unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDeviceFlags(unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreate(cudaStream_t* pStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreateWithFlags(cudaStream_t* pStream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetPriority(cudaStream_t hStream, int* priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetFlags(cudaStream_t hStream, unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetId(cudaStream_t hStream, unsigned long long* streamId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetDevice(cudaStream_t hStream, int* device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaCtxResetPersistingL2Cache() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, cudaStreamAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamSetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, const cudaStreamAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamDestroy(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void* userData, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamSynchronize(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamQuery(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamAttachMemAsync(cudaStream_t stream, void* devPtr, size_t length, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginCapture(cudaStream_t stream, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginRecaptureToGraph(cudaStream_t stream, cudaStreamCaptureMode mode, cudaGraph_t graph, cudaGraphRecaptureCallbackData* callbackData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginCaptureToGraph(cudaStream_t stream, cudaGraph_t graph, const cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaThreadExchangeStreamCaptureMode(cudaStreamCaptureMode* mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamIsCapturing(cudaStream_t stream, cudaStreamCaptureStatus* pCaptureStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetCaptureInfo(cudaStream_t stream, cudaStreamCaptureStatus* captureStatus_out, unsigned long long* id_out, cudaGraph_t* graph_out, const cudaGraphNode_t** dependencies_out, const cudaGraphEdgeData** edgeData_out, size_t* numDependencies_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventCreate(cudaEvent_t* event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventCreateWithFlags(cudaEvent_t* event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventRecord(cudaEvent_t event, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventQuery(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventSynchronize(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventDestroy(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t end) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaImportExternalMemory(cudaExternalMemory_t* extMem_out, const cudaExternalMemoryHandleDesc* memHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExternalMemoryGetMappedBuffer(void** devPtr, cudaExternalMemory_t extMem, const cudaExternalMemoryBufferDesc* bufferDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t* mipmap, cudaExternalMemory_t extMem, const cudaExternalMemoryMipmappedArrayDesc* mipmapDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyExternalMemory(cudaExternalMemory_t extMem) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, const cudaExternalSemaphoreHandleDesc* semHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreSignalParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreWaitParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetCacheConfig(const void* func, cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncGetAttributes(cudaFuncAttributes* attr, const void* func) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetAttribute(const void* func, cudaFuncAttribute attr, int value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncGetParamCount(const void* func, size_t* paramCount) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void* userData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLaunchHostFunc_v2(cudaStream_t stream, cudaHostFn_t fn, void* userData, unsigned int syncMode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetSharedMemConfig(const void* func, cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyAvailableDynamicSMemPerBlock(size_t* dynamicSmemSize, const void* func, int numBlocks, int blockSize) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocManaged(void** devPtr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc(void** devPtr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocHost(void** ptr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocPitch(void** devPtr, size_t* pitch, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, size_t width, size_t height, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFree(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeHost(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeArray(cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostAlloc(void** pHost, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostRegister(void* ptr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostUnregister(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostGetDevicePointer(void** pDevice, void* pHost, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostGetFlags(unsigned int* pFlags, void* pHost) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc3D(cudaPitchedPtr* pitchedDevPtr, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc3DArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocMipmappedArray(cudaMipmappedArray_t* mipmappedArray, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int numLevels, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetMipmappedArrayLevel(cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3D(const cudaMemcpy3DParms* p) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DPeer(const cudaMemcpy3DPeerParms* p) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DAsync(const cudaMemcpy3DParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DPeerAsync(const cudaMemcpy3DPeerParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetInfo(size_t* free, size_t* total) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetInfo(cudaChannelFormatDesc* desc, cudaExtent* extent, unsigned int* flags, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetPlane(cudaArray_t* pPlaneArray, cudaArray_t hArray, unsigned int planeIdx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaArray_t array, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMipmappedArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaMipmappedArray_t mipmap, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMipmappedArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaMipmappedArray_t mipmap) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyPeer(void* dst, int dstDevice, const void* src, int srcDevice, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DFromArray(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyAsync(void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyBatchAsync(const void** dsts, const void** srcs, const size_t* sizes, size_t count, cudaMemcpyAttributes* attrs, size_t* attrsIdxs, size_t numAttrs, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DBatchAsync(size_t numOps, cudaMemcpy3DBatchOp* opList, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyWithAttributesAsync(void* dst, const void* src, size_t size, cudaMemcpyAttributes* attr, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DWithAttributesAsync(cudaMemcpy3DBatchOp* op, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DAsync(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DFromArrayAsync(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset(void* devPtr, int value, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset2D(void* devPtr, size_t pitch, int value, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset3D(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemsetAsync(void* devPtr, int value, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset2DAsync(void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset3DAsync(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPrefetchAsync(const void* devPtr, size_t count, cudaMemLocation location, unsigned int flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemDiscardBatchAsync(void** dptrs, size_t* sizes, size_t count, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemDiscardAndPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemAdvise(const void* devPtr, size_t count, cudaMemoryAdvise advice, cudaMemLocation location) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemRangeGetAttribute(void* data, size_t dataSize, cudaMemRangeAttribute attribute, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemRangeGetAttributes(void** data, size_t* dataSizes, cudaMemRangeAttribute* attributes, size_t numAttributes, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyFromArray(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyFromArrayAsync(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocAsync(void** devPtr, size_t size, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeAsync(void* devPtr, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolSetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolGetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolSetAccess(cudaMemPool_t memPool, const cudaMemAccessDesc* descList, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolGetAccess(cudaMemAccessFlags* flags, cudaMemPool_t memPool, cudaMemLocation* location) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolCreate(cudaMemPool_t* memPool, const cudaMemPoolProps* poolProps) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolDestroy(cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetDefaultMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemSetMemPool(cudaMemLocation* location, cudaMemAllocationType typename, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocFromPoolAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolExportToShareableHandle(void* shareableHandle, cudaMemPool_t memPool, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolImportFromShareableHandle(cudaMemPool_t* memPool, void* shareableHandle, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolExportPointer(cudaMemPoolPtrExportData* exportData, void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolImportPointer(void** ptr, cudaMemPool_t memPool, cudaMemPoolPtrExportData* exportData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaPointerGetAttributes(cudaPointerAttributes* attributes, const void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceCanAccessPeer(int* canAccessPeer, int device, int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceDisablePeerAccess(int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsMapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsSubResourceGetMappedArray(cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetChannelDesc(cudaChannelFormatDesc* desc, cudaArray_const_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaChannelFormatDesc _cudaCreateChannelDesc(int x, int y, int z, int w, cudaChannelFormatKind f) except* nogil - -cdef cudaError_t _cudaCreateTextureObject(cudaTextureObject_t* pTexObject, const cudaResourceDesc* pResDesc, const cudaTextureDesc* pTexDesc, const cudaResourceViewDesc* pResViewDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyTextureObject(cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectResourceDesc(cudaResourceDesc* pResDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectTextureDesc(cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectResourceViewDesc(cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaCreateSurfaceObject(cudaSurfaceObject_t* pSurfObject, const cudaResourceDesc* pResDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetSurfaceObjectResourceDesc(cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDriverGetVersion(int* driverVersion) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaRuntimeGetVersion(int* runtimeVersion) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsRegisterCallback(cudaLogsCallback_t callbackFunc, void* userData, cudaLogsCallbackHandle* callback_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsUnregisterCallback(cudaLogsCallbackHandle callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsCurrent(cudaLogIterator* iterator_out, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsDumpToFile(cudaLogIterator* iterator, const char* pathToFile, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsDumpToMemory(cudaLogIterator* iterator, char* buffer, size_t* size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphCreate(cudaGraph_t* pGraph, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddKernelNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeGetParams(cudaGraphNode_t node, cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeCopyAttributes(cudaGraphNode_t hDst, cudaGraphNode_t hSrc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeGetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, cudaKernelNodeAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeSetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, const cudaKernelNodeAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemcpyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemcpy3DParms* pCopyParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemcpyNode1D(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams1D(cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemsetNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemsetParams* pMemsetParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddHostNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphHostNodeGetParams(cudaGraphNode_t node, cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphHostNodeSetParams(cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddChildGraphNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEmptyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEventRecordNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEventWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreSignalNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreWaitNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemAllocNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaMemAllocNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, cudaMemAllocNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemFreeNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void* dptr_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGraphMemTrim(int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphClone(cudaGraph_t* pGraphClone, cudaGraph_t originalGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeFindInClone(cudaGraphNode_t* pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetType(cudaGraphNode_t node, cudaGraphNodeType* pType) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetContainingGraph(cudaGraphNode_t hNode, cudaGraph_t* phGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetLocalId(cudaGraphNode_t hNode, unsigned int* nodeId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetToolsId(cudaGraphNode_t hNode, unsigned long long* toolsNodeId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetId(cudaGraph_t hGraph, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecGetId(cudaGraphExec_t hGraphExec, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t* nodes, size_t* numNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t* pRootNodes, size_t* pNumRootNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t* from_, cudaGraphNode_t* to, cudaGraphEdgeData* edgeData, size_t* numEdges) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t* pDependencies, cudaGraphEdgeData* edgeData, size_t* pNumDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t* pDependentNodes, cudaGraphEdgeData* edgeData, size_t* pNumDependentNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDestroyNode(cudaGraphNode_t node) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiate(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiateWithFlags(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiateWithParams(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, cudaGraphInstantiateParams* instantiateParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecGetFlags(cudaGraphExec_t graphExec, unsigned long long* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams1D(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int* isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphExecUpdateResultInfo* resultInfo) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecDestroy(cudaGraphExec_t graphExec) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDestroy(cudaGraph_t graph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDebugDotPrint(cudaGraph_t graph, const char* path, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectCreate(cudaUserObject_t* object_out, void* ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectRetain(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectRelease(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeSetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecNodeSetParams(cudaGraphExec_t graphExec, cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphConditionalHandleCreate(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphConditionalHandleCreate_v2(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, cudaExecutionContext_t ctx, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDriverEntryPoint(const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDriverEntryPointByVersion(const char* symbol, void** funcPtr, unsigned int cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryLoadData(cudaLibrary_t* library, const void* code, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryLoadFromFile(cudaLibrary_t* library, const char* fileName, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryUnload(cudaLibrary_t library) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetKernel(cudaKernel_t* pKernel, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetGlobal(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetManaged(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetUnifiedFunction(void** fptr, cudaLibrary_t library, const char* symbol) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetKernelCount(unsigned int* count, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryEnumerateKernels(cudaKernel_t* kernels, unsigned int numKernels, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaKernelSetAttributeForDevice(cudaKernel_t kernel, cudaFuncAttribute attr, int value, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetDevResource(int device, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevSmResourceSplitByCount(cudaDevResource* result, unsigned int* nbGroups, const cudaDevResource* input, cudaDevResource* remaining, unsigned int flags, unsigned int minCount) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevSmResourceSplit(cudaDevResource* result, unsigned int nbGroups, const cudaDevResource* input, cudaDevResource* remainder, unsigned int flags, cudaDevSmResourceGroupParams* groupParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevResourceGenerateDesc(cudaDevResourceDesc_t* phDesc, cudaDevResource* resources, unsigned int nbResources) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGreenCtxCreate(cudaExecutionContext_t* phCtx, cudaDevResourceDesc_t desc, int device, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxDestroy(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetDevResource(cudaExecutionContext_t ctx, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetDevice(int* device, cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetId(cudaExecutionContext_t ctx, unsigned long long* ctxId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxStreamCreate(cudaStream_t* phStream, cudaExecutionContext_t ctx, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxSynchronize(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetDevResource(cudaStream_t hStream, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxRecordEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxWaitEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetExecutionCtx(cudaExecutionContext_t* ctx, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetExportTable(const void** ppExportTable, const cudaUUID_t* pExportTableId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetKernel(cudaKernel_t* kernelPtr, const void* entryFuncAddr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaPitchedPtr _make_cudaPitchedPtr(void* d, size_t p, size_t xsz, size_t ysz) except* nogil - -cdef cudaPos _make_cudaPos(size_t x, size_t y, size_t z) except* nogil - -cdef cudaExtent _make_cudaExtent(size_t w, size_t h, size_t d) except* nogil - -cdef cudaError_t _cudaProfilerStart() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaProfilerStop() except ?cudaErrorCallRequiresNewerDriver nogil diff --git a/cuda_bindings/cuda/bindings/_bindings/cyruntime.pyx b/cuda_bindings/cuda/bindings/_bindings/cyruntime.pyx deleted file mode 100644 index ab7222201b7..00000000000 --- a/cuda_bindings/cuda/bindings/_bindings/cyruntime.pyx +++ /dev/null @@ -1,1956 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. -include "../cyruntime_functions.pxi" - -import os -cimport cuda.bindings._bindings.cyruntime_ptds as ptds -cimport cython - -cdef bint __cudaPythonInit = False -cdef bint __usePTDS = False -cdef int _cudaPythonInit() except -1 nogil: - global __cudaPythonInit - global __usePTDS - - with gil: - __usePTDS = bool(int(os.getenv('CUDA_PYTHON_CUDA_PER_THREAD_DEFAULT_STREAM', default=0))) - __cudaPythonInit = True - return __usePTDS - -# Create a very small function to check whether we are init'ed, so the C -# compiler can inline it. -cdef inline int cudaPythonInit() except -1 nogil: - if __cudaPythonInit: - return __usePTDS - return _cudaPythonInit() - -cdef cudaError_t _cudaDeviceReset() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceReset() - return cudaDeviceReset() - -cdef cudaError_t _cudaDeviceSynchronize() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSynchronize() - return cudaDeviceSynchronize() - -cdef cudaError_t _cudaDeviceSetLimit(cudaLimit limit, size_t value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSetLimit(limit, value) - return cudaDeviceSetLimit(limit, value) - -cdef cudaError_t _cudaDeviceGetLimit(size_t* pValue, cudaLimit limit) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetLimit(pValue, limit) - return cudaDeviceGetLimit(pValue, limit) - -cdef cudaError_t _cudaDeviceGetTexture1DLinearMaxWidth(size_t* maxWidthInElements, const cudaChannelFormatDesc* fmtDesc, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetTexture1DLinearMaxWidth(maxWidthInElements, fmtDesc, device) - return cudaDeviceGetTexture1DLinearMaxWidth(maxWidthInElements, fmtDesc, device) - -cdef cudaError_t _cudaDeviceGetCacheConfig(cudaFuncCache* pCacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetCacheConfig(pCacheConfig) - return cudaDeviceGetCacheConfig(pCacheConfig) - -cdef cudaError_t _cudaDeviceGetStreamPriorityRange(int* leastPriority, int* greatestPriority) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetStreamPriorityRange(leastPriority, greatestPriority) - return cudaDeviceGetStreamPriorityRange(leastPriority, greatestPriority) - -cdef cudaError_t _cudaDeviceSetCacheConfig(cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSetCacheConfig(cacheConfig) - return cudaDeviceSetCacheConfig(cacheConfig) - -cdef cudaError_t _cudaDeviceGetByPCIBusId(int* device, const char* pciBusId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetByPCIBusId(device, pciBusId) - return cudaDeviceGetByPCIBusId(device, pciBusId) - -cdef cudaError_t _cudaDeviceGetPCIBusId(char* pciBusId, int length, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetPCIBusId(pciBusId, length, device) - return cudaDeviceGetPCIBusId(pciBusId, length, device) - -cdef cudaError_t _cudaIpcGetEventHandle(cudaIpcEventHandle_t* handle, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaIpcGetEventHandle(handle, event) - return cudaIpcGetEventHandle(handle, event) - -cdef cudaError_t _cudaIpcOpenEventHandle(cudaEvent_t* event, cudaIpcEventHandle_t handle) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaIpcOpenEventHandle(event, handle) - return cudaIpcOpenEventHandle(event, handle) - -cdef cudaError_t _cudaIpcGetMemHandle(cudaIpcMemHandle_t* handle, void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaIpcGetMemHandle(handle, devPtr) - return cudaIpcGetMemHandle(handle, devPtr) - -cdef cudaError_t _cudaIpcOpenMemHandle(void** devPtr, cudaIpcMemHandle_t handle, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaIpcOpenMemHandle(devPtr, handle, flags) - return cudaIpcOpenMemHandle(devPtr, handle, flags) - -cdef cudaError_t _cudaIpcCloseMemHandle(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaIpcCloseMemHandle(devPtr) - return cudaIpcCloseMemHandle(devPtr) - -cdef cudaError_t _cudaDeviceFlushGPUDirectRDMAWrites(cudaFlushGPUDirectRDMAWritesTarget target, cudaFlushGPUDirectRDMAWritesScope scope) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceFlushGPUDirectRDMAWrites(target, scope) - return cudaDeviceFlushGPUDirectRDMAWrites(target, scope) - -cdef cudaError_t _cudaDeviceRegisterAsyncNotification(int device, cudaAsyncCallback callbackFunc, void* userData, cudaAsyncCallbackHandle_t* callback) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceRegisterAsyncNotification(device, callbackFunc, userData, callback) - return cudaDeviceRegisterAsyncNotification(device, callbackFunc, userData, callback) - -cdef cudaError_t _cudaDeviceUnregisterAsyncNotification(int device, cudaAsyncCallbackHandle_t callback) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceUnregisterAsyncNotification(device, callback) - return cudaDeviceUnregisterAsyncNotification(device, callback) - -cdef cudaError_t _cudaDeviceGetSharedMemConfig(cudaSharedMemConfig* pConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetSharedMemConfig(pConfig) - return cudaDeviceGetSharedMemConfig(pConfig) - -cdef cudaError_t _cudaDeviceSetSharedMemConfig(cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSetSharedMemConfig(config) - return cudaDeviceSetSharedMemConfig(config) - -cdef cudaError_t _cudaGetLastError() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetLastError() - return cudaGetLastError() - -cdef cudaError_t _cudaPeekAtLastError() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaPeekAtLastError() - return cudaPeekAtLastError() - -cdef const char* _cudaGetErrorName(cudaError_t error) except ?NULL nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetErrorName(error) - return cudaGetErrorName(error) - -cdef const char* _cudaGetErrorString(cudaError_t error) except ?NULL nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetErrorString(error) - return cudaGetErrorString(error) - -cdef cudaError_t _cudaGetDeviceCount(int* count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDeviceCount(count) - return cudaGetDeviceCount(count) - -cdef cudaError_t _cudaGetDeviceProperties(cudaDeviceProp* prop, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDeviceProperties(prop, device) - return cudaGetDeviceProperties(prop, device) - -cdef cudaError_t _cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetAttribute(value, attr, device) - return cudaDeviceGetAttribute(value, attr, device) - -cdef cudaError_t _cudaDeviceGetHostAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetHostAtomicCapabilities(capabilities, operations, count, device) - return cudaDeviceGetHostAtomicCapabilities(capabilities, operations, count, device) - -cdef cudaError_t _cudaDeviceGetDefaultMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetDefaultMemPool(memPool, device) - return cudaDeviceGetDefaultMemPool(memPool, device) - -cdef cudaError_t _cudaDeviceSetMemPool(int device, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSetMemPool(device, memPool) - return cudaDeviceSetMemPool(device, memPool) - -cdef cudaError_t _cudaDeviceGetMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetMemPool(memPool, device) - return cudaDeviceGetMemPool(memPool, device) - -cdef cudaError_t _cudaDeviceGetNvSciSyncAttributes(void* nvSciSyncAttrList, int device, int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetNvSciSyncAttributes(nvSciSyncAttrList, device, flags) - return cudaDeviceGetNvSciSyncAttributes(nvSciSyncAttrList, device, flags) - -cdef cudaError_t _cudaDeviceGetP2PAttribute(int* value, cudaDeviceP2PAttr attr, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetP2PAttribute(value, attr, srcDevice, dstDevice) - return cudaDeviceGetP2PAttribute(value, attr, srcDevice, dstDevice) - -cdef cudaError_t _cudaDeviceGetP2PAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetP2PAtomicCapabilities(capabilities, operations, count, srcDevice, dstDevice) - return cudaDeviceGetP2PAtomicCapabilities(capabilities, operations, count, srcDevice, dstDevice) - -cdef cudaError_t _cudaChooseDevice(int* device, const cudaDeviceProp* prop) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaChooseDevice(device, prop) - return cudaChooseDevice(device, prop) - -cdef cudaError_t _cudaInitDevice(int device, unsigned int deviceFlags, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaInitDevice(device, deviceFlags, flags) - return cudaInitDevice(device, deviceFlags, flags) - -cdef cudaError_t _cudaSetDevice(int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaSetDevice(device) - return cudaSetDevice(device) - -cdef cudaError_t _cudaGetDevice(int* device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDevice(device) - return cudaGetDevice(device) - -cdef cudaError_t _cudaSetDeviceFlags(unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaSetDeviceFlags(flags) - return cudaSetDeviceFlags(flags) - -cdef cudaError_t _cudaGetDeviceFlags(unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDeviceFlags(flags) - return cudaGetDeviceFlags(flags) - -cdef cudaError_t _cudaStreamCreate(cudaStream_t* pStream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamCreate(pStream) - return cudaStreamCreate(pStream) - -cdef cudaError_t _cudaStreamCreateWithFlags(cudaStream_t* pStream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamCreateWithFlags(pStream, flags) - return cudaStreamCreateWithFlags(pStream, flags) - -cdef cudaError_t _cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamCreateWithPriority(pStream, flags, priority) - return cudaStreamCreateWithPriority(pStream, flags, priority) - -cdef cudaError_t _cudaStreamGetPriority(cudaStream_t hStream, int* priority) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetPriority(hStream, priority) - return cudaStreamGetPriority(hStream, priority) - -cdef cudaError_t _cudaStreamGetFlags(cudaStream_t hStream, unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetFlags(hStream, flags) - return cudaStreamGetFlags(hStream, flags) - -cdef cudaError_t _cudaStreamGetId(cudaStream_t hStream, unsigned long long* streamId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetId(hStream, streamId) - return cudaStreamGetId(hStream, streamId) - -cdef cudaError_t _cudaStreamGetDevice(cudaStream_t hStream, int* device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetDevice(hStream, device) - return cudaStreamGetDevice(hStream, device) - -cdef cudaError_t _cudaCtxResetPersistingL2Cache() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaCtxResetPersistingL2Cache() - return cudaCtxResetPersistingL2Cache() - -cdef cudaError_t _cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamCopyAttributes(dst, src) - return cudaStreamCopyAttributes(dst, src) - -cdef cudaError_t _cudaStreamGetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, cudaStreamAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetAttribute(hStream, attr, value_out) - return cudaStreamGetAttribute(hStream, attr, value_out) - -cdef cudaError_t _cudaStreamSetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, const cudaStreamAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamSetAttribute(hStream, attr, value) - return cudaStreamSetAttribute(hStream, attr, value) - -cdef cudaError_t _cudaStreamDestroy(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamDestroy(stream) - return cudaStreamDestroy(stream) - -cdef cudaError_t _cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamWaitEvent(stream, event, flags) - return cudaStreamWaitEvent(stream, event, flags) - -cdef cudaError_t _cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void* userData, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamAddCallback(stream, callback, userData, flags) - return cudaStreamAddCallback(stream, callback, userData, flags) - -cdef cudaError_t _cudaStreamSynchronize(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamSynchronize(stream) - return cudaStreamSynchronize(stream) - -cdef cudaError_t _cudaStreamQuery(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamQuery(stream) - return cudaStreamQuery(stream) - -cdef cudaError_t _cudaStreamAttachMemAsync(cudaStream_t stream, void* devPtr, size_t length, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamAttachMemAsync(stream, devPtr, length, flags) - return cudaStreamAttachMemAsync(stream, devPtr, length, flags) - -cdef cudaError_t _cudaStreamBeginCapture(cudaStream_t stream, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamBeginCapture(stream, mode) - return cudaStreamBeginCapture(stream, mode) - -cdef cudaError_t _cudaStreamBeginRecaptureToGraph(cudaStream_t stream, cudaStreamCaptureMode mode, cudaGraph_t graph, cudaGraphRecaptureCallbackData* callbackData) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamBeginRecaptureToGraph(stream, mode, graph, callbackData) - return cudaStreamBeginRecaptureToGraph(stream, mode, graph, callbackData) - -cdef cudaError_t _cudaStreamBeginCaptureToGraph(cudaStream_t stream, cudaGraph_t graph, const cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamBeginCaptureToGraph(stream, graph, dependencies, dependencyData, numDependencies, mode) - return cudaStreamBeginCaptureToGraph(stream, graph, dependencies, dependencyData, numDependencies, mode) - -cdef cudaError_t _cudaThreadExchangeStreamCaptureMode(cudaStreamCaptureMode* mode) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaThreadExchangeStreamCaptureMode(mode) - return cudaThreadExchangeStreamCaptureMode(mode) - -cdef cudaError_t _cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamEndCapture(stream, pGraph) - return cudaStreamEndCapture(stream, pGraph) - -cdef cudaError_t _cudaStreamIsCapturing(cudaStream_t stream, cudaStreamCaptureStatus* pCaptureStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamIsCapturing(stream, pCaptureStatus) - return cudaStreamIsCapturing(stream, pCaptureStatus) - -cdef cudaError_t _cudaStreamGetCaptureInfo(cudaStream_t stream, cudaStreamCaptureStatus* captureStatus_out, unsigned long long* id_out, cudaGraph_t* graph_out, const cudaGraphNode_t** dependencies_out, const cudaGraphEdgeData** edgeData_out, size_t* numDependencies_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetCaptureInfo(stream, captureStatus_out, id_out, graph_out, dependencies_out, edgeData_out, numDependencies_out) - return cudaStreamGetCaptureInfo(stream, captureStatus_out, id_out, graph_out, dependencies_out, edgeData_out, numDependencies_out) - -cdef cudaError_t _cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamUpdateCaptureDependencies(stream, dependencies, dependencyData, numDependencies, flags) - return cudaStreamUpdateCaptureDependencies(stream, dependencies, dependencyData, numDependencies, flags) - -cdef cudaError_t _cudaEventCreate(cudaEvent_t* event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventCreate(event) - return cudaEventCreate(event) - -cdef cudaError_t _cudaEventCreateWithFlags(cudaEvent_t* event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventCreateWithFlags(event, flags) - return cudaEventCreateWithFlags(event, flags) - -cdef cudaError_t _cudaEventRecord(cudaEvent_t event, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventRecord(event, stream) - return cudaEventRecord(event, stream) - -cdef cudaError_t _cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventRecordWithFlags(event, stream, flags) - return cudaEventRecordWithFlags(event, stream, flags) - -cdef cudaError_t _cudaEventQuery(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventQuery(event) - return cudaEventQuery(event) - -cdef cudaError_t _cudaEventSynchronize(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventSynchronize(event) - return cudaEventSynchronize(event) - -cdef cudaError_t _cudaEventDestroy(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventDestroy(event) - return cudaEventDestroy(event) - -cdef cudaError_t _cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t end) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaEventElapsedTime(ms, start, end) - return cudaEventElapsedTime(ms, start, end) - -cdef cudaError_t _cudaImportExternalMemory(cudaExternalMemory_t* extMem_out, const cudaExternalMemoryHandleDesc* memHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaImportExternalMemory(extMem_out, memHandleDesc) - return cudaImportExternalMemory(extMem_out, memHandleDesc) - -cdef cudaError_t _cudaExternalMemoryGetMappedBuffer(void** devPtr, cudaExternalMemory_t extMem, const cudaExternalMemoryBufferDesc* bufferDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExternalMemoryGetMappedBuffer(devPtr, extMem, bufferDesc) - return cudaExternalMemoryGetMappedBuffer(devPtr, extMem, bufferDesc) - -cdef cudaError_t _cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t* mipmap, cudaExternalMemory_t extMem, const cudaExternalMemoryMipmappedArrayDesc* mipmapDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExternalMemoryGetMappedMipmappedArray(mipmap, extMem, mipmapDesc) - return cudaExternalMemoryGetMappedMipmappedArray(mipmap, extMem, mipmapDesc) - -cdef cudaError_t _cudaDestroyExternalMemory(cudaExternalMemory_t extMem) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDestroyExternalMemory(extMem) - return cudaDestroyExternalMemory(extMem) - -cdef cudaError_t _cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, const cudaExternalSemaphoreHandleDesc* semHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaImportExternalSemaphore(extSem_out, semHandleDesc) - return cudaImportExternalSemaphore(extSem_out, semHandleDesc) - -cdef cudaError_t _cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreSignalParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaSignalExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - return cudaSignalExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - -cdef cudaError_t _cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreWaitParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaWaitExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - return cudaWaitExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - -cdef cudaError_t _cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDestroyExternalSemaphore(extSem) - return cudaDestroyExternalSemaphore(extSem) - -cdef cudaError_t _cudaFuncSetCacheConfig(const void* func, cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFuncSetCacheConfig(func, cacheConfig) - return cudaFuncSetCacheConfig(func, cacheConfig) - -cdef cudaError_t _cudaFuncGetAttributes(cudaFuncAttributes* attr, const void* func) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFuncGetAttributes(attr, func) - return cudaFuncGetAttributes(attr, func) - -cdef cudaError_t _cudaFuncSetAttribute(const void* func, cudaFuncAttribute attr, int value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFuncSetAttribute(func, attr, value) - return cudaFuncSetAttribute(func, attr, value) - -cdef cudaError_t _cudaFuncGetParamCount(const void* func, size_t* paramCount) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFuncGetParamCount(func, paramCount) - return cudaFuncGetParamCount(func, paramCount) - -cdef cudaError_t _cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void* userData) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLaunchHostFunc(stream, fn, userData) - return cudaLaunchHostFunc(stream, fn, userData) - -cdef cudaError_t _cudaLaunchHostFunc_v2(cudaStream_t stream, cudaHostFn_t fn, void* userData, unsigned int syncMode) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLaunchHostFunc_v2(stream, fn, userData, syncMode) - return cudaLaunchHostFunc_v2(stream, fn, userData, syncMode) - -cdef cudaError_t _cudaFuncSetSharedMemConfig(const void* func, cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFuncSetSharedMemConfig(func, config) - return cudaFuncSetSharedMemConfig(func, config) - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaOccupancyMaxActiveBlocksPerMultiprocessor(numBlocks, func, blockSize, dynamicSMemSize) - return cudaOccupancyMaxActiveBlocksPerMultiprocessor(numBlocks, func, blockSize, dynamicSMemSize) - -cdef cudaError_t _cudaOccupancyAvailableDynamicSMemPerBlock(size_t* dynamicSmemSize, const void* func, int numBlocks, int blockSize) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaOccupancyAvailableDynamicSMemPerBlock(dynamicSmemSize, func, numBlocks, blockSize) - return cudaOccupancyAvailableDynamicSMemPerBlock(dynamicSmemSize, func, numBlocks, blockSize) - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(numBlocks, func, blockSize, dynamicSMemSize, flags) - return cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(numBlocks, func, blockSize, dynamicSMemSize, flags) - -cdef cudaError_t _cudaMallocManaged(void** devPtr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocManaged(devPtr, size, flags) - return cudaMallocManaged(devPtr, size, flags) - -cdef cudaError_t _cudaMalloc(void** devPtr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMalloc(devPtr, size) - return cudaMalloc(devPtr, size) - -cdef cudaError_t _cudaMallocHost(void** ptr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocHost(ptr, size) - return cudaMallocHost(ptr, size) - -cdef cudaError_t _cudaMallocPitch(void** devPtr, size_t* pitch, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocPitch(devPtr, pitch, width, height) - return cudaMallocPitch(devPtr, pitch, width, height) - -cdef cudaError_t _cudaMallocArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, size_t width, size_t height, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocArray(array, desc, width, height, flags) - return cudaMallocArray(array, desc, width, height, flags) - -cdef cudaError_t _cudaFree(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFree(devPtr) - return cudaFree(devPtr) - -cdef cudaError_t _cudaFreeHost(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFreeHost(ptr) - return cudaFreeHost(ptr) - -cdef cudaError_t _cudaFreeArray(cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFreeArray(array) - return cudaFreeArray(array) - -cdef cudaError_t _cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFreeMipmappedArray(mipmappedArray) - return cudaFreeMipmappedArray(mipmappedArray) - -cdef cudaError_t _cudaHostAlloc(void** pHost, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaHostAlloc(pHost, size, flags) - return cudaHostAlloc(pHost, size, flags) - -cdef cudaError_t _cudaHostRegister(void* ptr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaHostRegister(ptr, size, flags) - return cudaHostRegister(ptr, size, flags) - -cdef cudaError_t _cudaHostUnregister(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaHostUnregister(ptr) - return cudaHostUnregister(ptr) - -cdef cudaError_t _cudaHostGetDevicePointer(void** pDevice, void* pHost, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaHostGetDevicePointer(pDevice, pHost, flags) - return cudaHostGetDevicePointer(pDevice, pHost, flags) - -cdef cudaError_t _cudaHostGetFlags(unsigned int* pFlags, void* pHost) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaHostGetFlags(pFlags, pHost) - return cudaHostGetFlags(pFlags, pHost) - -cdef cudaError_t _cudaMalloc3D(cudaPitchedPtr* pitchedDevPtr, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMalloc3D(pitchedDevPtr, extent) - return cudaMalloc3D(pitchedDevPtr, extent) - -cdef cudaError_t _cudaMalloc3DArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMalloc3DArray(array, desc, extent, flags) - return cudaMalloc3DArray(array, desc, extent, flags) - -cdef cudaError_t _cudaMallocMipmappedArray(cudaMipmappedArray_t* mipmappedArray, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int numLevels, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocMipmappedArray(mipmappedArray, desc, extent, numLevels, flags) - return cudaMallocMipmappedArray(mipmappedArray, desc, extent, numLevels, flags) - -cdef cudaError_t _cudaGetMipmappedArrayLevel(cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetMipmappedArrayLevel(levelArray, mipmappedArray, level) - return cudaGetMipmappedArrayLevel(levelArray, mipmappedArray, level) - -cdef cudaError_t _cudaMemcpy3D(const cudaMemcpy3DParms* p) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3D(p) - return cudaMemcpy3D(p) - -cdef cudaError_t _cudaMemcpy3DPeer(const cudaMemcpy3DPeerParms* p) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3DPeer(p) - return cudaMemcpy3DPeer(p) - -cdef cudaError_t _cudaMemcpy3DAsync(const cudaMemcpy3DParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3DAsync(p, stream) - return cudaMemcpy3DAsync(p, stream) - -cdef cudaError_t _cudaMemcpy3DPeerAsync(const cudaMemcpy3DPeerParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3DPeerAsync(p, stream) - return cudaMemcpy3DPeerAsync(p, stream) - -cdef cudaError_t _cudaMemGetInfo(size_t* free, size_t* total) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemGetInfo(free, total) - return cudaMemGetInfo(free, total) - -cdef cudaError_t _cudaArrayGetInfo(cudaChannelFormatDesc* desc, cudaExtent* extent, unsigned int* flags, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaArrayGetInfo(desc, extent, flags, array) - return cudaArrayGetInfo(desc, extent, flags, array) - -cdef cudaError_t _cudaArrayGetPlane(cudaArray_t* pPlaneArray, cudaArray_t hArray, unsigned int planeIdx) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaArrayGetPlane(pPlaneArray, hArray, planeIdx) - return cudaArrayGetPlane(pPlaneArray, hArray, planeIdx) - -cdef cudaError_t _cudaArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaArray_t array, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaArrayGetMemoryRequirements(memoryRequirements, array, device) - return cudaArrayGetMemoryRequirements(memoryRequirements, array, device) - -cdef cudaError_t _cudaMipmappedArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaMipmappedArray_t mipmap, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMipmappedArrayGetMemoryRequirements(memoryRequirements, mipmap, device) - return cudaMipmappedArrayGetMemoryRequirements(memoryRequirements, mipmap, device) - -cdef cudaError_t _cudaArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaArrayGetSparseProperties(sparseProperties, array) - return cudaArrayGetSparseProperties(sparseProperties, array) - -cdef cudaError_t _cudaMipmappedArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaMipmappedArray_t mipmap) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMipmappedArrayGetSparseProperties(sparseProperties, mipmap) - return cudaMipmappedArrayGetSparseProperties(sparseProperties, mipmap) - -cdef cudaError_t _cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy(dst, src, count, kind) - return cudaMemcpy(dst, src, count, kind) - -cdef cudaError_t _cudaMemcpyPeer(void* dst, int dstDevice, const void* src, int srcDevice, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyPeer(dst, dstDevice, src, srcDevice, count) - return cudaMemcpyPeer(dst, dstDevice, src, srcDevice, count) - -cdef cudaError_t _cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2D(dst, dpitch, src, spitch, width, height, kind) - return cudaMemcpy2D(dst, dpitch, src, spitch, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DToArray(dst, wOffset, hOffset, src, spitch, width, height, kind) - return cudaMemcpy2DToArray(dst, wOffset, hOffset, src, spitch, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DFromArray(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DFromArray(dst, dpitch, src, wOffset, hOffset, width, height, kind) - return cudaMemcpy2DFromArray(dst, dpitch, src, wOffset, hOffset, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, width, height, kind) - return cudaMemcpy2DArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, width, height, kind) - -cdef cudaError_t _cudaMemcpyAsync(void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyAsync(dst, src, count, kind, stream) - return cudaMemcpyAsync(dst, src, count, kind, stream) - -cdef cudaError_t _cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyPeerAsync(dst, dstDevice, src, srcDevice, count, stream) - return cudaMemcpyPeerAsync(dst, dstDevice, src, srcDevice, count, stream) - -cdef cudaError_t _cudaMemcpyBatchAsync(const void** dsts, const void** srcs, const size_t* sizes, size_t count, cudaMemcpyAttributes* attrs, size_t* attrsIdxs, size_t numAttrs, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyBatchAsync(dsts, srcs, sizes, count, attrs, attrsIdxs, numAttrs, stream) - return cudaMemcpyBatchAsync(dsts, srcs, sizes, count, attrs, attrsIdxs, numAttrs, stream) - -cdef cudaError_t _cudaMemcpy3DBatchAsync(size_t numOps, cudaMemcpy3DBatchOp* opList, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3DBatchAsync(numOps, opList, flags, stream) - return cudaMemcpy3DBatchAsync(numOps, opList, flags, stream) - -cdef cudaError_t _cudaMemcpyWithAttributesAsync(void* dst, const void* src, size_t size, cudaMemcpyAttributes* attr, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyWithAttributesAsync(dst, src, size, attr, stream) - return cudaMemcpyWithAttributesAsync(dst, src, size, attr, stream) - -cdef cudaError_t _cudaMemcpy3DWithAttributesAsync(cudaMemcpy3DBatchOp* op, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy3DWithAttributesAsync(op, flags, stream) - return cudaMemcpy3DWithAttributesAsync(op, flags, stream) - -cdef cudaError_t _cudaMemcpy2DAsync(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DAsync(dst, dpitch, src, spitch, width, height, kind, stream) - return cudaMemcpy2DAsync(dst, dpitch, src, spitch, width, height, kind, stream) - -cdef cudaError_t _cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DToArrayAsync(dst, wOffset, hOffset, src, spitch, width, height, kind, stream) - return cudaMemcpy2DToArrayAsync(dst, wOffset, hOffset, src, spitch, width, height, kind, stream) - -cdef cudaError_t _cudaMemcpy2DFromArrayAsync(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpy2DFromArrayAsync(dst, dpitch, src, wOffset, hOffset, width, height, kind, stream) - return cudaMemcpy2DFromArrayAsync(dst, dpitch, src, wOffset, hOffset, width, height, kind, stream) - -cdef cudaError_t _cudaMemset(void* devPtr, int value, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemset(devPtr, value, count) - return cudaMemset(devPtr, value, count) - -cdef cudaError_t _cudaMemset2D(void* devPtr, size_t pitch, int value, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemset2D(devPtr, pitch, value, width, height) - return cudaMemset2D(devPtr, pitch, value, width, height) - -cdef cudaError_t _cudaMemset3D(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemset3D(pitchedDevPtr, value, extent) - return cudaMemset3D(pitchedDevPtr, value, extent) - -cdef cudaError_t _cudaMemsetAsync(void* devPtr, int value, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemsetAsync(devPtr, value, count, stream) - return cudaMemsetAsync(devPtr, value, count, stream) - -cdef cudaError_t _cudaMemset2DAsync(void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemset2DAsync(devPtr, pitch, value, width, height, stream) - return cudaMemset2DAsync(devPtr, pitch, value, width, height, stream) - -cdef cudaError_t _cudaMemset3DAsync(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemset3DAsync(pitchedDevPtr, value, extent, stream) - return cudaMemset3DAsync(pitchedDevPtr, value, extent, stream) - -cdef cudaError_t _cudaMemPrefetchAsync(const void* devPtr, size_t count, cudaMemLocation location, unsigned int flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPrefetchAsync(devPtr, count, location, flags, stream) - return cudaMemPrefetchAsync(devPtr, count, location, flags, stream) - -cdef cudaError_t _cudaMemPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - return cudaMemPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - -cdef cudaError_t _cudaMemDiscardBatchAsync(void** dptrs, size_t* sizes, size_t count, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemDiscardBatchAsync(dptrs, sizes, count, flags, stream) - return cudaMemDiscardBatchAsync(dptrs, sizes, count, flags, stream) - -cdef cudaError_t _cudaMemDiscardAndPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemDiscardAndPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - return cudaMemDiscardAndPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - -cdef cudaError_t _cudaMemAdvise(const void* devPtr, size_t count, cudaMemoryAdvise advice, cudaMemLocation location) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemAdvise(devPtr, count, advice, location) - return cudaMemAdvise(devPtr, count, advice, location) - -cdef cudaError_t _cudaMemRangeGetAttribute(void* data, size_t dataSize, cudaMemRangeAttribute attribute, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemRangeGetAttribute(data, dataSize, attribute, devPtr, count) - return cudaMemRangeGetAttribute(data, dataSize, attribute, devPtr, count) - -cdef cudaError_t _cudaMemRangeGetAttributes(void** data, size_t* dataSizes, cudaMemRangeAttribute* attributes, size_t numAttributes, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemRangeGetAttributes(data, dataSizes, attributes, numAttributes, devPtr, count) - return cudaMemRangeGetAttributes(data, dataSizes, attributes, numAttributes, devPtr, count) - -cdef cudaError_t _cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyToArray(dst, wOffset, hOffset, src, count, kind) - return cudaMemcpyToArray(dst, wOffset, hOffset, src, count, kind) - -cdef cudaError_t _cudaMemcpyFromArray(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyFromArray(dst, src, wOffset, hOffset, count, kind) - return cudaMemcpyFromArray(dst, src, wOffset, hOffset, count, kind) - -cdef cudaError_t _cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, count, kind) - return cudaMemcpyArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, count, kind) - -cdef cudaError_t _cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyToArrayAsync(dst, wOffset, hOffset, src, count, kind, stream) - return cudaMemcpyToArrayAsync(dst, wOffset, hOffset, src, count, kind, stream) - -cdef cudaError_t _cudaMemcpyFromArrayAsync(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemcpyFromArrayAsync(dst, src, wOffset, hOffset, count, kind, stream) - return cudaMemcpyFromArrayAsync(dst, src, wOffset, hOffset, count, kind, stream) - -cdef cudaError_t _cudaMallocAsync(void** devPtr, size_t size, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocAsync(devPtr, size, hStream) - return cudaMallocAsync(devPtr, size, hStream) - -cdef cudaError_t _cudaFreeAsync(void* devPtr, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaFreeAsync(devPtr, hStream) - return cudaFreeAsync(devPtr, hStream) - -cdef cudaError_t _cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolTrimTo(memPool, minBytesToKeep) - return cudaMemPoolTrimTo(memPool, minBytesToKeep) - -cdef cudaError_t _cudaMemPoolSetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolSetAttribute(memPool, attr, value) - return cudaMemPoolSetAttribute(memPool, attr, value) - -cdef cudaError_t _cudaMemPoolGetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolGetAttribute(memPool, attr, value) - return cudaMemPoolGetAttribute(memPool, attr, value) - -cdef cudaError_t _cudaMemPoolSetAccess(cudaMemPool_t memPool, const cudaMemAccessDesc* descList, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolSetAccess(memPool, descList, count) - return cudaMemPoolSetAccess(memPool, descList, count) - -cdef cudaError_t _cudaMemPoolGetAccess(cudaMemAccessFlags* flags, cudaMemPool_t memPool, cudaMemLocation* location) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolGetAccess(flags, memPool, location) - return cudaMemPoolGetAccess(flags, memPool, location) - -cdef cudaError_t _cudaMemPoolCreate(cudaMemPool_t* memPool, const cudaMemPoolProps* poolProps) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolCreate(memPool, poolProps) - return cudaMemPoolCreate(memPool, poolProps) - -cdef cudaError_t _cudaMemPoolDestroy(cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolDestroy(memPool) - return cudaMemPoolDestroy(memPool) - -cdef cudaError_t _cudaMemGetDefaultMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemGetDefaultMemPool(memPool, location, typename) - return cudaMemGetDefaultMemPool(memPool, location, typename) - -cdef cudaError_t _cudaMemGetMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemGetMemPool(memPool, location, typename) - return cudaMemGetMemPool(memPool, location, typename) - -cdef cudaError_t _cudaMemSetMemPool(cudaMemLocation* location, cudaMemAllocationType typename, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemSetMemPool(location, typename, memPool) - return cudaMemSetMemPool(location, typename, memPool) - -cdef cudaError_t _cudaMallocFromPoolAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMallocFromPoolAsync(ptr, size, memPool, stream) - return cudaMallocFromPoolAsync(ptr, size, memPool, stream) - -cdef cudaError_t _cudaMemPoolExportToShareableHandle(void* shareableHandle, cudaMemPool_t memPool, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolExportToShareableHandle(shareableHandle, memPool, handleType, flags) - return cudaMemPoolExportToShareableHandle(shareableHandle, memPool, handleType, flags) - -cdef cudaError_t _cudaMemPoolImportFromShareableHandle(cudaMemPool_t* memPool, void* shareableHandle, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolImportFromShareableHandle(memPool, shareableHandle, handleType, flags) - return cudaMemPoolImportFromShareableHandle(memPool, shareableHandle, handleType, flags) - -cdef cudaError_t _cudaMemPoolExportPointer(cudaMemPoolPtrExportData* exportData, void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolExportPointer(exportData, ptr) - return cudaMemPoolExportPointer(exportData, ptr) - -cdef cudaError_t _cudaMemPoolImportPointer(void** ptr, cudaMemPool_t memPool, cudaMemPoolPtrExportData* exportData) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaMemPoolImportPointer(ptr, memPool, exportData) - return cudaMemPoolImportPointer(ptr, memPool, exportData) - -cdef cudaError_t _cudaPointerGetAttributes(cudaPointerAttributes* attributes, const void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaPointerGetAttributes(attributes, ptr) - return cudaPointerGetAttributes(attributes, ptr) - -cdef cudaError_t _cudaDeviceCanAccessPeer(int* canAccessPeer, int device, int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceCanAccessPeer(canAccessPeer, device, peerDevice) - return cudaDeviceCanAccessPeer(canAccessPeer, device, peerDevice) - -cdef cudaError_t _cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceEnablePeerAccess(peerDevice, flags) - return cudaDeviceEnablePeerAccess(peerDevice, flags) - -cdef cudaError_t _cudaDeviceDisablePeerAccess(int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceDisablePeerAccess(peerDevice) - return cudaDeviceDisablePeerAccess(peerDevice) - -cdef cudaError_t _cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsUnregisterResource(resource) - return cudaGraphicsUnregisterResource(resource) - -cdef cudaError_t _cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsResourceSetMapFlags(resource, flags) - return cudaGraphicsResourceSetMapFlags(resource, flags) - -cdef cudaError_t _cudaGraphicsMapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsMapResources(count, resources, stream) - return cudaGraphicsMapResources(count, resources, stream) - -cdef cudaError_t _cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsUnmapResources(count, resources, stream) - return cudaGraphicsUnmapResources(count, resources, stream) - -cdef cudaError_t _cudaGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsResourceGetMappedPointer(devPtr, size, resource) - return cudaGraphicsResourceGetMappedPointer(devPtr, size, resource) - -cdef cudaError_t _cudaGraphicsSubResourceGetMappedArray(cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsSubResourceGetMappedArray(array, resource, arrayIndex, mipLevel) - return cudaGraphicsSubResourceGetMappedArray(array, resource, arrayIndex, mipLevel) - -cdef cudaError_t _cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphicsResourceGetMappedMipmappedArray(mipmappedArray, resource) - return cudaGraphicsResourceGetMappedMipmappedArray(mipmappedArray, resource) - -cdef cudaError_t _cudaGetChannelDesc(cudaChannelFormatDesc* desc, cudaArray_const_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetChannelDesc(desc, array) - return cudaGetChannelDesc(desc, array) -@cython.show_performance_hints(False) -cdef cudaChannelFormatDesc _cudaCreateChannelDesc(int x, int y, int z, int w, cudaChannelFormatKind f) except* nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaCreateChannelDesc(x, y, z, w, f) - return cudaCreateChannelDesc(x, y, z, w, f) - -cdef cudaError_t _cudaCreateTextureObject(cudaTextureObject_t* pTexObject, const cudaResourceDesc* pResDesc, const cudaTextureDesc* pTexDesc, const cudaResourceViewDesc* pResViewDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaCreateTextureObject(pTexObject, pResDesc, pTexDesc, pResViewDesc) - return cudaCreateTextureObject(pTexObject, pResDesc, pTexDesc, pResViewDesc) - -cdef cudaError_t _cudaDestroyTextureObject(cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDestroyTextureObject(texObject) - return cudaDestroyTextureObject(texObject) - -cdef cudaError_t _cudaGetTextureObjectResourceDesc(cudaResourceDesc* pResDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetTextureObjectResourceDesc(pResDesc, texObject) - return cudaGetTextureObjectResourceDesc(pResDesc, texObject) - -cdef cudaError_t _cudaGetTextureObjectTextureDesc(cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetTextureObjectTextureDesc(pTexDesc, texObject) - return cudaGetTextureObjectTextureDesc(pTexDesc, texObject) - -cdef cudaError_t _cudaGetTextureObjectResourceViewDesc(cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetTextureObjectResourceViewDesc(pResViewDesc, texObject) - return cudaGetTextureObjectResourceViewDesc(pResViewDesc, texObject) - -cdef cudaError_t _cudaCreateSurfaceObject(cudaSurfaceObject_t* pSurfObject, const cudaResourceDesc* pResDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaCreateSurfaceObject(pSurfObject, pResDesc) - return cudaCreateSurfaceObject(pSurfObject, pResDesc) - -cdef cudaError_t _cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDestroySurfaceObject(surfObject) - return cudaDestroySurfaceObject(surfObject) - -cdef cudaError_t _cudaGetSurfaceObjectResourceDesc(cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetSurfaceObjectResourceDesc(pResDesc, surfObject) - return cudaGetSurfaceObjectResourceDesc(pResDesc, surfObject) - -cdef cudaError_t _cudaDriverGetVersion(int* driverVersion) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDriverGetVersion(driverVersion) - return cudaDriverGetVersion(driverVersion) - -cdef cudaError_t _cudaRuntimeGetVersion(int* runtimeVersion) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaRuntimeGetVersion(runtimeVersion) - return cudaRuntimeGetVersion(runtimeVersion) - -cdef cudaError_t _cudaLogsRegisterCallback(cudaLogsCallback_t callbackFunc, void* userData, cudaLogsCallbackHandle* callback_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLogsRegisterCallback(callbackFunc, userData, callback_out) - return cudaLogsRegisterCallback(callbackFunc, userData, callback_out) - -cdef cudaError_t _cudaLogsUnregisterCallback(cudaLogsCallbackHandle callback) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLogsUnregisterCallback(callback) - return cudaLogsUnregisterCallback(callback) - -cdef cudaError_t _cudaLogsCurrent(cudaLogIterator* iterator_out, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLogsCurrent(iterator_out, flags) - return cudaLogsCurrent(iterator_out, flags) - -cdef cudaError_t _cudaLogsDumpToFile(cudaLogIterator* iterator, const char* pathToFile, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLogsDumpToFile(iterator, pathToFile, flags) - return cudaLogsDumpToFile(iterator, pathToFile, flags) - -cdef cudaError_t _cudaLogsDumpToMemory(cudaLogIterator* iterator, char* buffer, size_t* size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLogsDumpToMemory(iterator, buffer, size, flags) - return cudaLogsDumpToMemory(iterator, buffer, size, flags) - -cdef cudaError_t _cudaGraphCreate(cudaGraph_t* pGraph, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphCreate(pGraph, flags) - return cudaGraphCreate(pGraph, flags) - -cdef cudaError_t _cudaGraphAddKernelNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddKernelNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - return cudaGraphAddKernelNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeGetParams(cudaGraphNode_t node, cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphKernelNodeGetParams(node, pNodeParams) - return cudaGraphKernelNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphKernelNodeSetParams(node, pNodeParams) - return cudaGraphKernelNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeCopyAttributes(cudaGraphNode_t hDst, cudaGraphNode_t hSrc) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphKernelNodeCopyAttributes(hDst, hSrc) - return cudaGraphKernelNodeCopyAttributes(hDst, hSrc) - -cdef cudaError_t _cudaGraphKernelNodeGetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, cudaKernelNodeAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphKernelNodeGetAttribute(hNode, attr, value_out) - return cudaGraphKernelNodeGetAttribute(hNode, attr, value_out) - -cdef cudaError_t _cudaGraphKernelNodeSetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, const cudaKernelNodeAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphKernelNodeSetAttribute(hNode, attr, value) - return cudaGraphKernelNodeSetAttribute(hNode, attr, value) - -cdef cudaError_t _cudaGraphAddMemcpyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemcpy3DParms* pCopyParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddMemcpyNode(pGraphNode, graph, pDependencies, numDependencies, pCopyParams) - return cudaGraphAddMemcpyNode(pGraphNode, graph, pDependencies, numDependencies, pCopyParams) - -cdef cudaError_t _cudaGraphAddMemcpyNode1D(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddMemcpyNode1D(pGraphNode, graph, pDependencies, numDependencies, dst, src, count, kind) - return cudaGraphAddMemcpyNode1D(pGraphNode, graph, pDependencies, numDependencies, dst, src, count, kind) - -cdef cudaError_t _cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemcpyNodeGetParams(node, pNodeParams) - return cudaGraphMemcpyNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemcpyNodeSetParams(node, pNodeParams) - return cudaGraphMemcpyNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams1D(cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemcpyNodeSetParams1D(node, dst, src, count, kind) - return cudaGraphMemcpyNodeSetParams1D(node, dst, src, count, kind) - -cdef cudaError_t _cudaGraphAddMemsetNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemsetParams* pMemsetParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddMemsetNode(pGraphNode, graph, pDependencies, numDependencies, pMemsetParams) - return cudaGraphAddMemsetNode(pGraphNode, graph, pDependencies, numDependencies, pMemsetParams) - -cdef cudaError_t _cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemsetNodeGetParams(node, pNodeParams) - return cudaGraphMemsetNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemsetNodeSetParams(node, pNodeParams) - return cudaGraphMemsetNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphAddHostNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddHostNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - return cudaGraphAddHostNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - -cdef cudaError_t _cudaGraphHostNodeGetParams(cudaGraphNode_t node, cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphHostNodeGetParams(node, pNodeParams) - return cudaGraphHostNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphHostNodeSetParams(cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphHostNodeSetParams(node, pNodeParams) - return cudaGraphHostNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphAddChildGraphNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddChildGraphNode(pGraphNode, graph, pDependencies, numDependencies, childGraph) - return cudaGraphAddChildGraphNode(pGraphNode, graph, pDependencies, numDependencies, childGraph) - -cdef cudaError_t _cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphChildGraphNodeGetGraph(node, pGraph) - return cudaGraphChildGraphNodeGetGraph(node, pGraph) - -cdef cudaError_t _cudaGraphAddEmptyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddEmptyNode(pGraphNode, graph, pDependencies, numDependencies) - return cudaGraphAddEmptyNode(pGraphNode, graph, pDependencies, numDependencies) - -cdef cudaError_t _cudaGraphAddEventRecordNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddEventRecordNode(pGraphNode, graph, pDependencies, numDependencies, event) - return cudaGraphAddEventRecordNode(pGraphNode, graph, pDependencies, numDependencies, event) - -cdef cudaError_t _cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphEventRecordNodeGetEvent(node, event_out) - return cudaGraphEventRecordNodeGetEvent(node, event_out) - -cdef cudaError_t _cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphEventRecordNodeSetEvent(node, event) - return cudaGraphEventRecordNodeSetEvent(node, event) - -cdef cudaError_t _cudaGraphAddEventWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddEventWaitNode(pGraphNode, graph, pDependencies, numDependencies, event) - return cudaGraphAddEventWaitNode(pGraphNode, graph, pDependencies, numDependencies, event) - -cdef cudaError_t _cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphEventWaitNodeGetEvent(node, event_out) - return cudaGraphEventWaitNodeGetEvent(node, event_out) - -cdef cudaError_t _cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphEventWaitNodeSetEvent(node, event) - return cudaGraphEventWaitNodeSetEvent(node, event) - -cdef cudaError_t _cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddExternalSemaphoresSignalNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - return cudaGraphAddExternalSemaphoresSignalNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreSignalNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExternalSemaphoresSignalNodeGetParams(hNode, params_out) - return cudaGraphExternalSemaphoresSignalNodeGetParams(hNode, params_out) - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExternalSemaphoresSignalNodeSetParams(hNode, nodeParams) - return cudaGraphExternalSemaphoresSignalNodeSetParams(hNode, nodeParams) - -cdef cudaError_t _cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddExternalSemaphoresWaitNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - return cudaGraphAddExternalSemaphoresWaitNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreWaitNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExternalSemaphoresWaitNodeGetParams(hNode, params_out) - return cudaGraphExternalSemaphoresWaitNodeGetParams(hNode, params_out) - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExternalSemaphoresWaitNodeSetParams(hNode, nodeParams) - return cudaGraphExternalSemaphoresWaitNodeSetParams(hNode, nodeParams) - -cdef cudaError_t _cudaGraphAddMemAllocNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaMemAllocNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddMemAllocNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - return cudaGraphAddMemAllocNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, cudaMemAllocNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemAllocNodeGetParams(node, params_out) - return cudaGraphMemAllocNodeGetParams(node, params_out) - -cdef cudaError_t _cudaGraphAddMemFreeNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dptr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddMemFreeNode(pGraphNode, graph, pDependencies, numDependencies, dptr) - return cudaGraphAddMemFreeNode(pGraphNode, graph, pDependencies, numDependencies, dptr) - -cdef cudaError_t _cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void* dptr_out) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphMemFreeNodeGetParams(node, dptr_out) - return cudaGraphMemFreeNodeGetParams(node, dptr_out) - -cdef cudaError_t _cudaDeviceGraphMemTrim(int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGraphMemTrim(device) - return cudaDeviceGraphMemTrim(device) - -cdef cudaError_t _cudaDeviceGetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetGraphMemAttribute(device, attr, value) - return cudaDeviceGetGraphMemAttribute(device, attr, value) - -cdef cudaError_t _cudaDeviceSetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceSetGraphMemAttribute(device, attr, value) - return cudaDeviceSetGraphMemAttribute(device, attr, value) - -cdef cudaError_t _cudaGraphClone(cudaGraph_t* pGraphClone, cudaGraph_t originalGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphClone(pGraphClone, originalGraph) - return cudaGraphClone(pGraphClone, originalGraph) - -cdef cudaError_t _cudaGraphNodeFindInClone(cudaGraphNode_t* pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeFindInClone(pNode, originalNode, clonedGraph) - return cudaGraphNodeFindInClone(pNode, originalNode, clonedGraph) - -cdef cudaError_t _cudaGraphNodeGetType(cudaGraphNode_t node, cudaGraphNodeType* pType) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetType(node, pType) - return cudaGraphNodeGetType(node, pType) - -cdef cudaError_t _cudaGraphNodeGetContainingGraph(cudaGraphNode_t hNode, cudaGraph_t* phGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetContainingGraph(hNode, phGraph) - return cudaGraphNodeGetContainingGraph(hNode, phGraph) - -cdef cudaError_t _cudaGraphNodeGetLocalId(cudaGraphNode_t hNode, unsigned int* nodeId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetLocalId(hNode, nodeId) - return cudaGraphNodeGetLocalId(hNode, nodeId) - -cdef cudaError_t _cudaGraphNodeGetToolsId(cudaGraphNode_t hNode, unsigned long long* toolsNodeId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetToolsId(hNode, toolsNodeId) - return cudaGraphNodeGetToolsId(hNode, toolsNodeId) - -cdef cudaError_t _cudaGraphGetId(cudaGraph_t hGraph, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphGetId(hGraph, graphID) - return cudaGraphGetId(hGraph, graphID) - -cdef cudaError_t _cudaGraphExecGetId(cudaGraphExec_t hGraphExec, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecGetId(hGraphExec, graphID) - return cudaGraphExecGetId(hGraphExec, graphID) - -cdef cudaError_t _cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t* nodes, size_t* numNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphGetNodes(graph, nodes, numNodes) - return cudaGraphGetNodes(graph, nodes, numNodes) - -cdef cudaError_t _cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t* pRootNodes, size_t* pNumRootNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphGetRootNodes(graph, pRootNodes, pNumRootNodes) - return cudaGraphGetRootNodes(graph, pRootNodes, pNumRootNodes) - -cdef cudaError_t _cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t* from_, cudaGraphNode_t* to, cudaGraphEdgeData* edgeData, size_t* numEdges) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphGetEdges(graph, from_, to, edgeData, numEdges) - return cudaGraphGetEdges(graph, from_, to, edgeData, numEdges) - -cdef cudaError_t _cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t* pDependencies, cudaGraphEdgeData* edgeData, size_t* pNumDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetDependencies(node, pDependencies, edgeData, pNumDependencies) - return cudaGraphNodeGetDependencies(node, pDependencies, edgeData, pNumDependencies) - -cdef cudaError_t _cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t* pDependentNodes, cudaGraphEdgeData* edgeData, size_t* pNumDependentNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetDependentNodes(node, pDependentNodes, edgeData, pNumDependentNodes) - return cudaGraphNodeGetDependentNodes(node, pDependentNodes, edgeData, pNumDependentNodes) - -cdef cudaError_t _cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddDependencies(graph, from_, to, edgeData, numDependencies) - return cudaGraphAddDependencies(graph, from_, to, edgeData, numDependencies) - -cdef cudaError_t _cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphRemoveDependencies(graph, from_, to, edgeData, numDependencies) - return cudaGraphRemoveDependencies(graph, from_, to, edgeData, numDependencies) - -cdef cudaError_t _cudaGraphDestroyNode(cudaGraphNode_t node) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphDestroyNode(node) - return cudaGraphDestroyNode(node) - -cdef cudaError_t _cudaGraphInstantiate(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphInstantiate(pGraphExec, graph, flags) - return cudaGraphInstantiate(pGraphExec, graph, flags) - -cdef cudaError_t _cudaGraphInstantiateWithFlags(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphInstantiateWithFlags(pGraphExec, graph, flags) - return cudaGraphInstantiateWithFlags(pGraphExec, graph, flags) - -cdef cudaError_t _cudaGraphInstantiateWithParams(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, cudaGraphInstantiateParams* instantiateParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphInstantiateWithParams(pGraphExec, graph, instantiateParams) - return cudaGraphInstantiateWithParams(pGraphExec, graph, instantiateParams) - -cdef cudaError_t _cudaGraphExecGetFlags(cudaGraphExec_t graphExec, unsigned long long* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecGetFlags(graphExec, flags) - return cudaGraphExecGetFlags(graphExec, flags) - -cdef cudaError_t _cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecKernelNodeSetParams(hGraphExec, node, pNodeParams) - return cudaGraphExecKernelNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecMemcpyNodeSetParams(hGraphExec, node, pNodeParams) - return cudaGraphExecMemcpyNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams1D(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecMemcpyNodeSetParams1D(hGraphExec, node, dst, src, count, kind) - return cudaGraphExecMemcpyNodeSetParams1D(hGraphExec, node, dst, src, count, kind) - -cdef cudaError_t _cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecMemsetNodeSetParams(hGraphExec, node, pNodeParams) - return cudaGraphExecMemsetNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecHostNodeSetParams(hGraphExec, node, pNodeParams) - return cudaGraphExecHostNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecChildGraphNodeSetParams(hGraphExec, node, childGraph) - return cudaGraphExecChildGraphNodeSetParams(hGraphExec, node, childGraph) - -cdef cudaError_t _cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecEventRecordNodeSetEvent(hGraphExec, hNode, event) - return cudaGraphExecEventRecordNodeSetEvent(hGraphExec, hNode, event) - -cdef cudaError_t _cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecEventWaitNodeSetEvent(hGraphExec, hNode, event) - return cudaGraphExecEventWaitNodeSetEvent(hGraphExec, hNode, event) - -cdef cudaError_t _cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecExternalSemaphoresSignalNodeSetParams(hGraphExec, hNode, nodeParams) - return cudaGraphExecExternalSemaphoresSignalNodeSetParams(hGraphExec, hNode, nodeParams) - -cdef cudaError_t _cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecExternalSemaphoresWaitNodeSetParams(hGraphExec, hNode, nodeParams) - return cudaGraphExecExternalSemaphoresWaitNodeSetParams(hGraphExec, hNode, nodeParams) - -cdef cudaError_t _cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeSetEnabled(hGraphExec, hNode, isEnabled) - return cudaGraphNodeSetEnabled(hGraphExec, hNode, isEnabled) - -cdef cudaError_t _cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int* isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetEnabled(hGraphExec, hNode, isEnabled) - return cudaGraphNodeGetEnabled(hGraphExec, hNode, isEnabled) - -cdef cudaError_t _cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphExecUpdateResultInfo* resultInfo) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecUpdate(hGraphExec, hGraph, resultInfo) - return cudaGraphExecUpdate(hGraphExec, hGraph, resultInfo) - -cdef cudaError_t _cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphUpload(graphExec, stream) - return cudaGraphUpload(graphExec, stream) - -cdef cudaError_t _cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphLaunch(graphExec, stream) - return cudaGraphLaunch(graphExec, stream) - -cdef cudaError_t _cudaGraphExecDestroy(cudaGraphExec_t graphExec) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecDestroy(graphExec) - return cudaGraphExecDestroy(graphExec) - -cdef cudaError_t _cudaGraphDestroy(cudaGraph_t graph) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphDestroy(graph) - return cudaGraphDestroy(graph) - -cdef cudaError_t _cudaGraphDebugDotPrint(cudaGraph_t graph, const char* path, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphDebugDotPrint(graph, path, flags) - return cudaGraphDebugDotPrint(graph, path, flags) - -cdef cudaError_t _cudaUserObjectCreate(cudaUserObject_t* object_out, void* ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaUserObjectCreate(object_out, ptr, destroy, initialRefcount, flags) - return cudaUserObjectCreate(object_out, ptr, destroy, initialRefcount, flags) - -cdef cudaError_t _cudaUserObjectRetain(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaUserObjectRetain(object, count) - return cudaUserObjectRetain(object, count) - -cdef cudaError_t _cudaUserObjectRelease(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaUserObjectRelease(object, count) - return cudaUserObjectRelease(object, count) - -cdef cudaError_t _cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphRetainUserObject(graph, object, count, flags) - return cudaGraphRetainUserObject(graph, object, count, flags) - -cdef cudaError_t _cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphReleaseUserObject(graph, object, count) - return cudaGraphReleaseUserObject(graph, object, count) - -cdef cudaError_t _cudaGraphAddNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphAddNode(pGraphNode, graph, pDependencies, dependencyData, numDependencies, nodeParams) - return cudaGraphAddNode(pGraphNode, graph, pDependencies, dependencyData, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphNodeSetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeSetParams(node, nodeParams) - return cudaGraphNodeSetParams(node, nodeParams) - -cdef cudaError_t _cudaGraphNodeGetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphNodeGetParams(node, nodeParams) - return cudaGraphNodeGetParams(node, nodeParams) - -cdef cudaError_t _cudaGraphExecNodeSetParams(cudaGraphExec_t graphExec, cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphExecNodeSetParams(graphExec, node, nodeParams) - return cudaGraphExecNodeSetParams(graphExec, node, nodeParams) - -cdef cudaError_t _cudaGraphConditionalHandleCreate(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphConditionalHandleCreate(pHandle_out, graph, defaultLaunchValue, flags) - return cudaGraphConditionalHandleCreate(pHandle_out, graph, defaultLaunchValue, flags) - -cdef cudaError_t _cudaGraphConditionalHandleCreate_v2(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, cudaExecutionContext_t ctx, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGraphConditionalHandleCreate_v2(pHandle_out, graph, ctx, defaultLaunchValue, flags) - return cudaGraphConditionalHandleCreate_v2(pHandle_out, graph, ctx, defaultLaunchValue, flags) - -cdef cudaError_t _cudaGetDriverEntryPoint(const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDriverEntryPoint(symbol, funcPtr, flags, driverStatus) - return cudaGetDriverEntryPoint(symbol, funcPtr, flags, driverStatus) - -cdef cudaError_t _cudaGetDriverEntryPointByVersion(const char* symbol, void** funcPtr, unsigned int cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetDriverEntryPointByVersion(symbol, funcPtr, cudaVersion, flags, driverStatus) - return cudaGetDriverEntryPointByVersion(symbol, funcPtr, cudaVersion, flags, driverStatus) - -cdef cudaError_t _cudaLibraryLoadData(cudaLibrary_t* library, const void* code, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryLoadData(library, code, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - return cudaLibraryLoadData(library, code, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - -cdef cudaError_t _cudaLibraryLoadFromFile(cudaLibrary_t* library, const char* fileName, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryLoadFromFile(library, fileName, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - return cudaLibraryLoadFromFile(library, fileName, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - -cdef cudaError_t _cudaLibraryUnload(cudaLibrary_t library) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryUnload(library) - return cudaLibraryUnload(library) - -cdef cudaError_t _cudaLibraryGetKernel(cudaKernel_t* pKernel, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryGetKernel(pKernel, library, name) - return cudaLibraryGetKernel(pKernel, library, name) - -cdef cudaError_t _cudaLibraryGetGlobal(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryGetGlobal(dptr, numbytes, library, name) - return cudaLibraryGetGlobal(dptr, numbytes, library, name) - -cdef cudaError_t _cudaLibraryGetManaged(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryGetManaged(dptr, numbytes, library, name) - return cudaLibraryGetManaged(dptr, numbytes, library, name) - -cdef cudaError_t _cudaLibraryGetUnifiedFunction(void** fptr, cudaLibrary_t library, const char* symbol) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryGetUnifiedFunction(fptr, library, symbol) - return cudaLibraryGetUnifiedFunction(fptr, library, symbol) - -cdef cudaError_t _cudaLibraryGetKernelCount(unsigned int* count, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryGetKernelCount(count, lib) - return cudaLibraryGetKernelCount(count, lib) - -cdef cudaError_t _cudaLibraryEnumerateKernels(cudaKernel_t* kernels, unsigned int numKernels, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaLibraryEnumerateKernels(kernels, numKernels, lib) - return cudaLibraryEnumerateKernels(kernels, numKernels, lib) - -cdef cudaError_t _cudaKernelSetAttributeForDevice(cudaKernel_t kernel, cudaFuncAttribute attr, int value, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaKernelSetAttributeForDevice(kernel, attr, value, device) - return cudaKernelSetAttributeForDevice(kernel, attr, value, device) - -cdef cudaError_t _cudaDeviceGetDevResource(int device, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetDevResource(device, resource, typename) - return cudaDeviceGetDevResource(device, resource, typename) - -cdef cudaError_t _cudaDevSmResourceSplitByCount(cudaDevResource* result, unsigned int* nbGroups, const cudaDevResource* input, cudaDevResource* remaining, unsigned int flags, unsigned int minCount) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDevSmResourceSplitByCount(result, nbGroups, input, remaining, flags, minCount) - return cudaDevSmResourceSplitByCount(result, nbGroups, input, remaining, flags, minCount) - -cdef cudaError_t _cudaDevSmResourceSplit(cudaDevResource* result, unsigned int nbGroups, const cudaDevResource* input, cudaDevResource* remainder, unsigned int flags, cudaDevSmResourceGroupParams* groupParams) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDevSmResourceSplit(result, nbGroups, input, remainder, flags, groupParams) - return cudaDevSmResourceSplit(result, nbGroups, input, remainder, flags, groupParams) - -cdef cudaError_t _cudaDevResourceGenerateDesc(cudaDevResourceDesc_t* phDesc, cudaDevResource* resources, unsigned int nbResources) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDevResourceGenerateDesc(phDesc, resources, nbResources) - return cudaDevResourceGenerateDesc(phDesc, resources, nbResources) - -cdef cudaError_t _cudaGreenCtxCreate(cudaExecutionContext_t* phCtx, cudaDevResourceDesc_t desc, int device, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGreenCtxCreate(phCtx, desc, device, flags) - return cudaGreenCtxCreate(phCtx, desc, device, flags) - -cdef cudaError_t _cudaExecutionCtxDestroy(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxDestroy(ctx) - return cudaExecutionCtxDestroy(ctx) - -cdef cudaError_t _cudaExecutionCtxGetDevResource(cudaExecutionContext_t ctx, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxGetDevResource(ctx, resource, typename) - return cudaExecutionCtxGetDevResource(ctx, resource, typename) - -cdef cudaError_t _cudaExecutionCtxGetDevice(int* device, cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxGetDevice(device, ctx) - return cudaExecutionCtxGetDevice(device, ctx) - -cdef cudaError_t _cudaExecutionCtxGetId(cudaExecutionContext_t ctx, unsigned long long* ctxId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxGetId(ctx, ctxId) - return cudaExecutionCtxGetId(ctx, ctxId) - -cdef cudaError_t _cudaExecutionCtxStreamCreate(cudaStream_t* phStream, cudaExecutionContext_t ctx, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxStreamCreate(phStream, ctx, flags, priority) - return cudaExecutionCtxStreamCreate(phStream, ctx, flags, priority) - -cdef cudaError_t _cudaExecutionCtxSynchronize(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxSynchronize(ctx) - return cudaExecutionCtxSynchronize(ctx) - -cdef cudaError_t _cudaStreamGetDevResource(cudaStream_t hStream, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaStreamGetDevResource(hStream, resource, typename) - return cudaStreamGetDevResource(hStream, resource, typename) - -cdef cudaError_t _cudaExecutionCtxRecordEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxRecordEvent(ctx, event) - return cudaExecutionCtxRecordEvent(ctx, event) - -cdef cudaError_t _cudaExecutionCtxWaitEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaExecutionCtxWaitEvent(ctx, event) - return cudaExecutionCtxWaitEvent(ctx, event) - -cdef cudaError_t _cudaDeviceGetExecutionCtx(cudaExecutionContext_t* ctx, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaDeviceGetExecutionCtx(ctx, device) - return cudaDeviceGetExecutionCtx(ctx, device) - -cdef cudaError_t _cudaGetExportTable(const void** ppExportTable, const cudaUUID_t* pExportTableId) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetExportTable(ppExportTable, pExportTableId) - return cudaGetExportTable(ppExportTable, pExportTableId) - -cdef cudaError_t _cudaGetKernel(cudaKernel_t* kernelPtr, const void* entryFuncAddr) except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaGetKernel(kernelPtr, entryFuncAddr) - return cudaGetKernel(kernelPtr, entryFuncAddr) -@cython.show_performance_hints(False) -cdef cudaPitchedPtr _make_cudaPitchedPtr(void* d, size_t p, size_t xsz, size_t ysz) except* nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._make_cudaPitchedPtr(d, p, xsz, ysz) - return make_cudaPitchedPtr(d, p, xsz, ysz) -@cython.show_performance_hints(False) -cdef cudaPos _make_cudaPos(size_t x, size_t y, size_t z) except* nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._make_cudaPos(x, y, z) - return make_cudaPos(x, y, z) -@cython.show_performance_hints(False) -cdef cudaExtent _make_cudaExtent(size_t w, size_t h, size_t d) except* nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._make_cudaExtent(w, h, d) - return make_cudaExtent(w, h, d) - -cdef cudaError_t _cudaProfilerStart() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaProfilerStart() - return cudaProfilerStart() - -cdef cudaError_t _cudaProfilerStop() except ?cudaErrorCallRequiresNewerDriver nogil: - cdef bint usePTDS = cudaPythonInit() - if usePTDS: - return ptds._cudaProfilerStop() - return cudaProfilerStop() - - -include "../_lib/cyruntime/cyruntime.pxi" diff --git a/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pxd b/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pxd deleted file mode 100644 index a742d36930b..00000000000 --- a/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pxd +++ /dev/null @@ -1,652 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. -cdef extern from "": - """ - #define CUDA_API_PER_THREAD_DEFAULT_STREAM - """ - -include "../cyruntime_types.pxi" - -cdef cudaError_t _cudaDeviceReset() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSynchronize() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetLimit(cudaLimit limit, size_t value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetLimit(size_t* pValue, cudaLimit limit) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetTexture1DLinearMaxWidth(size_t* maxWidthInElements, const cudaChannelFormatDesc* fmtDesc, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetCacheConfig(cudaFuncCache* pCacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetStreamPriorityRange(int* leastPriority, int* greatestPriority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetCacheConfig(cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetByPCIBusId(int* device, const char* pciBusId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetPCIBusId(char* pciBusId, int length, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcGetEventHandle(cudaIpcEventHandle_t* handle, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcOpenEventHandle(cudaEvent_t* event, cudaIpcEventHandle_t handle) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcGetMemHandle(cudaIpcMemHandle_t* handle, void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcOpenMemHandle(void** devPtr, cudaIpcMemHandle_t handle, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaIpcCloseMemHandle(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceFlushGPUDirectRDMAWrites(cudaFlushGPUDirectRDMAWritesTarget target, cudaFlushGPUDirectRDMAWritesScope scope) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceRegisterAsyncNotification(int device, cudaAsyncCallback callbackFunc, void* userData, cudaAsyncCallbackHandle_t* callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceUnregisterAsyncNotification(int device, cudaAsyncCallbackHandle_t callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetSharedMemConfig(cudaSharedMemConfig* pConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetSharedMemConfig(cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetLastError() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaPeekAtLastError() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef const char* _cudaGetErrorName(cudaError_t error) except ?NULL nogil - -cdef const char* _cudaGetErrorString(cudaError_t error) except ?NULL nogil - -cdef cudaError_t _cudaGetDeviceCount(int* count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDeviceProperties(cudaDeviceProp* prop, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetHostAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetDefaultMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetMemPool(int device, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetNvSciSyncAttributes(void* nvSciSyncAttrList, int device, int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetP2PAttribute(int* value, cudaDeviceP2PAttr attr, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetP2PAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaChooseDevice(int* device, const cudaDeviceProp* prop) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaInitDevice(int device, unsigned int deviceFlags, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSetDevice(int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDevice(int* device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSetDeviceFlags(unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDeviceFlags(unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreate(cudaStream_t* pStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreateWithFlags(cudaStream_t* pStream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetPriority(cudaStream_t hStream, int* priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetFlags(cudaStream_t hStream, unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetId(cudaStream_t hStream, unsigned long long* streamId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetDevice(cudaStream_t hStream, int* device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaCtxResetPersistingL2Cache() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, cudaStreamAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamSetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, const cudaStreamAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamDestroy(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void* userData, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamSynchronize(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamQuery(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamAttachMemAsync(cudaStream_t stream, void* devPtr, size_t length, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginCapture(cudaStream_t stream, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginRecaptureToGraph(cudaStream_t stream, cudaStreamCaptureMode mode, cudaGraph_t graph, cudaGraphRecaptureCallbackData* callbackData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamBeginCaptureToGraph(cudaStream_t stream, cudaGraph_t graph, const cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaThreadExchangeStreamCaptureMode(cudaStreamCaptureMode* mode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamIsCapturing(cudaStream_t stream, cudaStreamCaptureStatus* pCaptureStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetCaptureInfo(cudaStream_t stream, cudaStreamCaptureStatus* captureStatus_out, unsigned long long* id_out, cudaGraph_t* graph_out, const cudaGraphNode_t** dependencies_out, const cudaGraphEdgeData** edgeData_out, size_t* numDependencies_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventCreate(cudaEvent_t* event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventCreateWithFlags(cudaEvent_t* event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventRecord(cudaEvent_t event, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventQuery(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventSynchronize(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventDestroy(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t end) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaImportExternalMemory(cudaExternalMemory_t* extMem_out, const cudaExternalMemoryHandleDesc* memHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExternalMemoryGetMappedBuffer(void** devPtr, cudaExternalMemory_t extMem, const cudaExternalMemoryBufferDesc* bufferDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t* mipmap, cudaExternalMemory_t extMem, const cudaExternalMemoryMipmappedArrayDesc* mipmapDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyExternalMemory(cudaExternalMemory_t extMem) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, const cudaExternalSemaphoreHandleDesc* semHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreSignalParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreWaitParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetCacheConfig(const void* func, cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncGetAttributes(cudaFuncAttributes* attr, const void* func) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetAttribute(const void* func, cudaFuncAttribute attr, int value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncGetParamCount(const void* func, size_t* paramCount) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void* userData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLaunchHostFunc_v2(cudaStream_t stream, cudaHostFn_t fn, void* userData, unsigned int syncMode) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFuncSetSharedMemConfig(const void* func, cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyAvailableDynamicSMemPerBlock(size_t* dynamicSmemSize, const void* func, int numBlocks, int blockSize) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocManaged(void** devPtr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc(void** devPtr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocHost(void** ptr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocPitch(void** devPtr, size_t* pitch, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, size_t width, size_t height, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFree(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeHost(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeArray(cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostAlloc(void** pHost, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostRegister(void* ptr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostUnregister(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostGetDevicePointer(void** pDevice, void* pHost, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaHostGetFlags(unsigned int* pFlags, void* pHost) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc3D(cudaPitchedPtr* pitchedDevPtr, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMalloc3DArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocMipmappedArray(cudaMipmappedArray_t* mipmappedArray, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int numLevels, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetMipmappedArrayLevel(cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3D(const cudaMemcpy3DParms* p) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DPeer(const cudaMemcpy3DPeerParms* p) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DAsync(const cudaMemcpy3DParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DPeerAsync(const cudaMemcpy3DPeerParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetInfo(size_t* free, size_t* total) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetInfo(cudaChannelFormatDesc* desc, cudaExtent* extent, unsigned int* flags, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetPlane(cudaArray_t* pPlaneArray, cudaArray_t hArray, unsigned int planeIdx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaArray_t array, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMipmappedArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaMipmappedArray_t mipmap, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMipmappedArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaMipmappedArray_t mipmap) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyPeer(void* dst, int dstDevice, const void* src, int srcDevice, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DFromArray(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyAsync(void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyBatchAsync(const void** dsts, const void** srcs, const size_t* sizes, size_t count, cudaMemcpyAttributes* attrs, size_t* attrsIdxs, size_t numAttrs, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DBatchAsync(size_t numOps, cudaMemcpy3DBatchOp* opList, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyWithAttributesAsync(void* dst, const void* src, size_t size, cudaMemcpyAttributes* attr, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy3DWithAttributesAsync(cudaMemcpy3DBatchOp* op, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DAsync(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpy2DFromArrayAsync(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset(void* devPtr, int value, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset2D(void* devPtr, size_t pitch, int value, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset3D(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemsetAsync(void* devPtr, int value, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset2DAsync(void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemset3DAsync(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPrefetchAsync(const void* devPtr, size_t count, cudaMemLocation location, unsigned int flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemDiscardBatchAsync(void** dptrs, size_t* sizes, size_t count, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemDiscardAndPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemAdvise(const void* devPtr, size_t count, cudaMemoryAdvise advice, cudaMemLocation location) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemRangeGetAttribute(void* data, size_t dataSize, cudaMemRangeAttribute attribute, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemRangeGetAttributes(void** data, size_t* dataSizes, cudaMemRangeAttribute* attributes, size_t numAttributes, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyFromArray(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemcpyFromArrayAsync(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocAsync(void** devPtr, size_t size, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaFreeAsync(void* devPtr, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolSetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolGetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolSetAccess(cudaMemPool_t memPool, const cudaMemAccessDesc* descList, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolGetAccess(cudaMemAccessFlags* flags, cudaMemPool_t memPool, cudaMemLocation* location) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolCreate(cudaMemPool_t* memPool, const cudaMemPoolProps* poolProps) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolDestroy(cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetDefaultMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemGetMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemSetMemPool(cudaMemLocation* location, cudaMemAllocationType typename, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMallocFromPoolAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolExportToShareableHandle(void* shareableHandle, cudaMemPool_t memPool, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolImportFromShareableHandle(cudaMemPool_t* memPool, void* shareableHandle, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolExportPointer(cudaMemPoolPtrExportData* exportData, void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaMemPoolImportPointer(void** ptr, cudaMemPool_t memPool, cudaMemPoolPtrExportData* exportData) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaPointerGetAttributes(cudaPointerAttributes* attributes, const void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceCanAccessPeer(int* canAccessPeer, int device, int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceDisablePeerAccess(int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsMapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsSubResourceGetMappedArray(cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetChannelDesc(cudaChannelFormatDesc* desc, cudaArray_const_t array) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaChannelFormatDesc _cudaCreateChannelDesc(int x, int y, int z, int w, cudaChannelFormatKind f) except* nogil - -cdef cudaError_t _cudaCreateTextureObject(cudaTextureObject_t* pTexObject, const cudaResourceDesc* pResDesc, const cudaTextureDesc* pTexDesc, const cudaResourceViewDesc* pResViewDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroyTextureObject(cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectResourceDesc(cudaResourceDesc* pResDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectTextureDesc(cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetTextureObjectResourceViewDesc(cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaCreateSurfaceObject(cudaSurfaceObject_t* pSurfObject, const cudaResourceDesc* pResDesc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetSurfaceObjectResourceDesc(cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDriverGetVersion(int* driverVersion) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaRuntimeGetVersion(int* runtimeVersion) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsRegisterCallback(cudaLogsCallback_t callbackFunc, void* userData, cudaLogsCallbackHandle* callback_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsUnregisterCallback(cudaLogsCallbackHandle callback) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsCurrent(cudaLogIterator* iterator_out, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsDumpToFile(cudaLogIterator* iterator, const char* pathToFile, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLogsDumpToMemory(cudaLogIterator* iterator, char* buffer, size_t* size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphCreate(cudaGraph_t* pGraph, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddKernelNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeGetParams(cudaGraphNode_t node, cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeCopyAttributes(cudaGraphNode_t hDst, cudaGraphNode_t hSrc) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeGetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, cudaKernelNodeAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphKernelNodeSetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, const cudaKernelNodeAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemcpyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemcpy3DParms* pCopyParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemcpyNode1D(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams1D(cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemsetNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemsetParams* pMemsetParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddHostNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphHostNodeGetParams(cudaGraphNode_t node, cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphHostNodeSetParams(cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddChildGraphNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEmptyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEventRecordNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddEventWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreSignalNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreWaitNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemAllocNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaMemAllocNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, cudaMemAllocNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddMemFreeNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dptr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void* dptr_out) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGraphMemTrim(int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceSetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphClone(cudaGraph_t* pGraphClone, cudaGraph_t originalGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeFindInClone(cudaGraphNode_t* pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetType(cudaGraphNode_t node, cudaGraphNodeType* pType) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetContainingGraph(cudaGraphNode_t hNode, cudaGraph_t* phGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetLocalId(cudaGraphNode_t hNode, unsigned int* nodeId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetToolsId(cudaGraphNode_t hNode, unsigned long long* toolsNodeId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetId(cudaGraph_t hGraph, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecGetId(cudaGraphExec_t hGraphExec, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t* nodes, size_t* numNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t* pRootNodes, size_t* pNumRootNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t* from_, cudaGraphNode_t* to, cudaGraphEdgeData* edgeData, size_t* numEdges) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t* pDependencies, cudaGraphEdgeData* edgeData, size_t* pNumDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t* pDependentNodes, cudaGraphEdgeData* edgeData, size_t* pNumDependentNodes) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDestroyNode(cudaGraphNode_t node) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiate(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiateWithFlags(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphInstantiateWithParams(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, cudaGraphInstantiateParams* instantiateParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecGetFlags(cudaGraphExec_t graphExec, unsigned long long* flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams1D(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int* isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphExecUpdateResultInfo* resultInfo) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecDestroy(cudaGraphExec_t graphExec) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDestroy(cudaGraph_t graph) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphDebugDotPrint(cudaGraph_t graph, const char* path, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectCreate(cudaUserObject_t* object_out, void* ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectRetain(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaUserObjectRelease(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphAddNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeSetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphNodeGetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphExecNodeSetParams(cudaGraphExec_t graphExec, cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphConditionalHandleCreate(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGraphConditionalHandleCreate_v2(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, cudaExecutionContext_t ctx, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDriverEntryPoint(const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetDriverEntryPointByVersion(const char* symbol, void** funcPtr, unsigned int cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryLoadData(cudaLibrary_t* library, const void* code, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryLoadFromFile(cudaLibrary_t* library, const char* fileName, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryUnload(cudaLibrary_t library) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetKernel(cudaKernel_t* pKernel, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetGlobal(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetManaged(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetUnifiedFunction(void** fptr, cudaLibrary_t library, const char* symbol) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryGetKernelCount(unsigned int* count, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaLibraryEnumerateKernels(cudaKernel_t* kernels, unsigned int numKernels, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaKernelSetAttributeForDevice(cudaKernel_t kernel, cudaFuncAttribute attr, int value, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetDevResource(int device, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevSmResourceSplitByCount(cudaDevResource* result, unsigned int* nbGroups, const cudaDevResource* input, cudaDevResource* remaining, unsigned int flags, unsigned int minCount) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevSmResourceSplit(cudaDevResource* result, unsigned int nbGroups, const cudaDevResource* input, cudaDevResource* remainder, unsigned int flags, cudaDevSmResourceGroupParams* groupParams) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDevResourceGenerateDesc(cudaDevResourceDesc_t* phDesc, cudaDevResource* resources, unsigned int nbResources) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGreenCtxCreate(cudaExecutionContext_t* phCtx, cudaDevResourceDesc_t desc, int device, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxDestroy(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetDevResource(cudaExecutionContext_t ctx, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetDevice(int* device, cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxGetId(cudaExecutionContext_t ctx, unsigned long long* ctxId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxStreamCreate(cudaStream_t* phStream, cudaExecutionContext_t ctx, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxSynchronize(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaStreamGetDevResource(cudaStream_t hStream, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxRecordEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaExecutionCtxWaitEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaDeviceGetExecutionCtx(cudaExecutionContext_t* ctx, int device) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetExportTable(const void** ppExportTable, const cudaUUID_t* pExportTableId) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaGetKernel(cudaKernel_t* kernelPtr, const void* entryFuncAddr) except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaPitchedPtr _make_cudaPitchedPtr(void* d, size_t p, size_t xsz, size_t ysz) except* nogil - -cdef cudaPos _make_cudaPos(size_t x, size_t y, size_t z) except* nogil - -cdef cudaExtent _make_cudaExtent(size_t w, size_t h, size_t d) except* nogil - -cdef cudaError_t _cudaProfilerStart() except ?cudaErrorCallRequiresNewerDriver nogil - -cdef cudaError_t _cudaProfilerStop() except ?cudaErrorCallRequiresNewerDriver nogil diff --git a/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pyx b/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pyx deleted file mode 100644 index 147db4b181b..00000000000 --- a/cuda_bindings/cuda/bindings/_bindings/cyruntime_ptds.pyx +++ /dev/null @@ -1,975 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. -cdef extern from "": - """ - #define CUDA_API_PER_THREAD_DEFAULT_STREAM - """ - -include "../cyruntime_functions.pxi" - -cimport cython - -cdef cudaError_t _cudaDeviceReset() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceReset() - -cdef cudaError_t _cudaDeviceSynchronize() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSynchronize() - -cdef cudaError_t _cudaDeviceSetLimit(cudaLimit limit, size_t value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSetLimit(limit, value) - -cdef cudaError_t _cudaDeviceGetLimit(size_t* pValue, cudaLimit limit) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetLimit(pValue, limit) - -cdef cudaError_t _cudaDeviceGetTexture1DLinearMaxWidth(size_t* maxWidthInElements, const cudaChannelFormatDesc* fmtDesc, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetTexture1DLinearMaxWidth(maxWidthInElements, fmtDesc, device) - -cdef cudaError_t _cudaDeviceGetCacheConfig(cudaFuncCache* pCacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetCacheConfig(pCacheConfig) - -cdef cudaError_t _cudaDeviceGetStreamPriorityRange(int* leastPriority, int* greatestPriority) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetStreamPriorityRange(leastPriority, greatestPriority) - -cdef cudaError_t _cudaDeviceSetCacheConfig(cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSetCacheConfig(cacheConfig) - -cdef cudaError_t _cudaDeviceGetByPCIBusId(int* device, const char* pciBusId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetByPCIBusId(device, pciBusId) - -cdef cudaError_t _cudaDeviceGetPCIBusId(char* pciBusId, int length, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetPCIBusId(pciBusId, length, device) - -cdef cudaError_t _cudaIpcGetEventHandle(cudaIpcEventHandle_t* handle, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaIpcGetEventHandle(handle, event) - -cdef cudaError_t _cudaIpcOpenEventHandle(cudaEvent_t* event, cudaIpcEventHandle_t handle) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaIpcOpenEventHandle(event, handle) - -cdef cudaError_t _cudaIpcGetMemHandle(cudaIpcMemHandle_t* handle, void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaIpcGetMemHandle(handle, devPtr) - -cdef cudaError_t _cudaIpcOpenMemHandle(void** devPtr, cudaIpcMemHandle_t handle, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaIpcOpenMemHandle(devPtr, handle, flags) - -cdef cudaError_t _cudaIpcCloseMemHandle(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaIpcCloseMemHandle(devPtr) - -cdef cudaError_t _cudaDeviceFlushGPUDirectRDMAWrites(cudaFlushGPUDirectRDMAWritesTarget target, cudaFlushGPUDirectRDMAWritesScope scope) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceFlushGPUDirectRDMAWrites(target, scope) - -cdef cudaError_t _cudaDeviceRegisterAsyncNotification(int device, cudaAsyncCallback callbackFunc, void* userData, cudaAsyncCallbackHandle_t* callback) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceRegisterAsyncNotification(device, callbackFunc, userData, callback) - -cdef cudaError_t _cudaDeviceUnregisterAsyncNotification(int device, cudaAsyncCallbackHandle_t callback) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceUnregisterAsyncNotification(device, callback) - -cdef cudaError_t _cudaDeviceGetSharedMemConfig(cudaSharedMemConfig* pConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetSharedMemConfig(pConfig) - -cdef cudaError_t _cudaDeviceSetSharedMemConfig(cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSetSharedMemConfig(config) - -cdef cudaError_t _cudaGetLastError() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetLastError() - -cdef cudaError_t _cudaPeekAtLastError() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaPeekAtLastError() - -cdef const char* _cudaGetErrorName(cudaError_t error) except ?NULL nogil: - return cudaGetErrorName(error) - -cdef const char* _cudaGetErrorString(cudaError_t error) except ?NULL nogil: - return cudaGetErrorString(error) - -cdef cudaError_t _cudaGetDeviceCount(int* count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDeviceCount(count) - -cdef cudaError_t _cudaGetDeviceProperties(cudaDeviceProp* prop, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDeviceProperties(prop, device) - -cdef cudaError_t _cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetAttribute(value, attr, device) - -cdef cudaError_t _cudaDeviceGetHostAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetHostAtomicCapabilities(capabilities, operations, count, device) - -cdef cudaError_t _cudaDeviceGetDefaultMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetDefaultMemPool(memPool, device) - -cdef cudaError_t _cudaDeviceSetMemPool(int device, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSetMemPool(device, memPool) - -cdef cudaError_t _cudaDeviceGetMemPool(cudaMemPool_t* memPool, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetMemPool(memPool, device) - -cdef cudaError_t _cudaDeviceGetNvSciSyncAttributes(void* nvSciSyncAttrList, int device, int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetNvSciSyncAttributes(nvSciSyncAttrList, device, flags) - -cdef cudaError_t _cudaDeviceGetP2PAttribute(int* value, cudaDeviceP2PAttr attr, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetP2PAttribute(value, attr, srcDevice, dstDevice) - -cdef cudaError_t _cudaDeviceGetP2PAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int srcDevice, int dstDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetP2PAtomicCapabilities(capabilities, operations, count, srcDevice, dstDevice) - -cdef cudaError_t _cudaChooseDevice(int* device, const cudaDeviceProp* prop) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaChooseDevice(device, prop) - -cdef cudaError_t _cudaInitDevice(int device, unsigned int deviceFlags, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaInitDevice(device, deviceFlags, flags) - -cdef cudaError_t _cudaSetDevice(int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaSetDevice(device) - -cdef cudaError_t _cudaGetDevice(int* device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDevice(device) - -cdef cudaError_t _cudaSetDeviceFlags(unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaSetDeviceFlags(flags) - -cdef cudaError_t _cudaGetDeviceFlags(unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDeviceFlags(flags) - -cdef cudaError_t _cudaStreamCreate(cudaStream_t* pStream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamCreate(pStream) - -cdef cudaError_t _cudaStreamCreateWithFlags(cudaStream_t* pStream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamCreateWithFlags(pStream, flags) - -cdef cudaError_t _cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamCreateWithPriority(pStream, flags, priority) - -cdef cudaError_t _cudaStreamGetPriority(cudaStream_t hStream, int* priority) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetPriority(hStream, priority) - -cdef cudaError_t _cudaStreamGetFlags(cudaStream_t hStream, unsigned int* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetFlags(hStream, flags) - -cdef cudaError_t _cudaStreamGetId(cudaStream_t hStream, unsigned long long* streamId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetId(hStream, streamId) - -cdef cudaError_t _cudaStreamGetDevice(cudaStream_t hStream, int* device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetDevice(hStream, device) - -cdef cudaError_t _cudaCtxResetPersistingL2Cache() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaCtxResetPersistingL2Cache() - -cdef cudaError_t _cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamCopyAttributes(dst, src) - -cdef cudaError_t _cudaStreamGetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, cudaStreamAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetAttribute(hStream, attr, value_out) - -cdef cudaError_t _cudaStreamSetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, const cudaStreamAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamSetAttribute(hStream, attr, value) - -cdef cudaError_t _cudaStreamDestroy(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamDestroy(stream) - -cdef cudaError_t _cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamWaitEvent(stream, event, flags) - -cdef cudaError_t _cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void* userData, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamAddCallback(stream, callback, userData, flags) - -cdef cudaError_t _cudaStreamSynchronize(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamSynchronize(stream) - -cdef cudaError_t _cudaStreamQuery(cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamQuery(stream) - -cdef cudaError_t _cudaStreamAttachMemAsync(cudaStream_t stream, void* devPtr, size_t length, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamAttachMemAsync(stream, devPtr, length, flags) - -cdef cudaError_t _cudaStreamBeginCapture(cudaStream_t stream, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamBeginCapture(stream, mode) - -cdef cudaError_t _cudaStreamBeginRecaptureToGraph(cudaStream_t stream, cudaStreamCaptureMode mode, cudaGraph_t graph, cudaGraphRecaptureCallbackData* callbackData) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamBeginRecaptureToGraph(stream, mode, graph, callbackData) - -cdef cudaError_t _cudaStreamBeginCaptureToGraph(cudaStream_t stream, cudaGraph_t graph, const cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaStreamCaptureMode mode) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamBeginCaptureToGraph(stream, graph, dependencies, dependencyData, numDependencies, mode) - -cdef cudaError_t _cudaThreadExchangeStreamCaptureMode(cudaStreamCaptureMode* mode) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaThreadExchangeStreamCaptureMode(mode) - -cdef cudaError_t _cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamEndCapture(stream, pGraph) - -cdef cudaError_t _cudaStreamIsCapturing(cudaStream_t stream, cudaStreamCaptureStatus* pCaptureStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamIsCapturing(stream, pCaptureStatus) - -cdef cudaError_t _cudaStreamGetCaptureInfo(cudaStream_t stream, cudaStreamCaptureStatus* captureStatus_out, unsigned long long* id_out, cudaGraph_t* graph_out, const cudaGraphNode_t** dependencies_out, const cudaGraphEdgeData** edgeData_out, size_t* numDependencies_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetCaptureInfo(stream, captureStatus_out, id_out, graph_out, dependencies_out, edgeData_out, numDependencies_out) - -cdef cudaError_t _cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamUpdateCaptureDependencies(stream, dependencies, dependencyData, numDependencies, flags) - -cdef cudaError_t _cudaEventCreate(cudaEvent_t* event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventCreate(event) - -cdef cudaError_t _cudaEventCreateWithFlags(cudaEvent_t* event, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventCreateWithFlags(event, flags) - -cdef cudaError_t _cudaEventRecord(cudaEvent_t event, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventRecord(event, stream) - -cdef cudaError_t _cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventRecordWithFlags(event, stream, flags) - -cdef cudaError_t _cudaEventQuery(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventQuery(event) - -cdef cudaError_t _cudaEventSynchronize(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventSynchronize(event) - -cdef cudaError_t _cudaEventDestroy(cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventDestroy(event) - -cdef cudaError_t _cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t end) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaEventElapsedTime(ms, start, end) - -cdef cudaError_t _cudaImportExternalMemory(cudaExternalMemory_t* extMem_out, const cudaExternalMemoryHandleDesc* memHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaImportExternalMemory(extMem_out, memHandleDesc) - -cdef cudaError_t _cudaExternalMemoryGetMappedBuffer(void** devPtr, cudaExternalMemory_t extMem, const cudaExternalMemoryBufferDesc* bufferDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExternalMemoryGetMappedBuffer(devPtr, extMem, bufferDesc) - -cdef cudaError_t _cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t* mipmap, cudaExternalMemory_t extMem, const cudaExternalMemoryMipmappedArrayDesc* mipmapDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExternalMemoryGetMappedMipmappedArray(mipmap, extMem, mipmapDesc) - -cdef cudaError_t _cudaDestroyExternalMemory(cudaExternalMemory_t extMem) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDestroyExternalMemory(extMem) - -cdef cudaError_t _cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, const cudaExternalSemaphoreHandleDesc* semHandleDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaImportExternalSemaphore(extSem_out, semHandleDesc) - -cdef cudaError_t _cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreSignalParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaSignalExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - -cdef cudaError_t _cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreWaitParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaWaitExternalSemaphoresAsync(extSemArray, paramsArray, numExtSems, stream) - -cdef cudaError_t _cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDestroyExternalSemaphore(extSem) - -cdef cudaError_t _cudaFuncSetCacheConfig(const void* func, cudaFuncCache cacheConfig) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFuncSetCacheConfig(func, cacheConfig) - -cdef cudaError_t _cudaFuncGetAttributes(cudaFuncAttributes* attr, const void* func) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFuncGetAttributes(attr, func) - -cdef cudaError_t _cudaFuncSetAttribute(const void* func, cudaFuncAttribute attr, int value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFuncSetAttribute(func, attr, value) - -cdef cudaError_t _cudaFuncGetParamCount(const void* func, size_t* paramCount) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFuncGetParamCount(func, paramCount) - -cdef cudaError_t _cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void* userData) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLaunchHostFunc(stream, fn, userData) - -cdef cudaError_t _cudaLaunchHostFunc_v2(cudaStream_t stream, cudaHostFn_t fn, void* userData, unsigned int syncMode) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLaunchHostFunc_v2(stream, fn, userData, syncMode) - -cdef cudaError_t _cudaFuncSetSharedMemConfig(const void* func, cudaSharedMemConfig config) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFuncSetSharedMemConfig(func, config) - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaOccupancyMaxActiveBlocksPerMultiprocessor(numBlocks, func, blockSize, dynamicSMemSize) - -cdef cudaError_t _cudaOccupancyAvailableDynamicSMemPerBlock(size_t* dynamicSmemSize, const void* func, int numBlocks, int blockSize) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaOccupancyAvailableDynamicSMemPerBlock(dynamicSmemSize, func, numBlocks, blockSize) - -cdef cudaError_t _cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(numBlocks, func, blockSize, dynamicSMemSize, flags) - -cdef cudaError_t _cudaMallocManaged(void** devPtr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocManaged(devPtr, size, flags) - -cdef cudaError_t _cudaMalloc(void** devPtr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMalloc(devPtr, size) - -cdef cudaError_t _cudaMallocHost(void** ptr, size_t size) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocHost(ptr, size) - -cdef cudaError_t _cudaMallocPitch(void** devPtr, size_t* pitch, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocPitch(devPtr, pitch, width, height) - -cdef cudaError_t _cudaMallocArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, size_t width, size_t height, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocArray(array, desc, width, height, flags) - -cdef cudaError_t _cudaFree(void* devPtr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFree(devPtr) - -cdef cudaError_t _cudaFreeHost(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFreeHost(ptr) - -cdef cudaError_t _cudaFreeArray(cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFreeArray(array) - -cdef cudaError_t _cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFreeMipmappedArray(mipmappedArray) - -cdef cudaError_t _cudaHostAlloc(void** pHost, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaHostAlloc(pHost, size, flags) - -cdef cudaError_t _cudaHostRegister(void* ptr, size_t size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaHostRegister(ptr, size, flags) - -cdef cudaError_t _cudaHostUnregister(void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaHostUnregister(ptr) - -cdef cudaError_t _cudaHostGetDevicePointer(void** pDevice, void* pHost, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaHostGetDevicePointer(pDevice, pHost, flags) - -cdef cudaError_t _cudaHostGetFlags(unsigned int* pFlags, void* pHost) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaHostGetFlags(pFlags, pHost) - -cdef cudaError_t _cudaMalloc3D(cudaPitchedPtr* pitchedDevPtr, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMalloc3D(pitchedDevPtr, extent) - -cdef cudaError_t _cudaMalloc3DArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMalloc3DArray(array, desc, extent, flags) - -cdef cudaError_t _cudaMallocMipmappedArray(cudaMipmappedArray_t* mipmappedArray, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int numLevels, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocMipmappedArray(mipmappedArray, desc, extent, numLevels, flags) - -cdef cudaError_t _cudaGetMipmappedArrayLevel(cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetMipmappedArrayLevel(levelArray, mipmappedArray, level) - -cdef cudaError_t _cudaMemcpy3D(const cudaMemcpy3DParms* p) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3D(p) - -cdef cudaError_t _cudaMemcpy3DPeer(const cudaMemcpy3DPeerParms* p) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3DPeer(p) - -cdef cudaError_t _cudaMemcpy3DAsync(const cudaMemcpy3DParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3DAsync(p, stream) - -cdef cudaError_t _cudaMemcpy3DPeerAsync(const cudaMemcpy3DPeerParms* p, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3DPeerAsync(p, stream) - -cdef cudaError_t _cudaMemGetInfo(size_t* free, size_t* total) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemGetInfo(free, total) - -cdef cudaError_t _cudaArrayGetInfo(cudaChannelFormatDesc* desc, cudaExtent* extent, unsigned int* flags, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaArrayGetInfo(desc, extent, flags, array) - -cdef cudaError_t _cudaArrayGetPlane(cudaArray_t* pPlaneArray, cudaArray_t hArray, unsigned int planeIdx) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaArrayGetPlane(pPlaneArray, hArray, planeIdx) - -cdef cudaError_t _cudaArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaArray_t array, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaArrayGetMemoryRequirements(memoryRequirements, array, device) - -cdef cudaError_t _cudaMipmappedArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaMipmappedArray_t mipmap, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMipmappedArrayGetMemoryRequirements(memoryRequirements, mipmap, device) - -cdef cudaError_t _cudaArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaArray_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaArrayGetSparseProperties(sparseProperties, array) - -cdef cudaError_t _cudaMipmappedArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaMipmappedArray_t mipmap) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMipmappedArrayGetSparseProperties(sparseProperties, mipmap) - -cdef cudaError_t _cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy(dst, src, count, kind) - -cdef cudaError_t _cudaMemcpyPeer(void* dst, int dstDevice, const void* src, int srcDevice, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyPeer(dst, dstDevice, src, srcDevice, count) - -cdef cudaError_t _cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2D(dst, dpitch, src, spitch, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DToArray(dst, wOffset, hOffset, src, spitch, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DFromArray(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DFromArray(dst, dpitch, src, wOffset, hOffset, width, height, kind) - -cdef cudaError_t _cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, width, height, kind) - -cdef cudaError_t _cudaMemcpyAsync(void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyAsync(dst, src, count, kind, stream) - -cdef cudaError_t _cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyPeerAsync(dst, dstDevice, src, srcDevice, count, stream) - -cdef cudaError_t _cudaMemcpyBatchAsync(const void** dsts, const void** srcs, const size_t* sizes, size_t count, cudaMemcpyAttributes* attrs, size_t* attrsIdxs, size_t numAttrs, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyBatchAsync(dsts, srcs, sizes, count, attrs, attrsIdxs, numAttrs, stream) - -cdef cudaError_t _cudaMemcpy3DBatchAsync(size_t numOps, cudaMemcpy3DBatchOp* opList, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3DBatchAsync(numOps, opList, flags, stream) - -cdef cudaError_t _cudaMemcpyWithAttributesAsync(void* dst, const void* src, size_t size, cudaMemcpyAttributes* attr, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyWithAttributesAsync(dst, src, size, attr, stream) - -cdef cudaError_t _cudaMemcpy3DWithAttributesAsync(cudaMemcpy3DBatchOp* op, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy3DWithAttributesAsync(op, flags, stream) - -cdef cudaError_t _cudaMemcpy2DAsync(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DAsync(dst, dpitch, src, spitch, width, height, kind, stream) - -cdef cudaError_t _cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DToArrayAsync(dst, wOffset, hOffset, src, spitch, width, height, kind, stream) - -cdef cudaError_t _cudaMemcpy2DFromArrayAsync(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpy2DFromArrayAsync(dst, dpitch, src, wOffset, hOffset, width, height, kind, stream) - -cdef cudaError_t _cudaMemset(void* devPtr, int value, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemset(devPtr, value, count) - -cdef cudaError_t _cudaMemset2D(void* devPtr, size_t pitch, int value, size_t width, size_t height) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemset2D(devPtr, pitch, value, width, height) - -cdef cudaError_t _cudaMemset3D(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemset3D(pitchedDevPtr, value, extent) - -cdef cudaError_t _cudaMemsetAsync(void* devPtr, int value, size_t count, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemsetAsync(devPtr, value, count, stream) - -cdef cudaError_t _cudaMemset2DAsync(void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemset2DAsync(devPtr, pitch, value, width, height, stream) - -cdef cudaError_t _cudaMemset3DAsync(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemset3DAsync(pitchedDevPtr, value, extent, stream) - -cdef cudaError_t _cudaMemPrefetchAsync(const void* devPtr, size_t count, cudaMemLocation location, unsigned int flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPrefetchAsync(devPtr, count, location, flags, stream) - -cdef cudaError_t _cudaMemPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - -cdef cudaError_t _cudaMemDiscardBatchAsync(void** dptrs, size_t* sizes, size_t count, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemDiscardBatchAsync(dptrs, sizes, count, flags, stream) - -cdef cudaError_t _cudaMemDiscardAndPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemDiscardAndPrefetchBatchAsync(dptrs, sizes, count, prefetchLocs, prefetchLocIdxs, numPrefetchLocs, flags, stream) - -cdef cudaError_t _cudaMemAdvise(const void* devPtr, size_t count, cudaMemoryAdvise advice, cudaMemLocation location) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemAdvise(devPtr, count, advice, location) - -cdef cudaError_t _cudaMemRangeGetAttribute(void* data, size_t dataSize, cudaMemRangeAttribute attribute, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemRangeGetAttribute(data, dataSize, attribute, devPtr, count) - -cdef cudaError_t _cudaMemRangeGetAttributes(void** data, size_t* dataSizes, cudaMemRangeAttribute* attributes, size_t numAttributes, const void* devPtr, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemRangeGetAttributes(data, dataSizes, attributes, numAttributes, devPtr, count) - -cdef cudaError_t _cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyToArray(dst, wOffset, hOffset, src, count, kind) - -cdef cudaError_t _cudaMemcpyFromArray(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyFromArray(dst, src, wOffset, hOffset, count, kind) - -cdef cudaError_t _cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyArrayToArray(dst, wOffsetDst, hOffsetDst, src, wOffsetSrc, hOffsetSrc, count, kind) - -cdef cudaError_t _cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyToArrayAsync(dst, wOffset, hOffset, src, count, kind, stream) - -cdef cudaError_t _cudaMemcpyFromArrayAsync(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemcpyFromArrayAsync(dst, src, wOffset, hOffset, count, kind, stream) - -cdef cudaError_t _cudaMallocAsync(void** devPtr, size_t size, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocAsync(devPtr, size, hStream) - -cdef cudaError_t _cudaFreeAsync(void* devPtr, cudaStream_t hStream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaFreeAsync(devPtr, hStream) - -cdef cudaError_t _cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolTrimTo(memPool, minBytesToKeep) - -cdef cudaError_t _cudaMemPoolSetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolSetAttribute(memPool, attr, value) - -cdef cudaError_t _cudaMemPoolGetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolGetAttribute(memPool, attr, value) - -cdef cudaError_t _cudaMemPoolSetAccess(cudaMemPool_t memPool, const cudaMemAccessDesc* descList, size_t count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolSetAccess(memPool, descList, count) - -cdef cudaError_t _cudaMemPoolGetAccess(cudaMemAccessFlags* flags, cudaMemPool_t memPool, cudaMemLocation* location) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolGetAccess(flags, memPool, location) - -cdef cudaError_t _cudaMemPoolCreate(cudaMemPool_t* memPool, const cudaMemPoolProps* poolProps) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolCreate(memPool, poolProps) - -cdef cudaError_t _cudaMemPoolDestroy(cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolDestroy(memPool) - -cdef cudaError_t _cudaMemGetDefaultMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemGetDefaultMemPool(memPool, location, typename) - -cdef cudaError_t _cudaMemGetMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemGetMemPool(memPool, location, typename) - -cdef cudaError_t _cudaMemSetMemPool(cudaMemLocation* location, cudaMemAllocationType typename, cudaMemPool_t memPool) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemSetMemPool(location, typename, memPool) - -cdef cudaError_t _cudaMallocFromPoolAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMallocFromPoolAsync(ptr, size, memPool, stream) - -cdef cudaError_t _cudaMemPoolExportToShareableHandle(void* shareableHandle, cudaMemPool_t memPool, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolExportToShareableHandle(shareableHandle, memPool, handleType, flags) - -cdef cudaError_t _cudaMemPoolImportFromShareableHandle(cudaMemPool_t* memPool, void* shareableHandle, cudaMemAllocationHandleType handleType, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolImportFromShareableHandle(memPool, shareableHandle, handleType, flags) - -cdef cudaError_t _cudaMemPoolExportPointer(cudaMemPoolPtrExportData* exportData, void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolExportPointer(exportData, ptr) - -cdef cudaError_t _cudaMemPoolImportPointer(void** ptr, cudaMemPool_t memPool, cudaMemPoolPtrExportData* exportData) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaMemPoolImportPointer(ptr, memPool, exportData) - -cdef cudaError_t _cudaPointerGetAttributes(cudaPointerAttributes* attributes, const void* ptr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaPointerGetAttributes(attributes, ptr) - -cdef cudaError_t _cudaDeviceCanAccessPeer(int* canAccessPeer, int device, int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceCanAccessPeer(canAccessPeer, device, peerDevice) - -cdef cudaError_t _cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceEnablePeerAccess(peerDevice, flags) - -cdef cudaError_t _cudaDeviceDisablePeerAccess(int peerDevice) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceDisablePeerAccess(peerDevice) - -cdef cudaError_t _cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsUnregisterResource(resource) - -cdef cudaError_t _cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsResourceSetMapFlags(resource, flags) - -cdef cudaError_t _cudaGraphicsMapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsMapResources(count, resources, stream) - -cdef cudaError_t _cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsUnmapResources(count, resources, stream) - -cdef cudaError_t _cudaGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsResourceGetMappedPointer(devPtr, size, resource) - -cdef cudaError_t _cudaGraphicsSubResourceGetMappedArray(cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsSubResourceGetMappedArray(array, resource, arrayIndex, mipLevel) - -cdef cudaError_t _cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphicsResourceGetMappedMipmappedArray(mipmappedArray, resource) - -cdef cudaError_t _cudaGetChannelDesc(cudaChannelFormatDesc* desc, cudaArray_const_t array) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetChannelDesc(desc, array) -@cython.show_performance_hints(False) -cdef cudaChannelFormatDesc _cudaCreateChannelDesc(int x, int y, int z, int w, cudaChannelFormatKind f) except* nogil: - return cudaCreateChannelDesc(x, y, z, w, f) - -cdef cudaError_t _cudaCreateTextureObject(cudaTextureObject_t* pTexObject, const cudaResourceDesc* pResDesc, const cudaTextureDesc* pTexDesc, const cudaResourceViewDesc* pResViewDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaCreateTextureObject(pTexObject, pResDesc, pTexDesc, pResViewDesc) - -cdef cudaError_t _cudaDestroyTextureObject(cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDestroyTextureObject(texObject) - -cdef cudaError_t _cudaGetTextureObjectResourceDesc(cudaResourceDesc* pResDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetTextureObjectResourceDesc(pResDesc, texObject) - -cdef cudaError_t _cudaGetTextureObjectTextureDesc(cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetTextureObjectTextureDesc(pTexDesc, texObject) - -cdef cudaError_t _cudaGetTextureObjectResourceViewDesc(cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetTextureObjectResourceViewDesc(pResViewDesc, texObject) - -cdef cudaError_t _cudaCreateSurfaceObject(cudaSurfaceObject_t* pSurfObject, const cudaResourceDesc* pResDesc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaCreateSurfaceObject(pSurfObject, pResDesc) - -cdef cudaError_t _cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDestroySurfaceObject(surfObject) - -cdef cudaError_t _cudaGetSurfaceObjectResourceDesc(cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetSurfaceObjectResourceDesc(pResDesc, surfObject) - -cdef cudaError_t _cudaDriverGetVersion(int* driverVersion) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDriverGetVersion(driverVersion) - -cdef cudaError_t _cudaRuntimeGetVersion(int* runtimeVersion) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaRuntimeGetVersion(runtimeVersion) - -cdef cudaError_t _cudaLogsRegisterCallback(cudaLogsCallback_t callbackFunc, void* userData, cudaLogsCallbackHandle* callback_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLogsRegisterCallback(callbackFunc, userData, callback_out) - -cdef cudaError_t _cudaLogsUnregisterCallback(cudaLogsCallbackHandle callback) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLogsUnregisterCallback(callback) - -cdef cudaError_t _cudaLogsCurrent(cudaLogIterator* iterator_out, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLogsCurrent(iterator_out, flags) - -cdef cudaError_t _cudaLogsDumpToFile(cudaLogIterator* iterator, const char* pathToFile, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLogsDumpToFile(iterator, pathToFile, flags) - -cdef cudaError_t _cudaLogsDumpToMemory(cudaLogIterator* iterator, char* buffer, size_t* size, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLogsDumpToMemory(iterator, buffer, size, flags) - -cdef cudaError_t _cudaGraphCreate(cudaGraph_t* pGraph, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphCreate(pGraph, flags) - -cdef cudaError_t _cudaGraphAddKernelNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddKernelNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeGetParams(cudaGraphNode_t node, cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphKernelNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphKernelNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphKernelNodeCopyAttributes(cudaGraphNode_t hDst, cudaGraphNode_t hSrc) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphKernelNodeCopyAttributes(hDst, hSrc) - -cdef cudaError_t _cudaGraphKernelNodeGetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, cudaKernelNodeAttrValue* value_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphKernelNodeGetAttribute(hNode, attr, value_out) - -cdef cudaError_t _cudaGraphKernelNodeSetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, const cudaKernelNodeAttrValue* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphKernelNodeSetAttribute(hNode, attr, value) - -cdef cudaError_t _cudaGraphAddMemcpyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemcpy3DParms* pCopyParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddMemcpyNode(pGraphNode, graph, pDependencies, numDependencies, pCopyParams) - -cdef cudaError_t _cudaGraphAddMemcpyNode1D(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddMemcpyNode1D(pGraphNode, graph, pDependencies, numDependencies, dst, src, count, kind) - -cdef cudaError_t _cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemcpyNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemcpyNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemcpyNodeSetParams1D(cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemcpyNodeSetParams1D(node, dst, src, count, kind) - -cdef cudaError_t _cudaGraphAddMemsetNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemsetParams* pMemsetParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddMemsetNode(pGraphNode, graph, pDependencies, numDependencies, pMemsetParams) - -cdef cudaError_t _cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemsetNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemsetNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphAddHostNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddHostNode(pGraphNode, graph, pDependencies, numDependencies, pNodeParams) - -cdef cudaError_t _cudaGraphHostNodeGetParams(cudaGraphNode_t node, cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphHostNodeGetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphHostNodeSetParams(cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphHostNodeSetParams(node, pNodeParams) - -cdef cudaError_t _cudaGraphAddChildGraphNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddChildGraphNode(pGraphNode, graph, pDependencies, numDependencies, childGraph) - -cdef cudaError_t _cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t* pGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphChildGraphNodeGetGraph(node, pGraph) - -cdef cudaError_t _cudaGraphAddEmptyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddEmptyNode(pGraphNode, graph, pDependencies, numDependencies) - -cdef cudaError_t _cudaGraphAddEventRecordNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddEventRecordNode(pGraphNode, graph, pDependencies, numDependencies, event) - -cdef cudaError_t _cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphEventRecordNodeGetEvent(node, event_out) - -cdef cudaError_t _cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphEventRecordNodeSetEvent(node, event) - -cdef cudaError_t _cudaGraphAddEventWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddEventWaitNode(pGraphNode, graph, pDependencies, numDependencies, event) - -cdef cudaError_t _cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphEventWaitNodeGetEvent(node, event_out) - -cdef cudaError_t _cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphEventWaitNodeSetEvent(node, event) - -cdef cudaError_t _cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddExternalSemaphoresSignalNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreSignalNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExternalSemaphoresSignalNodeGetParams(hNode, params_out) - -cdef cudaError_t _cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExternalSemaphoresSignalNodeSetParams(hNode, nodeParams) - -cdef cudaError_t _cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddExternalSemaphoresWaitNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreWaitNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExternalSemaphoresWaitNodeGetParams(hNode, params_out) - -cdef cudaError_t _cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExternalSemaphoresWaitNodeSetParams(hNode, nodeParams) - -cdef cudaError_t _cudaGraphAddMemAllocNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaMemAllocNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddMemAllocNode(pGraphNode, graph, pDependencies, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, cudaMemAllocNodeParams* params_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemAllocNodeGetParams(node, params_out) - -cdef cudaError_t _cudaGraphAddMemFreeNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dptr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddMemFreeNode(pGraphNode, graph, pDependencies, numDependencies, dptr) - -cdef cudaError_t _cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void* dptr_out) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphMemFreeNodeGetParams(node, dptr_out) - -cdef cudaError_t _cudaDeviceGraphMemTrim(int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGraphMemTrim(device) - -cdef cudaError_t _cudaDeviceGetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetGraphMemAttribute(device, attr, value) - -cdef cudaError_t _cudaDeviceSetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceSetGraphMemAttribute(device, attr, value) - -cdef cudaError_t _cudaGraphClone(cudaGraph_t* pGraphClone, cudaGraph_t originalGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphClone(pGraphClone, originalGraph) - -cdef cudaError_t _cudaGraphNodeFindInClone(cudaGraphNode_t* pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeFindInClone(pNode, originalNode, clonedGraph) - -cdef cudaError_t _cudaGraphNodeGetType(cudaGraphNode_t node, cudaGraphNodeType* pType) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetType(node, pType) - -cdef cudaError_t _cudaGraphNodeGetContainingGraph(cudaGraphNode_t hNode, cudaGraph_t* phGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetContainingGraph(hNode, phGraph) - -cdef cudaError_t _cudaGraphNodeGetLocalId(cudaGraphNode_t hNode, unsigned int* nodeId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetLocalId(hNode, nodeId) - -cdef cudaError_t _cudaGraphNodeGetToolsId(cudaGraphNode_t hNode, unsigned long long* toolsNodeId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetToolsId(hNode, toolsNodeId) - -cdef cudaError_t _cudaGraphGetId(cudaGraph_t hGraph, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphGetId(hGraph, graphID) - -cdef cudaError_t _cudaGraphExecGetId(cudaGraphExec_t hGraphExec, unsigned int* graphID) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecGetId(hGraphExec, graphID) - -cdef cudaError_t _cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t* nodes, size_t* numNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphGetNodes(graph, nodes, numNodes) - -cdef cudaError_t _cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t* pRootNodes, size_t* pNumRootNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphGetRootNodes(graph, pRootNodes, pNumRootNodes) - -cdef cudaError_t _cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t* from_, cudaGraphNode_t* to, cudaGraphEdgeData* edgeData, size_t* numEdges) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphGetEdges(graph, from_, to, edgeData, numEdges) - -cdef cudaError_t _cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t* pDependencies, cudaGraphEdgeData* edgeData, size_t* pNumDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetDependencies(node, pDependencies, edgeData, pNumDependencies) - -cdef cudaError_t _cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t* pDependentNodes, cudaGraphEdgeData* edgeData, size_t* pNumDependentNodes) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetDependentNodes(node, pDependentNodes, edgeData, pNumDependentNodes) - -cdef cudaError_t _cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddDependencies(graph, from_, to, edgeData, numDependencies) - -cdef cudaError_t _cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphRemoveDependencies(graph, from_, to, edgeData, numDependencies) - -cdef cudaError_t _cudaGraphDestroyNode(cudaGraphNode_t node) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphDestroyNode(node) - -cdef cudaError_t _cudaGraphInstantiate(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphInstantiate(pGraphExec, graph, flags) - -cdef cudaError_t _cudaGraphInstantiateWithFlags(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphInstantiateWithFlags(pGraphExec, graph, flags) - -cdef cudaError_t _cudaGraphInstantiateWithParams(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, cudaGraphInstantiateParams* instantiateParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphInstantiateWithParams(pGraphExec, graph, instantiateParams) - -cdef cudaError_t _cudaGraphExecGetFlags(cudaGraphExec_t graphExec, unsigned long long* flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecGetFlags(graphExec, flags) - -cdef cudaError_t _cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecKernelNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecMemcpyNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecMemcpyNodeSetParams1D(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecMemcpyNodeSetParams1D(hGraphExec, node, dst, src, count, kind) - -cdef cudaError_t _cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecMemsetNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecHostNodeSetParams(hGraphExec, node, pNodeParams) - -cdef cudaError_t _cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecChildGraphNodeSetParams(hGraphExec, node, childGraph) - -cdef cudaError_t _cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecEventRecordNodeSetEvent(hGraphExec, hNode, event) - -cdef cudaError_t _cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecEventWaitNodeSetEvent(hGraphExec, hNode, event) - -cdef cudaError_t _cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecExternalSemaphoresSignalNodeSetParams(hGraphExec, hNode, nodeParams) - -cdef cudaError_t _cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecExternalSemaphoresWaitNodeSetParams(hGraphExec, hNode, nodeParams) - -cdef cudaError_t _cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeSetEnabled(hGraphExec, hNode, isEnabled) - -cdef cudaError_t _cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int* isEnabled) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetEnabled(hGraphExec, hNode, isEnabled) - -cdef cudaError_t _cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphExecUpdateResultInfo* resultInfo) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecUpdate(hGraphExec, hGraph, resultInfo) - -cdef cudaError_t _cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphUpload(graphExec, stream) - -cdef cudaError_t _cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphLaunch(graphExec, stream) - -cdef cudaError_t _cudaGraphExecDestroy(cudaGraphExec_t graphExec) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecDestroy(graphExec) - -cdef cudaError_t _cudaGraphDestroy(cudaGraph_t graph) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphDestroy(graph) - -cdef cudaError_t _cudaGraphDebugDotPrint(cudaGraph_t graph, const char* path, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphDebugDotPrint(graph, path, flags) - -cdef cudaError_t _cudaUserObjectCreate(cudaUserObject_t* object_out, void* ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaUserObjectCreate(object_out, ptr, destroy, initialRefcount, flags) - -cdef cudaError_t _cudaUserObjectRetain(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaUserObjectRetain(object, count) - -cdef cudaError_t _cudaUserObjectRelease(cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaUserObjectRelease(object, count) - -cdef cudaError_t _cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphRetainUserObject(graph, object, count, flags) - -cdef cudaError_t _cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphReleaseUserObject(graph, object, count) - -cdef cudaError_t _cudaGraphAddNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphAddNode(pGraphNode, graph, pDependencies, dependencyData, numDependencies, nodeParams) - -cdef cudaError_t _cudaGraphNodeSetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeSetParams(node, nodeParams) - -cdef cudaError_t _cudaGraphNodeGetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphNodeGetParams(node, nodeParams) - -cdef cudaError_t _cudaGraphExecNodeSetParams(cudaGraphExec_t graphExec, cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphExecNodeSetParams(graphExec, node, nodeParams) - -cdef cudaError_t _cudaGraphConditionalHandleCreate(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphConditionalHandleCreate(pHandle_out, graph, defaultLaunchValue, flags) - -cdef cudaError_t _cudaGraphConditionalHandleCreate_v2(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, cudaExecutionContext_t ctx, unsigned int defaultLaunchValue, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGraphConditionalHandleCreate_v2(pHandle_out, graph, ctx, defaultLaunchValue, flags) - -cdef cudaError_t _cudaGetDriverEntryPoint(const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDriverEntryPoint(symbol, funcPtr, flags, driverStatus) - -cdef cudaError_t _cudaGetDriverEntryPointByVersion(const char* symbol, void** funcPtr, unsigned int cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetDriverEntryPointByVersion(symbol, funcPtr, cudaVersion, flags, driverStatus) - -cdef cudaError_t _cudaLibraryLoadData(cudaLibrary_t* library, const void* code, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryLoadData(library, code, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - -cdef cudaError_t _cudaLibraryLoadFromFile(cudaLibrary_t* library, const char* fileName, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryLoadFromFile(library, fileName, jitOptions, jitOptionsValues, numJitOptions, libraryOptions, libraryOptionValues, numLibraryOptions) - -cdef cudaError_t _cudaLibraryUnload(cudaLibrary_t library) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryUnload(library) - -cdef cudaError_t _cudaLibraryGetKernel(cudaKernel_t* pKernel, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryGetKernel(pKernel, library, name) - -cdef cudaError_t _cudaLibraryGetGlobal(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryGetGlobal(dptr, numbytes, library, name) - -cdef cudaError_t _cudaLibraryGetManaged(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryGetManaged(dptr, numbytes, library, name) - -cdef cudaError_t _cudaLibraryGetUnifiedFunction(void** fptr, cudaLibrary_t library, const char* symbol) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryGetUnifiedFunction(fptr, library, symbol) - -cdef cudaError_t _cudaLibraryGetKernelCount(unsigned int* count, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryGetKernelCount(count, lib) - -cdef cudaError_t _cudaLibraryEnumerateKernels(cudaKernel_t* kernels, unsigned int numKernels, cudaLibrary_t lib) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaLibraryEnumerateKernels(kernels, numKernels, lib) - -cdef cudaError_t _cudaKernelSetAttributeForDevice(cudaKernel_t kernel, cudaFuncAttribute attr, int value, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaKernelSetAttributeForDevice(kernel, attr, value, device) - -cdef cudaError_t _cudaDeviceGetDevResource(int device, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetDevResource(device, resource, typename) - -cdef cudaError_t _cudaDevSmResourceSplitByCount(cudaDevResource* result, unsigned int* nbGroups, const cudaDevResource* input, cudaDevResource* remaining, unsigned int flags, unsigned int minCount) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDevSmResourceSplitByCount(result, nbGroups, input, remaining, flags, minCount) - -cdef cudaError_t _cudaDevSmResourceSplit(cudaDevResource* result, unsigned int nbGroups, const cudaDevResource* input, cudaDevResource* remainder, unsigned int flags, cudaDevSmResourceGroupParams* groupParams) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDevSmResourceSplit(result, nbGroups, input, remainder, flags, groupParams) - -cdef cudaError_t _cudaDevResourceGenerateDesc(cudaDevResourceDesc_t* phDesc, cudaDevResource* resources, unsigned int nbResources) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDevResourceGenerateDesc(phDesc, resources, nbResources) - -cdef cudaError_t _cudaGreenCtxCreate(cudaExecutionContext_t* phCtx, cudaDevResourceDesc_t desc, int device, unsigned int flags) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGreenCtxCreate(phCtx, desc, device, flags) - -cdef cudaError_t _cudaExecutionCtxDestroy(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxDestroy(ctx) - -cdef cudaError_t _cudaExecutionCtxGetDevResource(cudaExecutionContext_t ctx, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxGetDevResource(ctx, resource, typename) - -cdef cudaError_t _cudaExecutionCtxGetDevice(int* device, cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxGetDevice(device, ctx) - -cdef cudaError_t _cudaExecutionCtxGetId(cudaExecutionContext_t ctx, unsigned long long* ctxId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxGetId(ctx, ctxId) - -cdef cudaError_t _cudaExecutionCtxStreamCreate(cudaStream_t* phStream, cudaExecutionContext_t ctx, unsigned int flags, int priority) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxStreamCreate(phStream, ctx, flags, priority) - -cdef cudaError_t _cudaExecutionCtxSynchronize(cudaExecutionContext_t ctx) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxSynchronize(ctx) - -cdef cudaError_t _cudaStreamGetDevResource(cudaStream_t hStream, cudaDevResource* resource, cudaDevResourceType typename) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaStreamGetDevResource(hStream, resource, typename) - -cdef cudaError_t _cudaExecutionCtxRecordEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxRecordEvent(ctx, event) - -cdef cudaError_t _cudaExecutionCtxWaitEvent(cudaExecutionContext_t ctx, cudaEvent_t event) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaExecutionCtxWaitEvent(ctx, event) - -cdef cudaError_t _cudaDeviceGetExecutionCtx(cudaExecutionContext_t* ctx, int device) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaDeviceGetExecutionCtx(ctx, device) - -cdef cudaError_t _cudaGetExportTable(const void** ppExportTable, const cudaUUID_t* pExportTableId) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetExportTable(ppExportTable, pExportTableId) - -cdef cudaError_t _cudaGetKernel(cudaKernel_t* kernelPtr, const void* entryFuncAddr) except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaGetKernel(kernelPtr, entryFuncAddr) -@cython.show_performance_hints(False) -cdef cudaPitchedPtr _make_cudaPitchedPtr(void* d, size_t p, size_t xsz, size_t ysz) except* nogil: - return make_cudaPitchedPtr(d, p, xsz, ysz) -@cython.show_performance_hints(False) -cdef cudaPos _make_cudaPos(size_t x, size_t y, size_t z) except* nogil: - return make_cudaPos(x, y, z) -@cython.show_performance_hints(False) -cdef cudaExtent _make_cudaExtent(size_t w, size_t h, size_t d) except* nogil: - return make_cudaExtent(w, h, d) - -cdef cudaError_t _cudaProfilerStart() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaProfilerStart() - -cdef cudaError_t _cudaProfilerStop() except ?cudaErrorCallRequiresNewerDriver nogil: - return cudaProfilerStop() diff --git a/cuda_bindings/cuda/bindings/cyruntime_functions.pxi b/cuda_bindings/cuda/bindings/cyruntime_functions.pxi deleted file mode 100644 index 267c88caec4..00000000000 --- a/cuda_bindings/cuda/bindings/cyruntime_functions.pxi +++ /dev/null @@ -1,975 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. -cdef extern from "cuda_runtime_api.h": - - - cudaError_t cudaDeviceReset() nogil - - - cudaError_t cudaDeviceSynchronize() nogil - - - cudaError_t cudaDeviceSetLimit(cudaLimit limit, size_t value) nogil - - - cudaError_t cudaDeviceGetLimit(size_t* pValue, cudaLimit limit) nogil - - - cudaError_t cudaDeviceGetTexture1DLinearMaxWidth(size_t* maxWidthInElements, const cudaChannelFormatDesc* fmtDesc, int device) nogil - - - cudaError_t cudaDeviceGetCacheConfig(cudaFuncCache* pCacheConfig) nogil - - - cudaError_t cudaDeviceGetStreamPriorityRange(int* leastPriority, int* greatestPriority) nogil - - - cudaError_t cudaDeviceSetCacheConfig(cudaFuncCache cacheConfig) nogil - - - cudaError_t cudaDeviceGetByPCIBusId(int* device, const char* pciBusId) nogil - - - cudaError_t cudaDeviceGetPCIBusId(char* pciBusId, int length, int device) nogil - - - cudaError_t cudaIpcGetEventHandle(cudaIpcEventHandle_t* handle, cudaEvent_t event) nogil - - - cudaError_t cudaIpcOpenEventHandle(cudaEvent_t* event, cudaIpcEventHandle_t handle) nogil - - - cudaError_t cudaIpcGetMemHandle(cudaIpcMemHandle_t* handle, void* devPtr) nogil - - - cudaError_t cudaIpcOpenMemHandle(void** devPtr, cudaIpcMemHandle_t handle, unsigned int flags) nogil - - - cudaError_t cudaIpcCloseMemHandle(void* devPtr) nogil - - - cudaError_t cudaDeviceFlushGPUDirectRDMAWrites(cudaFlushGPUDirectRDMAWritesTarget target, cudaFlushGPUDirectRDMAWritesScope scope) nogil - - - cudaError_t cudaDeviceRegisterAsyncNotification(int device, cudaAsyncCallback callbackFunc, void* userData, cudaAsyncCallbackHandle_t* callback) nogil - - - cudaError_t cudaDeviceUnregisterAsyncNotification(int device, cudaAsyncCallbackHandle_t callback) nogil - - - cudaError_t cudaDeviceGetSharedMemConfig(cudaSharedMemConfig* pConfig) nogil - - - cudaError_t cudaDeviceSetSharedMemConfig(cudaSharedMemConfig config) nogil - - - cudaError_t cudaGetLastError() nogil - - - cudaError_t cudaPeekAtLastError() nogil - - - const char* cudaGetErrorName(cudaError_t error) nogil - - - const char* cudaGetErrorString(cudaError_t error) nogil - - - cudaError_t cudaGetDeviceCount(int* count) nogil - - - cudaError_t cudaGetDeviceProperties(cudaDeviceProp* prop, int device) nogil - - - cudaError_t cudaDeviceGetAttribute(int* value, cudaDeviceAttr attr, int device) nogil - - - cudaError_t cudaDeviceGetHostAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int device) nogil - - - cudaError_t cudaDeviceGetDefaultMemPool(cudaMemPool_t* memPool, int device) nogil - - - cudaError_t cudaDeviceSetMemPool(int device, cudaMemPool_t memPool) nogil - - - cudaError_t cudaDeviceGetMemPool(cudaMemPool_t* memPool, int device) nogil - - - cudaError_t cudaDeviceGetNvSciSyncAttributes(void* nvSciSyncAttrList, int device, int flags) nogil - - - cudaError_t cudaDeviceGetP2PAttribute(int* value, cudaDeviceP2PAttr attr, int srcDevice, int dstDevice) nogil - - - cudaError_t cudaDeviceGetP2PAtomicCapabilities(unsigned int* capabilities, const cudaAtomicOperation* operations, unsigned int count, int srcDevice, int dstDevice) nogil - - - cudaError_t cudaChooseDevice(int* device, const cudaDeviceProp* prop) nogil - - - cudaError_t cudaInitDevice(int device, unsigned int deviceFlags, unsigned int flags) nogil - - - cudaError_t cudaSetDevice(int device) nogil - - - cudaError_t cudaGetDevice(int* device) nogil - - - cudaError_t cudaSetDeviceFlags(unsigned int flags) nogil - - - cudaError_t cudaGetDeviceFlags(unsigned int* flags) nogil - - - cudaError_t cudaStreamCreate(cudaStream_t* pStream) nogil - - - cudaError_t cudaStreamCreateWithFlags(cudaStream_t* pStream, unsigned int flags) nogil - - - cudaError_t cudaStreamCreateWithPriority(cudaStream_t* pStream, unsigned int flags, int priority) nogil - - - cudaError_t cudaStreamGetPriority(cudaStream_t hStream, int* priority) nogil - - - cudaError_t cudaStreamGetFlags(cudaStream_t hStream, unsigned int* flags) nogil - - - cudaError_t cudaStreamGetId(cudaStream_t hStream, unsigned long long* streamId) nogil - - - cudaError_t cudaStreamGetDevice(cudaStream_t hStream, int* device) nogil - - - cudaError_t cudaCtxResetPersistingL2Cache() nogil - - - cudaError_t cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src) nogil - - - cudaError_t cudaStreamGetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, cudaStreamAttrValue* value_out) nogil - - - cudaError_t cudaStreamSetAttribute(cudaStream_t hStream, cudaStreamAttrID attr, const cudaStreamAttrValue* value) nogil - - - cudaError_t cudaStreamDestroy(cudaStream_t stream) nogil - - - cudaError_t cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags) nogil - - - cudaError_t cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void* userData, unsigned int flags) nogil - - - cudaError_t cudaStreamSynchronize(cudaStream_t stream) nogil - - - cudaError_t cudaStreamQuery(cudaStream_t stream) nogil - - - cudaError_t cudaStreamAttachMemAsync(cudaStream_t stream, void* devPtr, size_t length, unsigned int flags) nogil - - - cudaError_t cudaStreamBeginCapture(cudaStream_t stream, cudaStreamCaptureMode mode) nogil - - - cudaError_t cudaStreamBeginRecaptureToGraph(cudaStream_t stream, cudaStreamCaptureMode mode, cudaGraph_t graph, cudaGraphRecaptureCallbackData* callbackData) nogil - - - cudaError_t cudaStreamBeginCaptureToGraph(cudaStream_t stream, cudaGraph_t graph, const cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaStreamCaptureMode mode) nogil - - - cudaError_t cudaThreadExchangeStreamCaptureMode(cudaStreamCaptureMode* mode) nogil - - - cudaError_t cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t* pGraph) nogil - - - cudaError_t cudaStreamIsCapturing(cudaStream_t stream, cudaStreamCaptureStatus* pCaptureStatus) nogil - - - cudaError_t cudaStreamGetCaptureInfo(cudaStream_t stream, cudaStreamCaptureStatus* captureStatus_out, unsigned long long* id_out, cudaGraph_t* graph_out, const cudaGraphNode_t** dependencies_out, const cudaGraphEdgeData** edgeData_out, size_t* numDependencies_out) nogil - - - cudaError_t cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t* dependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, unsigned int flags) nogil - - - cudaError_t cudaEventCreate(cudaEvent_t* event) nogil - - - cudaError_t cudaEventCreateWithFlags(cudaEvent_t* event, unsigned int flags) nogil - - - cudaError_t cudaEventRecord(cudaEvent_t event, cudaStream_t stream) nogil - - - cudaError_t cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags) nogil - - - cudaError_t cudaEventQuery(cudaEvent_t event) nogil - - - cudaError_t cudaEventSynchronize(cudaEvent_t event) nogil - - - cudaError_t cudaEventDestroy(cudaEvent_t event) nogil - - - cudaError_t cudaEventElapsedTime(float* ms, cudaEvent_t start, cudaEvent_t end) nogil - - - cudaError_t cudaImportExternalMemory(cudaExternalMemory_t* extMem_out, const cudaExternalMemoryHandleDesc* memHandleDesc) nogil - - - cudaError_t cudaExternalMemoryGetMappedBuffer(void** devPtr, cudaExternalMemory_t extMem, const cudaExternalMemoryBufferDesc* bufferDesc) nogil - - - cudaError_t cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t* mipmap, cudaExternalMemory_t extMem, const cudaExternalMemoryMipmappedArrayDesc* mipmapDesc) nogil - - - cudaError_t cudaDestroyExternalMemory(cudaExternalMemory_t extMem) nogil - - - cudaError_t cudaImportExternalSemaphore(cudaExternalSemaphore_t* extSem_out, const cudaExternalSemaphoreHandleDesc* semHandleDesc) nogil - - - cudaError_t cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreSignalParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) nogil - - - cudaError_t cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t* extSemArray, const cudaExternalSemaphoreWaitParams* paramsArray, unsigned int numExtSems, cudaStream_t stream) nogil - - - cudaError_t cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem) nogil - - - cudaError_t cudaFuncSetCacheConfig(const void* func, cudaFuncCache cacheConfig) nogil - - - cudaError_t cudaFuncGetAttributes(cudaFuncAttributes* attr, const void* func) nogil - - - cudaError_t cudaFuncSetAttribute(const void* func, cudaFuncAttribute attr, int value) nogil - - - cudaError_t cudaFuncGetParamCount(const void* func, size_t* paramCount) nogil - - - cudaError_t cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void* userData) nogil - - - cudaError_t cudaLaunchHostFunc_v2(cudaStream_t stream, cudaHostFn_t fn, void* userData, unsigned int syncMode) nogil - - - cudaError_t cudaFuncSetSharedMemConfig(const void* func, cudaSharedMemConfig config) nogil - - - cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize) nogil - - - cudaError_t cudaOccupancyAvailableDynamicSMemPerBlock(size_t* dynamicSmemSize, const void* func, int numBlocks, int blockSize) nogil - - - cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int* numBlocks, const void* func, int blockSize, size_t dynamicSMemSize, unsigned int flags) nogil - - - cudaError_t cudaMallocManaged(void** devPtr, size_t size, unsigned int flags) nogil - - - cudaError_t cudaMalloc(void** devPtr, size_t size) nogil - - - cudaError_t cudaMallocHost(void** ptr, size_t size) nogil - - - cudaError_t cudaMallocPitch(void** devPtr, size_t* pitch, size_t width, size_t height) nogil - - - cudaError_t cudaMallocArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, size_t width, size_t height, unsigned int flags) nogil - - - cudaError_t cudaFree(void* devPtr) nogil - - - cudaError_t cudaFreeHost(void* ptr) nogil - - - cudaError_t cudaFreeArray(cudaArray_t array) nogil - - - cudaError_t cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray) nogil - - - cudaError_t cudaHostAlloc(void** pHost, size_t size, unsigned int flags) nogil - - - cudaError_t cudaHostRegister(void* ptr, size_t size, unsigned int flags) nogil - - - cudaError_t cudaHostUnregister(void* ptr) nogil - - - cudaError_t cudaHostGetDevicePointer(void** pDevice, void* pHost, unsigned int flags) nogil - - - cudaError_t cudaHostGetFlags(unsigned int* pFlags, void* pHost) nogil - - - cudaError_t cudaMalloc3D(cudaPitchedPtr* pitchedDevPtr, cudaExtent extent) nogil - - - cudaError_t cudaMalloc3DArray(cudaArray_t* array, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int flags) nogil - - - cudaError_t cudaMallocMipmappedArray(cudaMipmappedArray_t* mipmappedArray, const cudaChannelFormatDesc* desc, cudaExtent extent, unsigned int numLevels, unsigned int flags) nogil - - - cudaError_t cudaGetMipmappedArrayLevel(cudaArray_t* levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level) nogil - - - cudaError_t cudaMemcpy3D(const cudaMemcpy3DParms* p) nogil - - - cudaError_t cudaMemcpy3DPeer(const cudaMemcpy3DPeerParms* p) nogil - - - cudaError_t cudaMemcpy3DAsync(const cudaMemcpy3DParms* p, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy3DPeerAsync(const cudaMemcpy3DPeerParms* p, cudaStream_t stream) nogil - - - cudaError_t cudaMemGetInfo(size_t* free, size_t* total) nogil - - - cudaError_t cudaArrayGetInfo(cudaChannelFormatDesc* desc, cudaExtent* extent, unsigned int* flags, cudaArray_t array) nogil - - - cudaError_t cudaArrayGetPlane(cudaArray_t* pPlaneArray, cudaArray_t hArray, unsigned int planeIdx) nogil - - - cudaError_t cudaArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaArray_t array, int device) nogil - - - cudaError_t cudaMipmappedArrayGetMemoryRequirements(cudaArrayMemoryRequirements* memoryRequirements, cudaMipmappedArray_t mipmap, int device) nogil - - - cudaError_t cudaArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaArray_t array) nogil - - - cudaError_t cudaMipmappedArrayGetSparseProperties(cudaArraySparseProperties* sparseProperties, cudaMipmappedArray_t mipmap) nogil - - - cudaError_t cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpyPeer(void* dst, int dstDevice, const void* src, int srcDevice, size_t count) nogil - - - cudaError_t cudaMemcpy2D(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpy2DFromArray(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpyAsync(void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpyPeerAsync(void* dst, int dstDevice, const void* src, int srcDevice, size_t count, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpyBatchAsync(const void** dsts, const void** srcs, const size_t* sizes, size_t count, cudaMemcpyAttributes* attrs, size_t* attrsIdxs, size_t numAttrs, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy3DBatchAsync(size_t numOps, cudaMemcpy3DBatchOp* opList, unsigned long long flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpyWithAttributesAsync(void* dst, const void* src, size_t size, cudaMemcpyAttributes* attr, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy3DWithAttributesAsync(cudaMemcpy3DBatchOp* op, unsigned long long flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy2DAsync(void* dst, size_t dpitch, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t spitch, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpy2DFromArrayAsync(void* dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMemset(void* devPtr, int value, size_t count) nogil - - - cudaError_t cudaMemset2D(void* devPtr, size_t pitch, int value, size_t width, size_t height) nogil - - - cudaError_t cudaMemset3D(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent) nogil - - - cudaError_t cudaMemsetAsync(void* devPtr, int value, size_t count, cudaStream_t stream) nogil - - - cudaError_t cudaMemset2DAsync(void* devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream) nogil - - - cudaError_t cudaMemset3DAsync(cudaPitchedPtr pitchedDevPtr, int value, cudaExtent extent, cudaStream_t stream) nogil - - - cudaError_t cudaMemPrefetchAsync(const void* devPtr, size_t count, cudaMemLocation location, unsigned int flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemDiscardBatchAsync(void** dptrs, size_t* sizes, size_t count, unsigned long long flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemDiscardAndPrefetchBatchAsync(void** dptrs, size_t* sizes, size_t count, cudaMemLocation* prefetchLocs, size_t* prefetchLocIdxs, size_t numPrefetchLocs, unsigned long long flags, cudaStream_t stream) nogil - - - cudaError_t cudaMemAdvise(const void* devPtr, size_t count, cudaMemoryAdvise advice, cudaMemLocation location) nogil - - - cudaError_t cudaMemRangeGetAttribute(void* data, size_t dataSize, cudaMemRangeAttribute attribute, const void* devPtr, size_t count) nogil - - - cudaError_t cudaMemRangeGetAttributes(void** data, size_t* dataSizes, cudaMemRangeAttribute* attributes, size_t numAttributes, const void* devPtr, size_t count) nogil - - - cudaError_t cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpyFromArray(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMemcpyFromArrayAsync(void* dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, cudaMemcpyKind kind, cudaStream_t stream) nogil - - - cudaError_t cudaMallocAsync(void** devPtr, size_t size, cudaStream_t hStream) nogil - - - cudaError_t cudaFreeAsync(void* devPtr, cudaStream_t hStream) nogil - - - cudaError_t cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep) nogil - - - cudaError_t cudaMemPoolSetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) nogil - - - cudaError_t cudaMemPoolGetAttribute(cudaMemPool_t memPool, cudaMemPoolAttr attr, void* value) nogil - - - cudaError_t cudaMemPoolSetAccess(cudaMemPool_t memPool, const cudaMemAccessDesc* descList, size_t count) nogil - - - cudaError_t cudaMemPoolGetAccess(cudaMemAccessFlags* flags, cudaMemPool_t memPool, cudaMemLocation* location) nogil - - - cudaError_t cudaMemPoolCreate(cudaMemPool_t* memPool, const cudaMemPoolProps* poolProps) nogil - - - cudaError_t cudaMemPoolDestroy(cudaMemPool_t memPool) nogil - - - cudaError_t cudaMemGetDefaultMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) nogil - - - cudaError_t cudaMemGetMemPool(cudaMemPool_t* memPool, cudaMemLocation* location, cudaMemAllocationType typename) nogil - - - cudaError_t cudaMemSetMemPool(cudaMemLocation* location, cudaMemAllocationType typename, cudaMemPool_t memPool) nogil - - - cudaError_t cudaMallocFromPoolAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream) nogil - - - cudaError_t cudaMemPoolExportToShareableHandle(void* shareableHandle, cudaMemPool_t memPool, cudaMemAllocationHandleType handleType, unsigned int flags) nogil - - - cudaError_t cudaMemPoolImportFromShareableHandle(cudaMemPool_t* memPool, void* shareableHandle, cudaMemAllocationHandleType handleType, unsigned int flags) nogil - - - cudaError_t cudaMemPoolExportPointer(cudaMemPoolPtrExportData* exportData, void* ptr) nogil - - - cudaError_t cudaMemPoolImportPointer(void** ptr, cudaMemPool_t memPool, cudaMemPoolPtrExportData* exportData) nogil - - - cudaError_t cudaPointerGetAttributes(cudaPointerAttributes* attributes, const void* ptr) nogil - - - cudaError_t cudaDeviceCanAccessPeer(int* canAccessPeer, int device, int peerDevice) nogil - - - cudaError_t cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags) nogil - - - cudaError_t cudaDeviceDisablePeerAccess(int peerDevice) nogil - - - cudaError_t cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource) nogil - - - cudaError_t cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags) nogil - - - cudaError_t cudaGraphicsMapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) nogil - - - cudaError_t cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t* resources, cudaStream_t stream) nogil - - - cudaError_t cudaGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, cudaGraphicsResource_t resource) nogil - - - cudaError_t cudaGraphicsSubResourceGetMappedArray(cudaArray_t* array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel) nogil - - - cudaError_t cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t* mipmappedArray, cudaGraphicsResource_t resource) nogil - - - cudaError_t cudaGetChannelDesc(cudaChannelFormatDesc* desc, cudaArray_const_t array) nogil - - - cudaChannelFormatDesc cudaCreateChannelDesc(int x, int y, int z, int w, cudaChannelFormatKind f) nogil - - - cudaError_t cudaCreateTextureObject(cudaTextureObject_t* pTexObject, const cudaResourceDesc* pResDesc, const cudaTextureDesc* pTexDesc, const cudaResourceViewDesc* pResViewDesc) nogil - - - cudaError_t cudaDestroyTextureObject(cudaTextureObject_t texObject) nogil - - - cudaError_t cudaGetTextureObjectResourceDesc(cudaResourceDesc* pResDesc, cudaTextureObject_t texObject) nogil - - - cudaError_t cudaGetTextureObjectTextureDesc(cudaTextureDesc* pTexDesc, cudaTextureObject_t texObject) nogil - - - cudaError_t cudaGetTextureObjectResourceViewDesc(cudaResourceViewDesc* pResViewDesc, cudaTextureObject_t texObject) nogil - - - cudaError_t cudaCreateSurfaceObject(cudaSurfaceObject_t* pSurfObject, const cudaResourceDesc* pResDesc) nogil - - - cudaError_t cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject) nogil - - - cudaError_t cudaGetSurfaceObjectResourceDesc(cudaResourceDesc* pResDesc, cudaSurfaceObject_t surfObject) nogil - - - cudaError_t cudaDriverGetVersion(int* driverVersion) nogil - - - cudaError_t cudaRuntimeGetVersion(int* runtimeVersion) nogil - - - cudaError_t cudaLogsRegisterCallback(cudaLogsCallback_t callbackFunc, void* userData, cudaLogsCallbackHandle* callback_out) nogil - - - cudaError_t cudaLogsUnregisterCallback(cudaLogsCallbackHandle callback) nogil - - - cudaError_t cudaLogsCurrent(cudaLogIterator* iterator_out, unsigned int flags) nogil - - - cudaError_t cudaLogsDumpToFile(cudaLogIterator* iterator, const char* pathToFile, unsigned int flags) nogil - - - cudaError_t cudaLogsDumpToMemory(cudaLogIterator* iterator, char* buffer, size_t* size, unsigned int flags) nogil - - - cudaError_t cudaGraphCreate(cudaGraph_t* pGraph, unsigned int flags) nogil - - - cudaError_t cudaGraphAddKernelNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaKernelNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphKernelNodeGetParams(cudaGraphNode_t node, cudaKernelNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphKernelNodeCopyAttributes(cudaGraphNode_t hDst, cudaGraphNode_t hSrc) nogil - - - cudaError_t cudaGraphKernelNodeGetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, cudaKernelNodeAttrValue* value_out) nogil - - - cudaError_t cudaGraphKernelNodeSetAttribute(cudaGraphNode_t hNode, cudaKernelNodeAttrID attr, const cudaKernelNodeAttrValue* value) nogil - - - cudaError_t cudaGraphAddMemcpyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemcpy3DParms* pCopyParams) nogil - - - cudaError_t cudaGraphAddMemcpyNode1D(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dst, const void* src, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, cudaMemcpy3DParms* pNodeParams) nogil - - - cudaError_t cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) nogil - - - cudaError_t cudaGraphMemcpyNodeSetParams1D(cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaGraphAddMemsetNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaMemsetParams* pMemsetParams) nogil - - - cudaError_t cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, cudaMemsetParams* pNodeParams) nogil - - - cudaError_t cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) nogil - - - cudaError_t cudaGraphAddHostNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaHostNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphHostNodeGetParams(cudaGraphNode_t node, cudaHostNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphHostNodeSetParams(cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphAddChildGraphNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaGraph_t childGraph) nogil - - - cudaError_t cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t* pGraph) nogil - - - cudaError_t cudaGraphAddEmptyNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies) nogil - - - cudaError_t cudaGraphAddEventRecordNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) nogil - - - cudaError_t cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) nogil - - - cudaError_t cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) nogil - - - cudaError_t cudaGraphAddEventWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaEvent_t event) nogil - - - cudaError_t cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t* event_out) nogil - - - cudaError_t cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event) nogil - - - cudaError_t cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreSignalNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreSignalNodeParams* params_out) nogil - - - cudaError_t cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, const cudaExternalSemaphoreWaitNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, cudaExternalSemaphoreWaitNodeParams* params_out) nogil - - - cudaError_t cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphAddMemAllocNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, cudaMemAllocNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, cudaMemAllocNodeParams* params_out) nogil - - - cudaError_t cudaGraphAddMemFreeNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, size_t numDependencies, void* dptr) nogil - - - cudaError_t cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void* dptr_out) nogil - - - cudaError_t cudaDeviceGraphMemTrim(int device) nogil - - - cudaError_t cudaDeviceGetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) nogil - - - cudaError_t cudaDeviceSetGraphMemAttribute(int device, cudaGraphMemAttributeType attr, void* value) nogil - - - cudaError_t cudaGraphClone(cudaGraph_t* pGraphClone, cudaGraph_t originalGraph) nogil - - - cudaError_t cudaGraphNodeFindInClone(cudaGraphNode_t* pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph) nogil - - - cudaError_t cudaGraphNodeGetType(cudaGraphNode_t node, cudaGraphNodeType* pType) nogil - - - cudaError_t cudaGraphNodeGetContainingGraph(cudaGraphNode_t hNode, cudaGraph_t* phGraph) nogil - - - cudaError_t cudaGraphNodeGetLocalId(cudaGraphNode_t hNode, unsigned int* nodeId) nogil - - - cudaError_t cudaGraphNodeGetToolsId(cudaGraphNode_t hNode, unsigned long long* toolsNodeId) nogil - - - cudaError_t cudaGraphGetId(cudaGraph_t hGraph, unsigned int* graphID) nogil - - - cudaError_t cudaGraphExecGetId(cudaGraphExec_t hGraphExec, unsigned int* graphID) nogil - - - cudaError_t cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t* nodes, size_t* numNodes) nogil - - - cudaError_t cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t* pRootNodes, size_t* pNumRootNodes) nogil - - - cudaError_t cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t* from_, cudaGraphNode_t* to, cudaGraphEdgeData* edgeData, size_t* numEdges) nogil - - - cudaError_t cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t* pDependencies, cudaGraphEdgeData* edgeData, size_t* pNumDependencies) nogil - - - cudaError_t cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t* pDependentNodes, cudaGraphEdgeData* edgeData, size_t* pNumDependentNodes) nogil - - - cudaError_t cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) nogil - - - cudaError_t cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t* from_, const cudaGraphNode_t* to, const cudaGraphEdgeData* edgeData, size_t numDependencies) nogil - - - cudaError_t cudaGraphDestroyNode(cudaGraphNode_t node) nogil - - - cudaError_t cudaGraphInstantiate(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) nogil - - - cudaError_t cudaGraphInstantiateWithFlags(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, unsigned long long flags) nogil - - - cudaError_t cudaGraphInstantiateWithParams(cudaGraphExec_t* pGraphExec, cudaGraph_t graph, cudaGraphInstantiateParams* instantiateParams) nogil - - - cudaError_t cudaGraphExecGetFlags(cudaGraphExec_t graphExec, unsigned long long* flags) nogil - - - cudaError_t cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaKernelNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemcpy3DParms* pNodeParams) nogil - - - cudaError_t cudaGraphExecMemcpyNodeSetParams1D(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, void* dst, const void* src, size_t count, cudaMemcpyKind kind) nogil - - - cudaError_t cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaMemsetParams* pNodeParams) nogil - - - cudaError_t cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const cudaHostNodeParams* pNodeParams) nogil - - - cudaError_t cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph) nogil - - - cudaError_t cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) nogil - - - cudaError_t cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event) nogil - - - cudaError_t cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreSignalNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const cudaExternalSemaphoreWaitNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled) nogil - - - cudaError_t cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int* isEnabled) nogil - - - cudaError_t cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphExecUpdateResultInfo* resultInfo) nogil - - - cudaError_t cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream) nogil - - - cudaError_t cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream) nogil - - - cudaError_t cudaGraphExecDestroy(cudaGraphExec_t graphExec) nogil - - - cudaError_t cudaGraphDestroy(cudaGraph_t graph) nogil - - - cudaError_t cudaGraphDebugDotPrint(cudaGraph_t graph, const char* path, unsigned int flags) nogil - - - cudaError_t cudaUserObjectCreate(cudaUserObject_t* object_out, void* ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags) nogil - - - cudaError_t cudaUserObjectRetain(cudaUserObject_t object, unsigned int count) nogil - - - cudaError_t cudaUserObjectRelease(cudaUserObject_t object, unsigned int count) nogil - - - cudaError_t cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count, unsigned int flags) nogil - - - cudaError_t cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count) nogil - - - cudaError_t cudaGraphAddNode(cudaGraphNode_t* pGraphNode, cudaGraph_t graph, const cudaGraphNode_t* pDependencies, const cudaGraphEdgeData* dependencyData, size_t numDependencies, cudaGraphNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphNodeSetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphNodeGetParams(cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphExecNodeSetParams(cudaGraphExec_t graphExec, cudaGraphNode_t node, cudaGraphNodeParams* nodeParams) nogil - - - cudaError_t cudaGraphConditionalHandleCreate(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, unsigned int defaultLaunchValue, unsigned int flags) nogil - - - cudaError_t cudaGraphConditionalHandleCreate_v2(cudaGraphConditionalHandle* pHandle_out, cudaGraph_t graph, cudaExecutionContext_t ctx, unsigned int defaultLaunchValue, unsigned int flags) nogil - - - cudaError_t cudaGetDriverEntryPoint(const char* symbol, void** funcPtr, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) nogil - - - cudaError_t cudaGetDriverEntryPointByVersion(const char* symbol, void** funcPtr, unsigned int cudaVersion, unsigned long long flags, cudaDriverEntryPointQueryResult* driverStatus) nogil - - - cudaError_t cudaLibraryLoadData(cudaLibrary_t* library, const void* code, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) nogil - - - cudaError_t cudaLibraryLoadFromFile(cudaLibrary_t* library, const char* fileName, cudaJitOption* jitOptions, void** jitOptionsValues, unsigned int numJitOptions, cudaLibraryOption* libraryOptions, void** libraryOptionValues, unsigned int numLibraryOptions) nogil - - - cudaError_t cudaLibraryUnload(cudaLibrary_t library) nogil - - - cudaError_t cudaLibraryGetKernel(cudaKernel_t* pKernel, cudaLibrary_t library, const char* name) nogil - - - cudaError_t cudaLibraryGetGlobal(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) nogil - - - cudaError_t cudaLibraryGetManaged(void** dptr, size_t* numbytes, cudaLibrary_t library, const char* name) nogil - - - cudaError_t cudaLibraryGetUnifiedFunction(void** fptr, cudaLibrary_t library, const char* symbol) nogil - - - cudaError_t cudaLibraryGetKernelCount(unsigned int* count, cudaLibrary_t lib) nogil - - - cudaError_t cudaLibraryEnumerateKernels(cudaKernel_t* kernels, unsigned int numKernels, cudaLibrary_t lib) nogil - - - cudaError_t cudaKernelSetAttributeForDevice(cudaKernel_t kernel, cudaFuncAttribute attr, int value, int device) nogil - - - cudaError_t cudaDeviceGetDevResource(int device, cudaDevResource* resource, cudaDevResourceType typename) nogil - - - cudaError_t cudaDevSmResourceSplitByCount(cudaDevResource* result, unsigned int* nbGroups, const cudaDevResource* input, cudaDevResource* remaining, unsigned int flags, unsigned int minCount) nogil - - - cudaError_t cudaDevSmResourceSplit(cudaDevResource* result, unsigned int nbGroups, const cudaDevResource* input, cudaDevResource* remainder, unsigned int flags, cudaDevSmResourceGroupParams* groupParams) nogil - - - cudaError_t cudaDevResourceGenerateDesc(cudaDevResourceDesc_t* phDesc, cudaDevResource* resources, unsigned int nbResources) nogil - - - cudaError_t cudaGreenCtxCreate(cudaExecutionContext_t* phCtx, cudaDevResourceDesc_t desc, int device, unsigned int flags) nogil - - - cudaError_t cudaExecutionCtxDestroy(cudaExecutionContext_t ctx) nogil - - - cudaError_t cudaExecutionCtxGetDevResource(cudaExecutionContext_t ctx, cudaDevResource* resource, cudaDevResourceType typename) nogil - - - cudaError_t cudaExecutionCtxGetDevice(int* device, cudaExecutionContext_t ctx) nogil - - - cudaError_t cudaExecutionCtxGetId(cudaExecutionContext_t ctx, unsigned long long* ctxId) nogil - - - cudaError_t cudaExecutionCtxStreamCreate(cudaStream_t* phStream, cudaExecutionContext_t ctx, unsigned int flags, int priority) nogil - - - cudaError_t cudaExecutionCtxSynchronize(cudaExecutionContext_t ctx) nogil - - - cudaError_t cudaStreamGetDevResource(cudaStream_t hStream, cudaDevResource* resource, cudaDevResourceType typename) nogil - - - cudaError_t cudaExecutionCtxRecordEvent(cudaExecutionContext_t ctx, cudaEvent_t event) nogil - - - cudaError_t cudaExecutionCtxWaitEvent(cudaExecutionContext_t ctx, cudaEvent_t event) nogil - - - cudaError_t cudaDeviceGetExecutionCtx(cudaExecutionContext_t* ctx, int device) nogil - - - cudaError_t cudaGetExportTable(const void** ppExportTable, const cudaUUID_t* pExportTableId) nogil - - - cudaError_t cudaGetKernel(cudaKernel_t* kernelPtr, const void* entryFuncAddr) nogil - - -cdef extern from "cuda_runtime.h": - - - cudaPitchedPtr make_cudaPitchedPtr(void* d, size_t p, size_t xsz, size_t ysz) nogil - - - cudaPos make_cudaPos(size_t x, size_t y, size_t z) nogil - - - cudaExtent make_cudaExtent(size_t w, size_t h, size_t d) nogil - - -cdef extern from "cuda_profiler_api.h": - - - cudaError_t cudaProfilerStart() nogil - - - cudaError_t cudaProfilerStop() nogil - diff --git a/cuda_bindings/cuda/bindings/cyruntime_types.pxi b/cuda_bindings/cuda/bindings/cyruntime_types.pxi deleted file mode 100644 index 34ea2c20e99..00000000000 --- a/cuda_bindings/cuda/bindings/cyruntime_types.pxi +++ /dev/null @@ -1,1777 +0,0 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: LicenseRef-NVIDIA-SOFTWARE-LICENSE - -# This code was automatically generated with version 13.3.0, generator version 0.3.1.dev1630+gadce055ea.d20260422. Do not modify it directly. - -cdef extern from "vector_types.h": - - cdef struct dim3: - unsigned int x - unsigned int y - unsigned int z - -cdef extern from "driver_types.h": - - cdef enum cudaError: - cudaSuccess = 0 - cudaErrorInvalidValue = 1 - cudaErrorMemoryAllocation = 2 - cudaErrorInitializationError = 3 - cudaErrorCudartUnloading = 4 - cudaErrorProfilerDisabled = 5 - cudaErrorProfilerNotInitialized = 6 - cudaErrorProfilerAlreadyStarted = 7 - cudaErrorProfilerAlreadyStopped = 8 - cudaErrorInvalidConfiguration = 9 - cudaErrorVersionTranslation = 10 - cudaErrorInvalidPitchValue = 12 - cudaErrorInvalidSymbol = 13 - cudaErrorInvalidHostPointer = 16 - cudaErrorInvalidDevicePointer = 17 - cudaErrorInvalidTexture = 18 - cudaErrorInvalidTextureBinding = 19 - cudaErrorInvalidChannelDescriptor = 20 - cudaErrorInvalidMemcpyDirection = 21 - cudaErrorAddressOfConstant = 22 - cudaErrorTextureFetchFailed = 23 - cudaErrorTextureNotBound = 24 - cudaErrorSynchronizationError = 25 - cudaErrorInvalidFilterSetting = 26 - cudaErrorInvalidNormSetting = 27 - cudaErrorMixedDeviceExecution = 28 - cudaErrorNotYetImplemented = 31 - cudaErrorMemoryValueTooLarge = 32 - cudaErrorStubLibrary = 34 - cudaErrorInsufficientDriver = 35 - cudaErrorCallRequiresNewerDriver = 36 - cudaErrorInvalidSurface = 37 - cudaErrorDuplicateVariableName = 43 - cudaErrorDuplicateTextureName = 44 - cudaErrorDuplicateSurfaceName = 45 - cudaErrorDevicesUnavailable = 46 - cudaErrorIncompatibleDriverContext = 49 - cudaErrorMissingConfiguration = 52 - cudaErrorPriorLaunchFailure = 53 - cudaErrorLaunchMaxDepthExceeded = 65 - cudaErrorLaunchFileScopedTex = 66 - cudaErrorLaunchFileScopedSurf = 67 - cudaErrorSyncDepthExceeded = 68 - cudaErrorLaunchPendingCountExceeded = 69 - cudaErrorInvalidDeviceFunction = 98 - cudaErrorNoDevice = 100 - cudaErrorInvalidDevice = 101 - cudaErrorDeviceNotLicensed = 102 - cudaErrorSoftwareValidityNotEstablished = 103 - cudaErrorStartupFailure = 127 - cudaErrorInvalidKernelImage = 200 - cudaErrorDeviceUninitialized = 201 - cudaErrorMapBufferObjectFailed = 205 - cudaErrorUnmapBufferObjectFailed = 206 - cudaErrorArrayIsMapped = 207 - cudaErrorAlreadyMapped = 208 - cudaErrorNoKernelImageForDevice = 209 - cudaErrorAlreadyAcquired = 210 - cudaErrorNotMapped = 211 - cudaErrorNotMappedAsArray = 212 - cudaErrorNotMappedAsPointer = 213 - cudaErrorECCUncorrectable = 214 - cudaErrorUnsupportedLimit = 215 - cudaErrorDeviceAlreadyInUse = 216 - cudaErrorPeerAccessUnsupported = 217 - cudaErrorInvalidPtx = 218 - cudaErrorInvalidGraphicsContext = 219 - cudaErrorNvlinkUncorrectable = 220 - cudaErrorJitCompilerNotFound = 221 - cudaErrorUnsupportedPtxVersion = 222 - cudaErrorJitCompilationDisabled = 223 - cudaErrorUnsupportedExecAffinity = 224 - cudaErrorUnsupportedDevSideSync = 225 - cudaErrorContained = 226 - cudaErrorInvalidSource = 300 - cudaErrorFileNotFound = 301 - cudaErrorSharedObjectSymbolNotFound = 302 - cudaErrorSharedObjectInitFailed = 303 - cudaErrorOperatingSystem = 304 - cudaErrorInvalidResourceHandle = 400 - cudaErrorIllegalState = 401 - cudaErrorLossyQuery = 402 - cudaErrorSymbolNotFound = 500 - cudaErrorNotReady = 600 - cudaErrorIllegalAddress = 700 - cudaErrorLaunchOutOfResources = 701 - cudaErrorLaunchTimeout = 702 - cudaErrorLaunchIncompatibleTexturing = 703 - cudaErrorPeerAccessAlreadyEnabled = 704 - cudaErrorPeerAccessNotEnabled = 705 - cudaErrorSetOnActiveProcess = 708 - cudaErrorContextIsDestroyed = 709 - cudaErrorAssert = 710 - cudaErrorTooManyPeers = 711 - cudaErrorHostMemoryAlreadyRegistered = 712 - cudaErrorHostMemoryNotRegistered = 713 - cudaErrorHardwareStackError = 714 - cudaErrorIllegalInstruction = 715 - cudaErrorMisalignedAddress = 716 - cudaErrorInvalidAddressSpace = 717 - cudaErrorInvalidPc = 718 - cudaErrorLaunchFailure = 719 - cudaErrorCooperativeLaunchTooLarge = 720 - cudaErrorTensorMemoryLeak = 721 - cudaErrorNotPermitted = 800 - cudaErrorNotSupported = 801 - cudaErrorSystemNotReady = 802 - cudaErrorSystemDriverMismatch = 803 - cudaErrorCompatNotSupportedOnDevice = 804 - cudaErrorMpsConnectionFailed = 805 - cudaErrorMpsRpcFailure = 806 - cudaErrorMpsServerNotReady = 807 - cudaErrorMpsMaxClientsReached = 808 - cudaErrorMpsMaxConnectionsReached = 809 - cudaErrorMpsClientTerminated = 810 - cudaErrorCdpNotSupported = 811 - cudaErrorCdpVersionMismatch = 812 - cudaErrorStreamCaptureUnsupported = 900 - cudaErrorStreamCaptureInvalidated = 901 - cudaErrorStreamCaptureMerge = 902 - cudaErrorStreamCaptureUnmatched = 903 - cudaErrorStreamCaptureUnjoined = 904 - cudaErrorStreamCaptureIsolation = 905 - cudaErrorStreamCaptureImplicit = 906 - cudaErrorCapturedEvent = 907 - cudaErrorStreamCaptureWrongThread = 908 - cudaErrorTimeout = 909 - cudaErrorGraphExecUpdateFailure = 910 - cudaErrorExternalDevice = 911 - cudaErrorInvalidClusterSize = 912 - cudaErrorFunctionNotLoaded = 913 - cudaErrorInvalidResourceType = 914 - cudaErrorInvalidResourceConfiguration = 915 - cudaErrorStreamDetached = 917 - cudaErrorGraphRecaptureFailure = 918 - cudaErrorUnknown = 999 - cudaErrorApiFailureBase = 10000 - - ctypedef cudaError cudaError_t - - cdef struct CUdevResourceDesc_st: - pass - ctypedef CUdevResourceDesc_st* cudaDevResourceDesc_t - - cdef struct cudaExecutionContext_st: - pass - ctypedef cudaExecutionContext_st* cudaExecutionContext_t - - cdef struct cudaChannelFormatDesc: - int x - int y - int z - int w - cudaChannelFormatKind f - - cdef struct cudaArray: - pass - ctypedef cudaArray* cudaArray_t - - cdef struct cudaArray: - pass - ctypedef cudaArray* cudaArray_const_t - - cdef struct cudaMipmappedArray: - pass - ctypedef cudaMipmappedArray* cudaMipmappedArray_t - - cdef struct cudaMipmappedArray: - pass - ctypedef cudaMipmappedArray* cudaMipmappedArray_const_t - - cdef struct anon_struct0: - unsigned int width - unsigned int height - unsigned int depth - - cdef struct cudaArraySparseProperties: - anon_struct0 tileExtent - unsigned int miptailFirstLevel - unsigned long long miptailSize - unsigned int flags - unsigned int reserved[4] - - cdef struct cudaArrayMemoryRequirements: - size_t size - size_t alignment - unsigned int reserved[4] - - cdef struct cudaPitchedPtr: - void* ptr - size_t pitch - size_t xsize - size_t ysize - - cdef struct cudaExtent: - size_t width - size_t height - size_t depth - - cdef struct cudaPos: - size_t x - size_t y - size_t z - - cdef struct cudaMemcpy3DParms: - cudaArray_t srcArray - cudaPos srcPos - cudaPitchedPtr srcPtr - cudaArray_t dstArray - cudaPos dstPos - cudaPitchedPtr dstPtr - cudaExtent extent - cudaMemcpyKind kind - - cdef struct cudaMemcpyNodeParams: - int flags - int reserved - cudaExecutionContext_t ctx - cudaMemcpy3DParms copyParams - - cdef struct cudaMemcpy3DPeerParms: - cudaArray_t srcArray - cudaPos srcPos - cudaPitchedPtr srcPtr - int srcDevice - cudaArray_t dstArray - cudaPos dstPos - cudaPitchedPtr dstPtr - int dstDevice - cudaExtent extent - - cdef struct cudaMemsetParams: - void* dst - size_t pitch - unsigned int value - unsigned int elementSize - size_t width - size_t height - - cdef struct cudaMemsetParamsV2: - void* dst - size_t pitch - unsigned int value - unsigned int elementSize - size_t width - size_t height - cudaExecutionContext_t ctx - - cdef struct cudaAccessPolicyWindow: - void* base_ptr - size_t num_bytes - float hitRatio - cudaAccessProperty hitProp - cudaAccessProperty missProp - - ctypedef void (*cudaHostFn_t)(void* userData) - - cdef struct cudaHostNodeParams: - cudaHostFn_t fn - void* userData - - cdef struct cudaHostNodeParamsV2: - cudaHostFn_t fn - void* userData - unsigned int syncMode - - cdef struct anon_struct1: - cudaArray_t array - - cdef struct anon_struct2: - cudaMipmappedArray_t mipmap - - cdef struct anon_struct3: - void* devPtr - cudaChannelFormatDesc desc - size_t sizeInBytes - - cdef struct anon_struct4: - void* devPtr - cudaChannelFormatDesc desc - size_t width - size_t height - size_t pitchInBytes - - cdef struct anon_struct5: - int reserved[32] - - cdef union anon_union0: - anon_struct1 array - anon_struct2 mipmap - anon_struct3 linear - anon_struct4 pitch2D - anon_struct5 reserved - - cdef struct cudaResourceDesc: - cudaResourceType resType - anon_union0 res - unsigned int flags - - cdef struct cudaResourceViewDesc: - cudaResourceViewFormat format - size_t width - size_t height - size_t depth - unsigned int firstMipmapLevel - unsigned int lastMipmapLevel - unsigned int firstLayer - unsigned int lastLayer - unsigned int reserved[16] - - cdef enum cudaSharedMemoryMode: - cudaSharedMemoryModeDefault = 0 - cudaSharedMemoryModeRequirePortable = 1 - cudaSharedMemoryModeAllowNonPortable = 2 - - cdef struct cudaPointerAttributes: - cudaMemoryType type - int device - void* devicePointer - void* hostPointer - long reserved[8] - - cdef struct cudaFuncAttributes: - size_t sharedSizeBytes - size_t constSizeBytes - size_t localSizeBytes - int maxThreadsPerBlock - int numRegs - int ptxVersion - int binaryVersion - int cacheModeCA - int maxDynamicSharedSizeBytes - int preferredShmemCarveout - int clusterDimMustBeSet - int requiredClusterWidth - int requiredClusterHeight - int requiredClusterDepth - int clusterSchedulingPolicyPreference - int nonPortableClusterSizeAllowed - int deviceNodeUpdateStatus - int reserved1 - int reserved[14] - - cdef struct cudaMemLocation: - cudaMemLocationType type - int id - - cdef struct cudaMemAccessDesc: - cudaMemLocation location - cudaMemAccessFlags flags - - cdef struct cudaMemPoolProps: - cudaMemAllocationType allocType - cudaMemAllocationHandleType handleTypes - cudaMemLocation location - void* win32SecurityAttributes - size_t maxSize - unsigned short usage - unsigned char reserved[54] - - cdef struct cudaMemPoolPtrExportData: - unsigned char reserved[64] - - cdef struct cudaMemAllocNodeParams: - cudaMemPoolProps poolProps - const cudaMemAccessDesc* accessDescs - size_t accessDescCount - size_t bytesize - void* dptr - - cdef struct cudaMemAllocNodeParamsV2: - cudaMemPoolProps poolProps - const cudaMemAccessDesc* accessDescs - size_t accessDescCount - size_t bytesize - void* dptr - - cdef struct cudaMemFreeNodeParams: - void* dptr - - cdef struct cudaMemcpyAttributes: - cudaMemcpySrcAccessOrder srcAccessOrder - cudaMemLocation srcLocHint - cudaMemLocation dstLocHint - unsigned int flags - - cdef struct cudaOffset3D: - size_t x - size_t y - size_t z - - cdef struct anon_struct6: - void* ptr - size_t rowLength - size_t layerHeight - cudaMemLocation locHint - - cdef struct anon_struct7: - cudaArray_t array - cudaOffset3D offset - - cdef union anon_union2: - anon_struct6 ptr - anon_struct7 array - - cdef struct cudaMemcpy3DOperand: - cudaMemcpy3DOperandType type - anon_union2 op - - cdef struct cudaMemcpy3DBatchOp: - cudaMemcpy3DOperand src - cudaMemcpy3DOperand dst - cudaExtent extent - cudaMemcpySrcAccessOrder srcAccessOrder - unsigned int flags - - cdef struct CUuuid_st: - char bytes[16] - - ctypedef CUuuid_st CUuuid - - ctypedef CUuuid_st cudaUUID_t - - cdef struct cudaDeviceProp: - char name[256] - cudaUUID_t uuid - char luid[8] - unsigned int luidDeviceNodeMask - size_t totalGlobalMem - size_t sharedMemPerBlock - int regsPerBlock - int warpSize - size_t memPitch - int maxThreadsPerBlock - int maxThreadsDim[3] - int maxGridSize[3] - size_t totalConstMem - int major - int minor - size_t textureAlignment - size_t texturePitchAlignment - int multiProcessorCount - int integrated - int canMapHostMemory - int maxTexture1D - int maxTexture1DMipmap - int maxTexture2D[2] - int maxTexture2DMipmap[2] - int maxTexture2DLinear[3] - int maxTexture2DGather[2] - int maxTexture3D[3] - int maxTexture3DAlt[3] - int maxTextureCubemap - int maxTexture1DLayered[2] - int maxTexture2DLayered[3] - int maxTextureCubemapLayered[2] - int maxSurface1D - int maxSurface2D[2] - int maxSurface3D[3] - int maxSurface1DLayered[2] - int maxSurface2DLayered[3] - int maxSurfaceCubemap - int maxSurfaceCubemapLayered[2] - size_t surfaceAlignment - int concurrentKernels - int ECCEnabled - int pciBusID - int pciDeviceID - int pciDomainID - int tccDriver - int asyncEngineCount - int unifiedAddressing - int memoryBusWidth - int l2CacheSize - int persistingL2CacheMaxSize - int maxThreadsPerMultiProcessor - int streamPrioritiesSupported - int globalL1CacheSupported - int localL1CacheSupported - size_t sharedMemPerMultiprocessor - int regsPerMultiprocessor - int managedMemory - int isMultiGpuBoard - int multiGpuBoardGroupID - int hostNativeAtomicSupported - int pageableMemoryAccess - int concurrentManagedAccess - int computePreemptionSupported - int canUseHostPointerForRegisteredMem - int cooperativeLaunch - size_t sharedMemPerBlockOptin - int pageableMemoryAccessUsesHostPageTables - int directManagedMemAccessFromHost - int maxBlocksPerMultiProcessor - int accessPolicyMaxWindowSize - size_t reservedSharedMemPerBlock - int hostRegisterSupported - int sparseCudaArraySupported - int hostRegisterReadOnlySupported - int timelineSemaphoreInteropSupported - int memoryPoolsSupported - int gpuDirectRDMASupported - unsigned int gpuDirectRDMAFlushWritesOptions - int gpuDirectRDMAWritesOrdering - unsigned int memoryPoolSupportedHandleTypes - int deferredMappingCudaArraySupported - int ipcEventSupported - int clusterLaunch - int unifiedFunctionPointers - int deviceNumaConfig - int deviceNumaId - int mpsEnabled - int hostNumaId - unsigned int gpuPciDeviceID - unsigned int gpuPciSubsystemID - int hostNumaMultinodeIpcSupported - int reserved[56] - - cdef struct cudaIpcEventHandle_st: - char reserved[64] - - ctypedef cudaIpcEventHandle_st cudaIpcEventHandle_t - - cdef struct cudaIpcMemHandle_st: - char reserved[64] - - ctypedef cudaIpcMemHandle_st cudaIpcMemHandle_t - - cdef struct cudaMemFabricHandle_st: - char reserved[64] - - ctypedef cudaMemFabricHandle_st cudaMemFabricHandle_t - - cdef struct anon_struct8: - void* handle - const void* name - - cdef union anon_union3: - int fd - anon_struct8 win32 - const void* nvSciBufObject - - cdef struct cudaExternalMemoryHandleDesc: - cudaExternalMemoryHandleType type - anon_union3 handle - unsigned long long size - unsigned int flags - unsigned int reserved[16] - - cdef struct cudaExternalMemoryBufferDesc: - unsigned long long offset - unsigned long long size - unsigned int flags - unsigned int reserved[16] - - cdef struct cudaExternalMemoryMipmappedArrayDesc: - unsigned long long offset - cudaChannelFormatDesc formatDesc - cudaExtent extent - unsigned int flags - unsigned int numLevels - unsigned int reserved[16] - - cdef struct anon_struct9: - void* handle - const void* name - - cdef union anon_union4: - int fd - anon_struct9 win32 - const void* nvSciSyncObj - - cdef struct cudaExternalSemaphoreHandleDesc: - cudaExternalSemaphoreHandleType type - anon_union4 handle - unsigned int flags - unsigned int reserved[16] - - cdef struct anon_struct10: - unsigned long long value - - cdef union anon_union5: - void* fence - unsigned long long reserved - - cdef struct anon_struct11: - unsigned long long key - - cdef struct anon_struct12: - anon_struct10 fence - anon_union5 nvSciSync - anon_struct11 keyedMutex - unsigned int reserved[12] - - cdef struct cudaExternalSemaphoreSignalParams: - anon_struct12 params - unsigned int flags - unsigned int reserved[16] - - cdef struct anon_struct13: - unsigned long long value - - cdef union anon_union6: - void* fence - unsigned long long reserved - - cdef struct anon_struct14: - unsigned long long key - unsigned int timeoutMs - - cdef struct anon_struct15: - anon_struct13 fence - anon_union6 nvSciSync - anon_struct14 keyedMutex - unsigned int reserved[10] - - cdef struct cudaExternalSemaphoreWaitParams: - anon_struct15 params - unsigned int flags - unsigned int reserved[16] - - cdef struct cudaDevSmResource: - unsigned int smCount - unsigned int minSmPartitionSize - unsigned int smCoscheduledAlignment - unsigned int flags - - cdef struct cudaDevWorkqueueConfigResource: - int device - unsigned int wqConcurrencyLimit - cudaDevWorkqueueConfigScope sharingScope - - cdef struct cudaDevWorkqueueResource: - unsigned char reserved[40] - - cdef struct cudaDevSmResourceGroupParams_st: - unsigned int smCount - unsigned int coscheduledSmCount - unsigned int preferredCoscheduledSmCount - unsigned int flags - unsigned int reserved[12] - - ctypedef cudaDevSmResourceGroupParams_st cudaDevSmResourceGroupParams - - cdef struct cudaDevResource_st: - cudaDevResourceType type - unsigned char _internal_padding[92] - cudaDevSmResource sm - cudaDevWorkqueueConfigResource wqConfig - cudaDevWorkqueueResource wq - unsigned char _oversize[40] - cudaDevResource_st* nextResource - - ctypedef cudaDevResource_st cudaDevResource - - cdef struct CUstream_st: - pass - ctypedef CUstream_st* cudaStream_t - - cdef struct CUevent_st: - pass - ctypedef CUevent_st* cudaEvent_t - - cdef struct cudaGraphicsResource: - pass - ctypedef cudaGraphicsResource* cudaGraphicsResource_t - - cdef struct CUexternalMemory_st: - pass - ctypedef CUexternalMemory_st* cudaExternalMemory_t - - cdef struct CUexternalSemaphore_st: - pass - ctypedef CUexternalSemaphore_st* cudaExternalSemaphore_t - - cdef struct CUgraph_st: - pass - ctypedef CUgraph_st* cudaGraph_t - - cdef struct CUgraphNode_st: - pass - ctypedef CUgraphNode_st* cudaGraphNode_t - - cdef struct CUuserObject_st: - pass - ctypedef CUuserObject_st* cudaUserObject_t - - ctypedef unsigned long long cudaGraphConditionalHandle - - cdef struct CUfunc_st: - pass - ctypedef CUfunc_st* cudaFunction_t - - cdef struct CUkern_st: - pass - ctypedef CUkern_st* cudaKernel_t - - cdef struct cudalibraryHostUniversalFunctionAndDataTable: - void* functionTable - size_t functionWindowSize - void* dataTable - size_t dataWindowSize - - cdef struct CUlib_st: - pass - ctypedef CUlib_st* cudaLibrary_t - - cdef struct CUmemPoolHandle_st: - pass - ctypedef CUmemPoolHandle_st* cudaMemPool_t - - cdef struct cudaKernelNodeParams: - void* func - dim3 gridDim - dim3 blockDim - unsigned int sharedMemBytes - void** kernelParams - void** extra - - cdef struct cudaKernelNodeParamsV2: - void* func - cudaKernel_t kern - cudaFunction_t cuFunc - dim3 gridDim - dim3 blockDim - unsigned int sharedMemBytes - void** kernelParams - void** extra - cudaExecutionContext_t ctx - cudaKernelFunctionType functionType - - cdef struct cudaExternalSemaphoreSignalNodeParams: - cudaExternalSemaphore_t* extSemArray - const cudaExternalSemaphoreSignalParams* paramsArray - unsigned int numExtSems - - cdef struct cudaExternalSemaphoreSignalNodeParamsV2: - cudaExternalSemaphore_t* extSemArray - const cudaExternalSemaphoreSignalParams* paramsArray - unsigned int numExtSems - - cdef struct cudaExternalSemaphoreWaitNodeParams: - cudaExternalSemaphore_t* extSemArray - const cudaExternalSemaphoreWaitParams* paramsArray - unsigned int numExtSems - - cdef struct cudaExternalSemaphoreWaitNodeParamsV2: - cudaExternalSemaphore_t* extSemArray - const cudaExternalSemaphoreWaitParams* paramsArray - unsigned int numExtSems - - cdef struct cudaConditionalNodeParams: - cudaGraphConditionalHandle handle - cudaGraphConditionalNodeType type - unsigned int size - cudaGraph_t* phGraph_out - cudaExecutionContext_t ctx - - cdef struct cudaChildGraphNodeParams: - cudaGraph_t graph - cudaGraphChildGraphNodeOwnership ownership - - cdef struct cudaEventRecordNodeParams: - cudaEvent_t event - - cdef struct cudaEventWaitNodeParams: - cudaEvent_t event - - cdef struct cudaGraphNodeParams: - cudaGraphNodeType type - int reserved0[3] - long long reserved1[29] - cudaKernelNodeParamsV2 kernel - cudaMemcpyNodeParams memcpy - cudaMemsetParamsV2 memset - cudaHostNodeParamsV2 host - cudaChildGraphNodeParams graph - cudaEventWaitNodeParams eventWait - cudaEventRecordNodeParams eventRecord - cudaExternalSemaphoreSignalNodeParamsV2 extSemSignal - cudaExternalSemaphoreWaitNodeParamsV2 extSemWait - cudaMemAllocNodeParamsV2 alloc - cudaMemFreeNodeParams free - cudaConditionalNodeParams conditional - long long reserved2 - - cdef enum cudaGraphDependencyType_enum: - cudaGraphDependencyTypeDefault = 0 - cudaGraphDependencyTypeProgrammatic = 1 - - ctypedef cudaGraphDependencyType_enum cudaGraphDependencyType - - cdef struct cudaGraphEdgeData_st: - unsigned char from_port - unsigned char to_port - unsigned char type - unsigned char reserved[5] - - ctypedef cudaGraphEdgeData_st cudaGraphEdgeData - - cdef struct CUgraphExec_st: - pass - ctypedef CUgraphExec_st* cudaGraphExec_t - - cdef enum cudaGraphInstantiateResult: - cudaGraphInstantiateSuccess = 0 - cudaGraphInstantiateError = 1 - cudaGraphInstantiateInvalidStructure = 2 - cudaGraphInstantiateNodeOperationNotSupported = 3 - cudaGraphInstantiateMultipleDevicesNotSupported = 4 - cudaGraphInstantiateConditionalHandleUnused = 5 - - cdef struct cudaGraphInstantiateParams_st: - unsigned long long flags - cudaStream_t uploadStream - cudaGraphNode_t errNode_out - cudaGraphInstantiateResult result_out - - ctypedef cudaGraphInstantiateParams_st cudaGraphInstantiateParams - - cdef struct cudaGraphExecUpdateResultInfo_st: - cudaGraphExecUpdateResult result - cudaGraphNode_t errorNode - cudaGraphNode_t errorFromNode - - ctypedef cudaGraphExecUpdateResultInfo_st cudaGraphExecUpdateResultInfo - - cdef struct CUgraphDeviceUpdatableNode_st: - pass - ctypedef CUgraphDeviceUpdatableNode_st* cudaGraphDeviceNode_t - - cdef struct anon_struct16: - const void* pValue - size_t offset - size_t size - - cdef union anon_union10: - dim3 gridDim - anon_struct16 param - unsigned int isEnabled - - cdef struct cudaGraphKernelNodeUpdate: - cudaGraphDeviceNode_t node - cudaGraphKernelNodeField field - anon_union10 updateData - - cdef enum cudaLaunchMemSyncDomain: - cudaLaunchMemSyncDomainDefault = 0 - cudaLaunchMemSyncDomainRemote = 1 - - cdef struct cudaLaunchMemSyncDomainMap_st: - unsigned char default_ - unsigned char remote - - ctypedef cudaLaunchMemSyncDomainMap_st cudaLaunchMemSyncDomainMap - - cdef enum cudaLaunchAttributePortableClusterMode: - cudaLaunchPortableClusterModeDefault = 0 - cudaLaunchPortableClusterModeRequirePortable = 1 - cudaLaunchPortableClusterModeAllowNonPortable = 2 - - cdef enum cudaLaunchAttributeID: - cudaLaunchAttributeIgnore = 0 - cudaLaunchAttributeAccessPolicyWindow = 1 - cudaLaunchAttributeCooperative = 2 - cudaLaunchAttributeSynchronizationPolicy = 3 - cudaLaunchAttributeClusterDimension = 4 - cudaLaunchAttributeClusterSchedulingPolicyPreference = 5 - cudaLaunchAttributeProgrammaticStreamSerialization = 6 - cudaLaunchAttributeProgrammaticEvent = 7 - cudaLaunchAttributePriority = 8 - cudaLaunchAttributeMemSyncDomainMap = 9 - cudaLaunchAttributeMemSyncDomain = 10 - cudaLaunchAttributePreferredClusterDimension = 11 - cudaLaunchAttributeLaunchCompletionEvent = 12 - cudaLaunchAttributeDeviceUpdatableKernelNode = 13 - cudaLaunchAttributePreferredSharedMemoryCarveout = 14 - cudaLaunchAttributeNvlinkUtilCentricScheduling = 16 - cudaLaunchAttributePortableClusterSizeMode = 17 - cudaLaunchAttributeSharedMemoryMode = 18 - - cdef struct anon_struct17: - unsigned int x - unsigned int y - unsigned int z - - cdef struct anon_struct18: - cudaEvent_t event - int flags - int triggerAtBlockStart - - cdef struct anon_struct19: - unsigned int x - unsigned int y - unsigned int z - - cdef struct anon_struct20: - cudaEvent_t event - int flags - - cdef struct anon_struct21: - int deviceUpdatable - cudaGraphDeviceNode_t devNode - - cdef union cudaLaunchAttributeValue: - char pad[64] - cudaAccessPolicyWindow accessPolicyWindow - int cooperative - cudaSynchronizationPolicy syncPolicy - anon_struct17 clusterDim - cudaClusterSchedulingPolicy clusterSchedulingPolicyPreference - int programmaticStreamSerializationAllowed - anon_struct18 programmaticEvent - int priority - cudaLaunchMemSyncDomainMap memSyncDomainMap - cudaLaunchMemSyncDomain memSyncDomain - anon_struct19 preferredClusterDim - anon_struct20 launchCompletionEvent - anon_struct21 deviceUpdatableKernelNode - unsigned int sharedMemCarveout - unsigned int nvlinkUtilCentricScheduling - cudaLaunchAttributePortableClusterMode portableClusterSizeMode - cudaSharedMemoryMode sharedMemoryMode - - cdef struct cudaLaunchAttribute_st: - cudaLaunchAttributeID id - cudaLaunchAttributeValue val - - ctypedef cudaLaunchAttribute_st cudaLaunchAttribute - - cdef struct cudaAsyncCallbackEntry: - pass - ctypedef cudaAsyncCallbackEntry* cudaAsyncCallbackHandle_t - - cdef enum cudaAsyncNotificationType_enum: - cudaAsyncNotificationTypeOverBudget = 1 - - ctypedef cudaAsyncNotificationType_enum cudaAsyncNotificationType - - cdef struct anon_struct22: - unsigned long long bytesOverBudget - - cdef union anon_union11: - anon_struct22 overBudget - - cdef struct cudaAsyncNotificationInfo: - cudaAsyncNotificationType type - anon_union11 info - - ctypedef cudaAsyncNotificationInfo cudaAsyncNotificationInfo_t - - ctypedef void (*cudaAsyncCallback)(cudaAsyncNotificationInfo_t* , void* , cudaAsyncCallbackHandle_t ) - - cdef enum CUDAlogLevel_enum: - cudaLogLevelError = 0 - cudaLogLevelWarning = 1 - - ctypedef CUDAlogLevel_enum cudaLogLevel - - cdef struct CUlogsCallbackEntry_st: - pass - ctypedef CUlogsCallbackEntry_st* cudaLogsCallbackHandle - - ctypedef unsigned int cudaLogIterator - - cdef enum cudaChannelFormatKind: - cudaChannelFormatKindSigned = 0 - cudaChannelFormatKindUnsigned = 1 - cudaChannelFormatKindFloat = 2 - cudaChannelFormatKindNone = 3 - cudaChannelFormatKindNV12 = 4 - cudaChannelFormatKindUnsignedNormalized8X1 = 5 - cudaChannelFormatKindUnsignedNormalized8X2 = 6 - cudaChannelFormatKindUnsignedNormalized8X4 = 7 - cudaChannelFormatKindUnsignedNormalized16X1 = 8 - cudaChannelFormatKindUnsignedNormalized16X2 = 9 - cudaChannelFormatKindUnsignedNormalized16X4 = 10 - cudaChannelFormatKindSignedNormalized8X1 = 11 - cudaChannelFormatKindSignedNormalized8X2 = 12 - cudaChannelFormatKindSignedNormalized8X4 = 13 - cudaChannelFormatKindSignedNormalized16X1 = 14 - cudaChannelFormatKindSignedNormalized16X2 = 15 - cudaChannelFormatKindSignedNormalized16X4 = 16 - cudaChannelFormatKindUnsignedBlockCompressed1 = 17 - cudaChannelFormatKindUnsignedBlockCompressed1SRGB = 18 - cudaChannelFormatKindUnsignedBlockCompressed2 = 19 - cudaChannelFormatKindUnsignedBlockCompressed2SRGB = 20 - cudaChannelFormatKindUnsignedBlockCompressed3 = 21 - cudaChannelFormatKindUnsignedBlockCompressed3SRGB = 22 - cudaChannelFormatKindUnsignedBlockCompressed4 = 23 - cudaChannelFormatKindSignedBlockCompressed4 = 24 - cudaChannelFormatKindUnsignedBlockCompressed5 = 25 - cudaChannelFormatKindSignedBlockCompressed5 = 26 - cudaChannelFormatKindUnsignedBlockCompressed6H = 27 - cudaChannelFormatKindSignedBlockCompressed6H = 28 - cudaChannelFormatKindUnsignedBlockCompressed7 = 29 - cudaChannelFormatKindUnsignedBlockCompressed7SRGB = 30 - cudaChannelFormatKindUnsignedNormalized1010102 = 31 - cudaChannelFormatKindUnsigned8Packed422 = 32 - cudaChannelFormatKindUnsigned8Packed444 = 33 - cudaChannelFormatKindUnsigned8SemiPlanar420 = 34 - cudaChannelFormatKindUnsigned16SemiPlanar420 = 35 - cudaChannelFormatKindUnsigned8SemiPlanar422 = 36 - cudaChannelFormatKindUnsigned16SemiPlanar422 = 37 - cudaChannelFormatKindUnsigned8SemiPlanar444 = 38 - cudaChannelFormatKindUnsigned16SemiPlanar444 = 39 - cudaChannelFormatKindUnsigned8Planar420 = 40 - cudaChannelFormatKindUnsigned16Planar420 = 41 - cudaChannelFormatKindUnsigned8Planar422 = 42 - cudaChannelFormatKindUnsigned16Planar422 = 43 - cudaChannelFormatKindUnsigned8Planar444 = 44 - cudaChannelFormatKindUnsigned16Planar444 = 45 - - cdef enum cudaMemoryType: - cudaMemoryTypeUnregistered = 0 - cudaMemoryTypeHost = 1 - cudaMemoryTypeDevice = 2 - cudaMemoryTypeManaged = 3 - - cdef enum cudaMemcpyKind: - cudaMemcpyHostToHost = 0 - cudaMemcpyHostToDevice = 1 - cudaMemcpyDeviceToHost = 2 - cudaMemcpyDeviceToDevice = 3 - cudaMemcpyDefault = 4 - - cdef enum cudaAccessProperty: - cudaAccessPropertyNormal = 0 - cudaAccessPropertyStreaming = 1 - cudaAccessPropertyPersisting = 2 - - cdef enum cudaStreamCaptureStatus: - cudaStreamCaptureStatusNone = 0 - cudaStreamCaptureStatusActive = 1 - cudaStreamCaptureStatusInvalidated = 2 - - cdef enum cudaGraphRecaptureStatus: - cudaGraphRecaptureEligibleForUpdate = 0 - cudaGraphRecaptureIneligibleForUpdate = 1 - cudaGraphRecaptureError = 2 - - cdef enum cudaStreamCaptureMode: - cudaStreamCaptureModeGlobal = 0 - cudaStreamCaptureModeThreadLocal = 1 - cudaStreamCaptureModeRelaxed = 2 - - cdef enum cudaSynchronizationPolicy: - cudaSyncPolicyAuto = 1 - cudaSyncPolicySpin = 2 - cudaSyncPolicyYield = 3 - cudaSyncPolicyBlockingSync = 4 - - cdef enum cudaClusterSchedulingPolicy: - cudaClusterSchedulingPolicyDefault = 0 - cudaClusterSchedulingPolicySpread = 1 - cudaClusterSchedulingPolicyLoadBalancing = 2 - - cdef enum cudaStreamUpdateCaptureDependenciesFlags: - cudaStreamAddCaptureDependencies = 0 - cudaStreamSetCaptureDependencies = 1 - - cdef enum cudaUserObjectFlags: - cudaUserObjectNoDestructorSync = 1 - - cdef enum cudaUserObjectRetainFlags: - cudaGraphUserObjectMove = 1 - - cdef enum cudaHostTaskSyncMode: - cudaHostTaskBlocking = 0 - cudaHostTaskSpinWait = 1 - - cdef enum cudaGraphicsRegisterFlags: - cudaGraphicsRegisterFlagsNone = 0 - cudaGraphicsRegisterFlagsReadOnly = 1 - cudaGraphicsRegisterFlagsWriteDiscard = 2 - cudaGraphicsRegisterFlagsSurfaceLoadStore = 4 - cudaGraphicsRegisterFlagsTextureGather = 8 - - cdef enum cudaGraphicsMapFlags: - cudaGraphicsMapFlagsNone = 0 - cudaGraphicsMapFlagsReadOnly = 1 - cudaGraphicsMapFlagsWriteDiscard = 2 - - cdef enum cudaGraphicsCubeFace: - cudaGraphicsCubeFacePositiveX = 0 - cudaGraphicsCubeFaceNegativeX = 1 - cudaGraphicsCubeFacePositiveY = 2 - cudaGraphicsCubeFaceNegativeY = 3 - cudaGraphicsCubeFacePositiveZ = 4 - cudaGraphicsCubeFaceNegativeZ = 5 - - cdef enum cudaResourceType: - cudaResourceTypeArray = 0 - cudaResourceTypeMipmappedArray = 1 - cudaResourceTypeLinear = 2 - cudaResourceTypePitch2D = 3 - - cdef enum cudaResourceViewFormat: - cudaResViewFormatNone = 0 - cudaResViewFormatUnsignedChar1 = 1 - cudaResViewFormatUnsignedChar2 = 2 - cudaResViewFormatUnsignedChar4 = 3 - cudaResViewFormatSignedChar1 = 4 - cudaResViewFormatSignedChar2 = 5 - cudaResViewFormatSignedChar4 = 6 - cudaResViewFormatUnsignedShort1 = 7 - cudaResViewFormatUnsignedShort2 = 8 - cudaResViewFormatUnsignedShort4 = 9 - cudaResViewFormatSignedShort1 = 10 - cudaResViewFormatSignedShort2 = 11 - cudaResViewFormatSignedShort4 = 12 - cudaResViewFormatUnsignedInt1 = 13 - cudaResViewFormatUnsignedInt2 = 14 - cudaResViewFormatUnsignedInt4 = 15 - cudaResViewFormatSignedInt1 = 16 - cudaResViewFormatSignedInt2 = 17 - cudaResViewFormatSignedInt4 = 18 - cudaResViewFormatHalf1 = 19 - cudaResViewFormatHalf2 = 20 - cudaResViewFormatHalf4 = 21 - cudaResViewFormatFloat1 = 22 - cudaResViewFormatFloat2 = 23 - cudaResViewFormatFloat4 = 24 - cudaResViewFormatUnsignedBlockCompressed1 = 25 - cudaResViewFormatUnsignedBlockCompressed2 = 26 - cudaResViewFormatUnsignedBlockCompressed3 = 27 - cudaResViewFormatUnsignedBlockCompressed4 = 28 - cudaResViewFormatSignedBlockCompressed4 = 29 - cudaResViewFormatUnsignedBlockCompressed5 = 30 - cudaResViewFormatSignedBlockCompressed5 = 31 - cudaResViewFormatUnsignedBlockCompressed6H = 32 - cudaResViewFormatSignedBlockCompressed6H = 33 - cudaResViewFormatUnsignedBlockCompressed7 = 34 - - cdef enum cudaFuncAttribute: - cudaFuncAttributeMaxDynamicSharedMemorySize = 8 - cudaFuncAttributePreferredSharedMemoryCarveout = 9 - cudaFuncAttributeClusterDimMustBeSet = 10 - cudaFuncAttributeRequiredClusterWidth = 11 - cudaFuncAttributeRequiredClusterHeight = 12 - cudaFuncAttributeRequiredClusterDepth = 13 - cudaFuncAttributeNonPortableClusterSizeAllowed = 14 - cudaFuncAttributeClusterSchedulingPolicyPreference = 15 - cudaFuncAttributeMax = 16 - - cdef enum cudaFuncCache: - cudaFuncCachePreferNone = 0 - cudaFuncCachePreferShared = 1 - cudaFuncCachePreferL1 = 2 - cudaFuncCachePreferEqual = 3 - - cdef enum cudaSharedMemConfig: - cudaSharedMemBankSizeDefault = 0 - cudaSharedMemBankSizeFourByte = 1 - cudaSharedMemBankSizeEightByte = 2 - - cdef enum cudaSharedCarveout: - cudaSharedmemCarveoutDefault = -1 - cudaSharedmemCarveoutMaxL1 = 0 - cudaSharedmemCarveoutMaxShared = 100 - - cdef enum cudaComputeMode: - cudaComputeModeDefault = 0 - cudaComputeModeExclusive = 1 - cudaComputeModeProhibited = 2 - cudaComputeModeExclusiveProcess = 3 - - cdef enum cudaLimit: - cudaLimitStackSize = 0 - cudaLimitPrintfFifoSize = 1 - cudaLimitMallocHeapSize = 2 - cudaLimitDevRuntimeSyncDepth = 3 - cudaLimitDevRuntimePendingLaunchCount = 4 - cudaLimitMaxL2FetchGranularity = 5 - cudaLimitPersistingL2CacheSize = 6 - - cdef enum cudaMemoryAdvise: - cudaMemAdviseSetReadMostly = 1 - cudaMemAdviseUnsetReadMostly = 2 - cudaMemAdviseSetPreferredLocation = 3 - cudaMemAdviseUnsetPreferredLocation = 4 - cudaMemAdviseSetAccessedBy = 5 - cudaMemAdviseUnsetAccessedBy = 6 - - cdef enum cudaMemRangeAttribute: - cudaMemRangeAttributeReadMostly = 1 - cudaMemRangeAttributePreferredLocation = 2 - cudaMemRangeAttributeAccessedBy = 3 - cudaMemRangeAttributeLastPrefetchLocation = 4 - cudaMemRangeAttributePreferredLocationType = 5 - cudaMemRangeAttributePreferredLocationId = 6 - cudaMemRangeAttributeLastPrefetchLocationType = 7 - cudaMemRangeAttributeLastPrefetchLocationId = 8 - - cdef enum cudaFlushGPUDirectRDMAWritesOptions: - cudaFlushGPUDirectRDMAWritesOptionHost = 1 - cudaFlushGPUDirectRDMAWritesOptionMemOps = 2 - - cdef enum cudaGPUDirectRDMAWritesOrdering: - cudaGPUDirectRDMAWritesOrderingNone = 0 - cudaGPUDirectRDMAWritesOrderingOwner = 100 - cudaGPUDirectRDMAWritesOrderingAllDevices = 200 - - cdef enum cudaFlushGPUDirectRDMAWritesScope: - cudaFlushGPUDirectRDMAWritesToOwner = 100 - cudaFlushGPUDirectRDMAWritesToAllDevices = 200 - - cdef enum cudaFlushGPUDirectRDMAWritesTarget: - cudaFlushGPUDirectRDMAWritesTargetCurrentDevice = 0 - - cdef enum cudaDeviceAttr: - cudaDevAttrMaxThreadsPerBlock = 1 - cudaDevAttrMaxBlockDimX = 2 - cudaDevAttrMaxBlockDimY = 3 - cudaDevAttrMaxBlockDimZ = 4 - cudaDevAttrMaxGridDimX = 5 - cudaDevAttrMaxGridDimY = 6 - cudaDevAttrMaxGridDimZ = 7 - cudaDevAttrMaxSharedMemoryPerBlock = 8 - cudaDevAttrTotalConstantMemory = 9 - cudaDevAttrWarpSize = 10 - cudaDevAttrMaxPitch = 11 - cudaDevAttrMaxRegistersPerBlock = 12 - cudaDevAttrClockRate = 13 - cudaDevAttrTextureAlignment = 14 - cudaDevAttrGpuOverlap = 15 - cudaDevAttrMultiProcessorCount = 16 - cudaDevAttrKernelExecTimeout = 17 - cudaDevAttrIntegrated = 18 - cudaDevAttrCanMapHostMemory = 19 - cudaDevAttrComputeMode = 20 - cudaDevAttrMaxTexture1DWidth = 21 - cudaDevAttrMaxTexture2DWidth = 22 - cudaDevAttrMaxTexture2DHeight = 23 - cudaDevAttrMaxTexture3DWidth = 24 - cudaDevAttrMaxTexture3DHeight = 25 - cudaDevAttrMaxTexture3DDepth = 26 - cudaDevAttrMaxTexture2DLayeredWidth = 27 - cudaDevAttrMaxTexture2DLayeredHeight = 28 - cudaDevAttrMaxTexture2DLayeredLayers = 29 - cudaDevAttrSurfaceAlignment = 30 - cudaDevAttrConcurrentKernels = 31 - cudaDevAttrEccEnabled = 32 - cudaDevAttrPciBusId = 33 - cudaDevAttrPciDeviceId = 34 - cudaDevAttrTccDriver = 35 - cudaDevAttrMemoryClockRate = 36 - cudaDevAttrGlobalMemoryBusWidth = 37 - cudaDevAttrL2CacheSize = 38 - cudaDevAttrMaxThreadsPerMultiProcessor = 39 - cudaDevAttrAsyncEngineCount = 40 - cudaDevAttrUnifiedAddressing = 41 - cudaDevAttrMaxTexture1DLayeredWidth = 42 - cudaDevAttrMaxTexture1DLayeredLayers = 43 - cudaDevAttrMaxTexture2DGatherWidth = 45 - cudaDevAttrMaxTexture2DGatherHeight = 46 - cudaDevAttrMaxTexture3DWidthAlt = 47 - cudaDevAttrMaxTexture3DHeightAlt = 48 - cudaDevAttrMaxTexture3DDepthAlt = 49 - cudaDevAttrPciDomainId = 50 - cudaDevAttrTexturePitchAlignment = 51 - cudaDevAttrMaxTextureCubemapWidth = 52 - cudaDevAttrMaxTextureCubemapLayeredWidth = 53 - cudaDevAttrMaxTextureCubemapLayeredLayers = 54 - cudaDevAttrMaxSurface1DWidth = 55 - cudaDevAttrMaxSurface2DWidth = 56 - cudaDevAttrMaxSurface2DHeight = 57 - cudaDevAttrMaxSurface3DWidth = 58 - cudaDevAttrMaxSurface3DHeight = 59 - cudaDevAttrMaxSurface3DDepth = 60 - cudaDevAttrMaxSurface1DLayeredWidth = 61 - cudaDevAttrMaxSurface1DLayeredLayers = 62 - cudaDevAttrMaxSurface2DLayeredWidth = 63 - cudaDevAttrMaxSurface2DLayeredHeight = 64 - cudaDevAttrMaxSurface2DLayeredLayers = 65 - cudaDevAttrMaxSurfaceCubemapWidth = 66 - cudaDevAttrMaxSurfaceCubemapLayeredWidth = 67 - cudaDevAttrMaxSurfaceCubemapLayeredLayers = 68 - cudaDevAttrMaxTexture1DLinearWidth = 69 - cudaDevAttrMaxTexture2DLinearWidth = 70 - cudaDevAttrMaxTexture2DLinearHeight = 71 - cudaDevAttrMaxTexture2DLinearPitch = 72 - cudaDevAttrMaxTexture2DMipmappedWidth = 73 - cudaDevAttrMaxTexture2DMipmappedHeight = 74 - cudaDevAttrComputeCapabilityMajor = 75 - cudaDevAttrComputeCapabilityMinor = 76 - cudaDevAttrMaxTexture1DMipmappedWidth = 77 - cudaDevAttrStreamPrioritiesSupported = 78 - cudaDevAttrGlobalL1CacheSupported = 79 - cudaDevAttrLocalL1CacheSupported = 80 - cudaDevAttrMaxSharedMemoryPerMultiprocessor = 81 - cudaDevAttrMaxRegistersPerMultiprocessor = 82 - cudaDevAttrManagedMemory = 83 - cudaDevAttrIsMultiGpuBoard = 84 - cudaDevAttrMultiGpuBoardGroupID = 85 - cudaDevAttrHostNativeAtomicSupported = 86 - cudaDevAttrSingleToDoublePrecisionPerfRatio = 87 - cudaDevAttrPageableMemoryAccess = 88 - cudaDevAttrConcurrentManagedAccess = 89 - cudaDevAttrComputePreemptionSupported = 90 - cudaDevAttrCanUseHostPointerForRegisteredMem = 91 - cudaDevAttrReserved92 = 92 - cudaDevAttrReserved93 = 93 - cudaDevAttrReserved94 = 94 - cudaDevAttrCooperativeLaunch = 95 - cudaDevAttrReserved96 = 96 - cudaDevAttrMaxSharedMemoryPerBlockOptin = 97 - cudaDevAttrCanFlushRemoteWrites = 98 - cudaDevAttrHostRegisterSupported = 99 - cudaDevAttrPageableMemoryAccessUsesHostPageTables = 100 - cudaDevAttrDirectManagedMemAccessFromHost = 101 - cudaDevAttrMaxBlocksPerMultiprocessor = 106 - cudaDevAttrMaxPersistingL2CacheSize = 108 - cudaDevAttrMaxAccessPolicyWindowSize = 109 - cudaDevAttrReservedSharedMemoryPerBlock = 111 - cudaDevAttrSparseCudaArraySupported = 112 - cudaDevAttrHostRegisterReadOnlySupported = 113 - cudaDevAttrTimelineSemaphoreInteropSupported = 114 - cudaDevAttrMemoryPoolsSupported = 115 - cudaDevAttrGPUDirectRDMASupported = 116 - cudaDevAttrGPUDirectRDMAFlushWritesOptions = 117 - cudaDevAttrGPUDirectRDMAWritesOrdering = 118 - cudaDevAttrMemoryPoolSupportedHandleTypes = 119 - cudaDevAttrClusterLaunch = 120 - cudaDevAttrDeferredMappingCudaArraySupported = 121 - cudaDevAttrReserved122 = 122 - cudaDevAttrReserved123 = 123 - cudaDevAttrReserved124 = 124 - cudaDevAttrIpcEventSupport = 125 - cudaDevAttrMemSyncDomainCount = 126 - cudaDevAttrReserved127 = 127 - cudaDevAttrReserved128 = 128 - cudaDevAttrReserved129 = 129 - cudaDevAttrNumaConfig = 130 - cudaDevAttrNumaId = 131 - cudaDevAttrReserved132 = 132 - cudaDevAttrMpsEnabled = 133 - cudaDevAttrHostNumaId = 134 - cudaDevAttrD3D12CigSupported = 135 - cudaDevAttrVulkanCigSupported = 138 - cudaDevAttrGpuPciDeviceId = 139 - cudaDevAttrGpuPciSubsystemId = 140 - cudaDevAttrReserved141 = 141 - cudaDevAttrHostNumaMemoryPoolsSupported = 142 - cudaDevAttrHostNumaMultinodeIpcSupported = 143 - cudaDevAttrHostMemoryPoolsSupported = 144 - cudaDevAttrReserved145 = 145 - cudaDevAttrOnlyPartialHostNativeAtomicSupported = 147 - cudaDevAttrAtomicReductionSupported = 148 - cudaDevAttrCigStreamsSupported = 151 - cudaDevAttrMax = 152 - - cdef enum cudaMemPoolAttr: - cudaMemPoolReuseFollowEventDependencies = 1 - cudaMemPoolReuseAllowOpportunistic = 2 - cudaMemPoolReuseAllowInternalDependencies = 3 - cudaMemPoolAttrReleaseThreshold = 4 - cudaMemPoolAttrReservedMemCurrent = 5 - cudaMemPoolAttrReservedMemHigh = 6 - cudaMemPoolAttrUsedMemCurrent = 7 - cudaMemPoolAttrUsedMemHigh = 8 - cudaMemPoolAttrAllocationType = 9 - cudaMemPoolAttrExportHandleTypes = 10 - cudaMemPoolAttrLocationId = 11 - cudaMemPoolAttrLocationType = 12 - cudaMemPoolAttrMaxPoolSize = 13 - cudaMemPoolAttrHwDecompressEnabled = 14 - - cdef enum cudaMemLocationType: - cudaMemLocationTypeInvalid = 0 - cudaMemLocationTypeNone = 0 - cudaMemLocationTypeDevice = 1 - cudaMemLocationTypeHost = 2 - cudaMemLocationTypeHostNuma = 3 - cudaMemLocationTypeHostNumaCurrent = 4 - cudaMemLocationTypeInvisible = 5 - - cdef enum cudaMemAccessFlags: - cudaMemAccessFlagsProtNone = 0 - cudaMemAccessFlagsProtRead = 1 - cudaMemAccessFlagsProtReadWrite = 3 - - cdef enum cudaMemAllocationType: - cudaMemAllocationTypeInvalid = 0 - cudaMemAllocationTypePinned = 1 - cudaMemAllocationTypeManaged = 2 - cudaMemAllocationTypeMax = 2147483647 - - cdef enum cudaMemAllocationHandleType: - cudaMemHandleTypeNone = 0 - cudaMemHandleTypePosixFileDescriptor = 1 - cudaMemHandleTypeWin32 = 2 - cudaMemHandleTypeWin32Kmt = 4 - cudaMemHandleTypeFabric = 8 - - cdef enum cudaGraphMemAttributeType: - cudaGraphMemAttrUsedMemCurrent = 0 - cudaGraphMemAttrUsedMemHigh = 1 - cudaGraphMemAttrReservedMemCurrent = 2 - cudaGraphMemAttrReservedMemHigh = 3 - - cdef enum cudaMemcpyFlags: - cudaMemcpyFlagDefault = 0 - cudaMemcpyFlagPreferOverlapWithCompute = 1 - - cdef enum cudaMemcpySrcAccessOrder: - cudaMemcpySrcAccessOrderInvalid = 0 - cudaMemcpySrcAccessOrderStream = 1 - cudaMemcpySrcAccessOrderDuringApiCall = 2 - cudaMemcpySrcAccessOrderAny = 3 - cudaMemcpySrcAccessOrderMax = 2147483647 - - cdef enum cudaMemcpy3DOperandType: - cudaMemcpyOperandTypePointer = 1 - cudaMemcpyOperandTypeArray = 2 - cudaMemcpyOperandTypeMax = 2147483647 - - cdef enum cudaDeviceP2PAttr: - cudaDevP2PAttrPerformanceRank = 1 - cudaDevP2PAttrAccessSupported = 2 - cudaDevP2PAttrNativeAtomicSupported = 3 - cudaDevP2PAttrCudaArrayAccessSupported = 4 - cudaDevP2PAttrOnlyPartialNativeAtomicSupported = 5 - - cdef enum cudaAtomicOperation: - cudaAtomicOperationIntegerAdd = 0 - cudaAtomicOperationIntegerMin = 1 - cudaAtomicOperationIntegerMax = 2 - cudaAtomicOperationIntegerIncrement = 3 - cudaAtomicOperationIntegerDecrement = 4 - cudaAtomicOperationAnd = 5 - cudaAtomicOperationOr = 6 - cudaAtomicOperationXOR = 7 - cudaAtomicOperationExchange = 8 - cudaAtomicOperationCAS = 9 - cudaAtomicOperationFloatAdd = 10 - cudaAtomicOperationFloatMin = 11 - cudaAtomicOperationFloatMax = 12 - - cdef enum cudaAtomicOperationCapability: - cudaAtomicCapabilitySigned = 1 - cudaAtomicCapabilityUnsigned = 2 - cudaAtomicCapabilityReduction = 4 - cudaAtomicCapabilityScalar32 = 8 - cudaAtomicCapabilityScalar64 = 16 - cudaAtomicCapabilityScalar128 = 32 - cudaAtomicCapabilityVector32x4 = 64 - - cdef enum cudaExternalMemoryHandleType: - cudaExternalMemoryHandleTypeOpaqueFd = 1 - cudaExternalMemoryHandleTypeOpaqueWin32 = 2 - cudaExternalMemoryHandleTypeOpaqueWin32Kmt = 3 - cudaExternalMemoryHandleTypeD3D12Heap = 4 - cudaExternalMemoryHandleTypeD3D12Resource = 5 - cudaExternalMemoryHandleTypeD3D11Resource = 6 - cudaExternalMemoryHandleTypeD3D11ResourceKmt = 7 - cudaExternalMemoryHandleTypeNvSciBuf = 8 - - cdef enum cudaExternalSemaphoreHandleType: - cudaExternalSemaphoreHandleTypeOpaqueFd = 1 - cudaExternalSemaphoreHandleTypeOpaqueWin32 = 2 - cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt = 3 - cudaExternalSemaphoreHandleTypeD3D12Fence = 4 - cudaExternalSemaphoreHandleTypeD3D11Fence = 5 - cudaExternalSemaphoreHandleTypeNvSciSync = 6 - cudaExternalSemaphoreHandleTypeKeyedMutex = 7 - cudaExternalSemaphoreHandleTypeKeyedMutexKmt = 8 - cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd = 9 - cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32 = 10 - - cdef enum cudaDevSmResourceGroup_flags: - cudaDevSmResourceGroupDefault = 0 - cudaDevSmResourceGroupBackfill = 1 - - cdef enum cudaDevSmResourceSplitByCount_flags: - cudaDevSmResourceSplitIgnoreSmCoscheduling = 1 - cudaDevSmResourceSplitMaxPotentialClusterSize = 2 - - cdef enum cudaDevResourceType: - cudaDevResourceTypeInvalid = 0 - cudaDevResourceTypeSm = 1 - cudaDevResourceTypeWorkqueueConfig = 1000 - cudaDevResourceTypeWorkqueue = 10000 - - cdef enum cudaDevWorkqueueConfigScope: - cudaDevWorkqueueConfigScopeDeviceCtx = 0 - cudaDevWorkqueueConfigScopeGreenCtxBalanced = 1 - - cdef enum cudaJitOption: - cudaJitMaxRegisters = 0 - cudaJitThreadsPerBlock = 1 - cudaJitWallTime = 2 - cudaJitInfoLogBuffer = 3 - cudaJitInfoLogBufferSizeBytes = 4 - cudaJitErrorLogBuffer = 5 - cudaJitErrorLogBufferSizeBytes = 6 - cudaJitOptimizationLevel = 7 - cudaJitFallbackStrategy = 10 - cudaJitGenerateDebugInfo = 11 - cudaJitLogVerbose = 12 - cudaJitGenerateLineInfo = 13 - cudaJitCacheMode = 14 - cudaJitPositionIndependentCode = 30 - cudaJitMinCtaPerSm = 31 - cudaJitMaxThreadsPerBlock = 32 - cudaJitOverrideDirectiveValues = 33 - - cdef enum cudaLibraryOption: - cudaLibraryHostUniversalFunctionAndDataTable = 0 - cudaLibraryBinaryIsPreserved = 1 - - cdef enum cudaJit_CacheMode: - cudaJitCacheOptionNone = 0 - cudaJitCacheOptionCG = 1 - cudaJitCacheOptionCA = 2 - - cdef enum cudaJit_Fallback: - cudaPreferPtx = 0 - cudaPreferBinary = 1 - - cdef enum cudaCGScope: - cudaCGScopeInvalid = 0 - cudaCGScopeGrid = 1 - cudaCGScopeReserved = 2 - - cdef enum cudaKernelFunctionType: - cudaKernelFunctionTypeUnspecified = 0 - cudaKernelFunctionTypeDeviceEntry = 1 - cudaKernelFunctionTypeKernel = 2 - cudaKernelFunctionTypeFunction = 3 - - cdef enum cudaGraphConditionalHandleFlags: - cudaGraphCondAssignDefault = 1 - - cdef enum cudaGraphConditionalNodeType: - cudaGraphCondTypeIf = 0 - cudaGraphCondTypeWhile = 1 - cudaGraphCondTypeSwitch = 2 - - cdef enum cudaGraphNodeType: - cudaGraphNodeTypeKernel = 0 - cudaGraphNodeTypeMemcpy = 1 - cudaGraphNodeTypeMemset = 2 - cudaGraphNodeTypeHost = 3 - cudaGraphNodeTypeGraph = 4 - cudaGraphNodeTypeEmpty = 5 - cudaGraphNodeTypeWaitEvent = 6 - cudaGraphNodeTypeEventRecord = 7 - cudaGraphNodeTypeExtSemaphoreSignal = 8 - cudaGraphNodeTypeExtSemaphoreWait = 9 - cudaGraphNodeTypeMemAlloc = 10 - cudaGraphNodeTypeMemFree = 11 - cudaGraphNodeTypeConditional = 13 - cudaGraphNodeTypeReserved16 = 16 - cudaGraphNodeTypeCount = 17 - - cdef enum cudaGraphChildGraphNodeOwnership: - cudaGraphChildGraphOwnershipInvalid = -1 - cudaGraphChildGraphOwnershipClone = 0 - cudaGraphChildGraphOwnershipMove = 1 - - cdef enum cudaGraphExecUpdateResult: - cudaGraphExecUpdateSuccess = 0 - cudaGraphExecUpdateError = 1 - cudaGraphExecUpdateErrorTopologyChanged = 2 - cudaGraphExecUpdateErrorNodeTypeChanged = 3 - cudaGraphExecUpdateErrorFunctionChanged = 4 - cudaGraphExecUpdateErrorParametersChanged = 5 - cudaGraphExecUpdateErrorNotSupported = 6 - cudaGraphExecUpdateErrorUnsupportedFunctionChange = 7 - cudaGraphExecUpdateErrorAttributesChanged = 8 - - cdef enum cudaGraphKernelNodeField: - cudaGraphKernelNodeFieldInvalid = 0 - cudaGraphKernelNodeFieldGridDim = 1 - cudaGraphKernelNodeFieldParam = 2 - cudaGraphKernelNodeFieldEnabled = 3 - - cdef enum cudaGetDriverEntryPointFlags: - cudaEnableDefault = 0 - cudaEnableLegacyStream = 1 - cudaEnablePerThreadDefaultStream = 2 - - cdef enum cudaDriverEntryPointQueryResult: - cudaDriverEntryPointSuccess = 0 - cudaDriverEntryPointSymbolNotFound = 1 - cudaDriverEntryPointVersionNotSufficent = 2 - - cdef enum cudaGraphDebugDotFlags: - cudaGraphDebugDotFlagsVerbose = 1 - cudaGraphDebugDotFlagsKernelNodeParams = 4 - cudaGraphDebugDotFlagsMemcpyNodeParams = 8 - cudaGraphDebugDotFlagsMemsetNodeParams = 16 - cudaGraphDebugDotFlagsHostNodeParams = 32 - cudaGraphDebugDotFlagsEventNodeParams = 64 - cudaGraphDebugDotFlagsExtSemasSignalNodeParams = 128 - cudaGraphDebugDotFlagsExtSemasWaitNodeParams = 256 - cudaGraphDebugDotFlagsKernelNodeAttributes = 512 - cudaGraphDebugDotFlagsHandles = 1024 - cudaGraphDebugDotFlagsConditionalNodeParams = 32768 - - cdef enum cudaGraphInstantiateFlags: - cudaGraphInstantiateFlagAutoFreeOnLaunch = 1 - cudaGraphInstantiateFlagUpload = 2 - cudaGraphInstantiateFlagDeviceLaunch = 4 - cudaGraphInstantiateFlagUseNodePriority = 8 - - cdef enum cudaDeviceNumaConfig: - cudaDeviceNumaConfigNone = 0 - cudaDeviceNumaConfigNumaNode = 1 - - cdef enum cudaFabricOpStatusSource: - cudaFabricOpStatusSourceMbarrierV1 = 0 - cudaFabricOpStatusSourceMax = 2147483647 - - cdef enum cudaFabricOpStatusInfo: - cudaFabricOpStatusInfoSuccess = 0 - cudaFabricOpStatusInfoLast = 0 - cudaFabricOpStatusInfoMax = 2147483647 - -cdef extern from "surface_types.h": - - ctypedef unsigned long long cudaSurfaceObject_t - - cdef enum cudaSurfaceBoundaryMode: - cudaBoundaryModeZero = 0 - cudaBoundaryModeClamp = 1 - cudaBoundaryModeTrap = 2 - - cdef enum cudaSurfaceFormatMode: - cudaFormatModeForced = 0 - cudaFormatModeAuto = 1 - -cdef extern from "texture_types.h": - - cdef struct cudaTextureDesc: - cudaTextureAddressMode addressMode[3] - cudaTextureFilterMode filterMode - cudaTextureReadMode readMode - int sRGB - float borderColor[4] - int normalizedCoords - unsigned int maxAnisotropy - cudaTextureFilterMode mipmapFilterMode - float mipmapLevelBias - float minMipmapLevelClamp - float maxMipmapLevelClamp - int disableTrilinearOptimization - int seamlessCubemap - - ctypedef unsigned long long cudaTextureObject_t - - cdef enum cudaTextureAddressMode: - cudaAddressModeWrap = 0 - cudaAddressModeClamp = 1 - cudaAddressModeMirror = 2 - cudaAddressModeBorder = 3 - - cdef enum cudaTextureFilterMode: - cudaFilterModePoint = 0 - cudaFilterModeLinear = 1 - - cdef enum cudaTextureReadMode: - cudaReadModeElementType = 0 - cudaReadModeNormalizedFloat = 1 - -cdef extern from "library_types.h": - - cdef enum cudaDataType_t: - CUDA_R_32F = 0 - CUDA_R_64F = 1 - CUDA_R_16F = 2 - CUDA_R_8I = 3 - CUDA_C_32F = 4 - CUDA_C_64F = 5 - CUDA_C_16F = 6 - CUDA_C_8I = 7 - CUDA_R_8U = 8 - CUDA_C_8U = 9 - CUDA_R_32I = 10 - CUDA_C_32I = 11 - CUDA_R_32U = 12 - CUDA_C_32U = 13 - CUDA_R_16BF = 14 - CUDA_C_16BF = 15 - CUDA_R_4I = 16 - CUDA_C_4I = 17 - CUDA_R_4U = 18 - CUDA_C_4U = 19 - CUDA_R_16I = 20 - CUDA_C_16I = 21 - CUDA_R_16U = 22 - CUDA_C_16U = 23 - CUDA_R_64I = 24 - CUDA_C_64I = 25 - CUDA_R_64U = 26 - CUDA_C_64U = 27 - CUDA_R_8F_E4M3 = 28 - CUDA_R_8F_UE4M3 = 28 - CUDA_R_8F_E5M2 = 29 - CUDA_R_8F_UE8M0 = 30 - CUDA_R_6F_E2M3 = 31 - CUDA_R_6F_E3M2 = 32 - CUDA_R_4F_E2M1 = 33 - - ctypedef cudaDataType_t cudaDataType - - cdef enum cudaEmulationStrategy_t: - CUDA_EMULATION_STRATEGY_DEFAULT = 0 - CUDA_EMULATION_STRATEGY_PERFORMANT = 1 - CUDA_EMULATION_STRATEGY_EAGER = 2 - - ctypedef cudaEmulationStrategy_t cudaEmulationStrategy - - cdef enum cudaEmulationMantissaControl_t: - CUDA_EMULATION_MANTISSA_CONTROL_DYNAMIC = 0 - CUDA_EMULATION_MANTISSA_CONTROL_FIXED = 1 - - ctypedef cudaEmulationMantissaControl_t cudaEmulationMantissaControl - - cdef enum cudaEmulationSpecialValuesSupport_t: - CUDA_EMULATION_SPECIAL_VALUES_SUPPORT_NONE = 0 - CUDA_EMULATION_SPECIAL_VALUES_SUPPORT_INFINITY = 1 - CUDA_EMULATION_SPECIAL_VALUES_SUPPORT_NAN = 2 - CUDA_EMULATION_SPECIAL_VALUES_SUPPORT_DEFAULT = 65535 - - ctypedef cudaEmulationSpecialValuesSupport_t cudaEmulationSpecialValuesSupport - - cdef enum libraryPropertyType_t: - MAJOR_VERSION = 0 - MINOR_VERSION = 1 - PATCH_LEVEL = 2 - - ctypedef libraryPropertyType_t libraryPropertyType - -cdef extern from "cuda_runtime_api.h": - - ctypedef void (*cudaStreamCallback_t)(cudaStream_t stream, cudaError_t status, void* userData) - - ctypedef cudaError_t (*cudaGraphRecaptureCallback_t)(void* data, cudaGraphNode_t node, const cudaGraphNodeParams* originalParams, const cudaGraphNodeParams* recaptureParams, cudaGraphRecaptureStatus status) - - cdef struct cudaGraphRecaptureCallbackData: - cudaGraphRecaptureCallback_t callbackFunc - void* userData - - ctypedef void (*cudaLogsCallback_t)(void* data, cudaLogLevel logLevel, char* message, size_t length) - -cdef extern from "device_types.h": - - cdef enum cudaRoundMode: - cudaRoundNearest = 0 - cudaRoundZero = 1 - cudaRoundPosInf = 2 - cudaRoundMinInf = 3 - -ctypedef cudaLaunchAttributeID cudaStreamAttrID - -ctypedef cudaLaunchAttributeID cudaKernelNodeAttrID - -ctypedef cudaLaunchAttributeValue cudaStreamAttrValue - -ctypedef cudaLaunchAttributeValue cudaKernelNodeAttrValue diff --git a/cuda_bindings/pixi.toml b/cuda_bindings/pixi.toml index 943d57e11bb..7097b09a27b 100644 --- a/cuda_bindings/pixi.toml +++ b/cuda_bindings/pixi.toml @@ -87,7 +87,7 @@ nvidia-sphinx-theme = "*" # TODO: check if these can be extracted from pyproject.toml [package] name = "cuda-bindings" -version = "13.2.0" +version = "13.3.1" [package.build] backend = { name = "pixi-build-python", version = "*" } diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index c3e3263ca69..a8bfc413dcc 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -3393,10 +3393,8 @@ environments: - conda: ../cuda_bindings build: py314hd3a1e81_0 - conda: ../cuda_pathfinder - - pypi: https://files.pythonhosted.org/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/fc/97/a7139cbecd8123d693c2b67b984a584d8088ea8a1f85617139b5879c0e47/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_26_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/32/d4/fad332f1923d47a0eafac37fde5259aad8987969eed6cceb33cb04f035a4/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/da/53b58aad8261451ca4e9384791ac8af1fb8b4ca976e8feba56a50d5e53ba/cutensor_cu13-2.7.0-py3-none-manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/d6/e1/05b50692b647cac3c18200ac485b04f342f00ed173c9cc46767274469a15/llvmlite-0.48.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/0f/26/885774c006de6620ed3d10f45d8e20fe0b8e6aad6d573211a2cbc8b3e528/numba-0.66.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/df/73/8934508d27efd9a930489059b980bc1e75336574be31bffb284a9e782fa7/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl @@ -3691,10 +3689,8 @@ environments: - conda: ../cuda_bindings build: py314h3ff45e1_0 - conda: ../cuda_pathfinder - - pypi: https://files.pythonhosted.org/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/d0/4e/89737a87b22a5ed8748951fb6446762ff1b0fb4aadc0865b759fbc51ba92/cuda_cccl-1.1.1-cp314-cp314-manylinux_2_24_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/e0/14/db2256f3045fa17763726c09d519be4f876bfadeed85cfea539b42ecae25/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/65/73c65022634bac7816bdeaf453a7c37820c4d6fcd79832108e2662d10cd6/cutensor_cu13-2.7.0-py3-none-manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/f7/c3/470b8c4ff9ae2db2f9cf5c3e73de76ed908a32788ae9eb5602d43e6a476b/llvmlite-0.48.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/93/99/edebf7de890b73973d839dd971cf73734adfb81ffa1b4504f84b9059c3e5/numba-0.66.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/bc/35/3c2a05375b01159632ed90384a04a08725b83b49d2e511f44158c5ec2c43/numba_cuda-0.30.4-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl @@ -3847,10 +3843,8 @@ environments: - conda: ../cuda_bindings build: py314hd7f1909_0 - conda: ../cuda_pathfinder - - pypi: https://files.pythonhosted.org/packages/48/45/2734be44dbc80ac082ec23a86b41c8294992dcb90033645ed1bc50aafe4c/cuda_bindings-13.3.1-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/f2/e9/bb426cdc083f7bce8482ec5f6ff932e1d9858a88a43eefbaa68cbb337416/cuda_cccl-1.1.1-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/6f/15/8d1f52cba966f7a130108132b197b13fbcacee715aa764baa79cd67f9169/cuda_core-1.1.0-cp314-cp314-win_amd64.whl - - pypi: https://files.pythonhosted.org/packages/d2/53/8fc9b0cdc5b7f62746e6a01b85b6461e5ae27f871010a5fcf8fa6950766d/cuda_pathfinder-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/c2/b76e58bb8beb0ac95cbbfd79659d38b69f38b383f3e179671bcfa9caae6e/cutensor_cu13-2.7.0-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c9/2d/6a5171fb7236ac0895e1a02ccba3735bf291e8597239aa6421894d3c0ba8/llvmlite-0.48.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/66/c5/b46ad28ac3681d035ea21365c5e052149062e1a0a9affd0563d2760ea6ff/numba-0.66.0-cp314-cp314-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3f/e3/613f6fc457f430775d124bea2e38033802fe97ab412a032191ac9b117d3a/numba_cuda-0.30.4-cp314-cp314-win_amd64.whl @@ -4809,17 +4803,6 @@ packages: - cuda-toolkit==13.* ; extra == 'all' - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/48/45/2734be44dbc80ac082ec23a86b41c8294992dcb90033645ed1bc50aafe4c/cuda_bindings-13.3.1-cp314-cp314-win_amd64.whl - name: cuda-bindings - version: 13.3.1 - sha256: 8de12ef60bf40756852cb62bbb40460609269f6ece522903d1cc93d73a3ececb - requires_dist: - - cuda-pathfinder>=1.4.2 - - cuda-toolkit[nvfatbin,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'all' - - cuda-toolkit[cufile]==13.* ; sys_platform == 'linux' and extra == 'all' - - cuda-toolkit==13.* ; extra == 'all' - - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/b1/81/bff68ce829999c1e4209c761bbf903b1c06ec570416ddb25020864ad5907/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl name: cuda-bindings version: 13.3.1 @@ -4831,20 +4814,9 @@ packages: - cuda-toolkit==13.* ; extra == 'all' - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/d4/e0/c8a1f0c8f9ffdea4f5fe6dbab89b326cef4d85caf489dad39e209da89416/cuda_bindings-13.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: cuda-bindings - version: 13.3.1 - sha256: efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80 - requires_dist: - - cuda-pathfinder>=1.4.2 - - cuda-toolkit[nvfatbin,nvjitlink,nvrtc,nvvm]==13.* ; extra == 'all' - - cuda-toolkit[cufile]==13.* ; sys_platform == 'linux' and extra == 'all' - - cuda-toolkit==13.* ; extra == 'all' - - nvidia-cudla==13.* ; platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'all' - requires_python: '>=3.10' - conda: ../cuda_bindings name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314h3ff45e1_0 subdir: linux-aarch64 variants: @@ -4872,7 +4844,7 @@ packages: path: ../cuda_pathfinder - conda: ../cuda_bindings name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314hd3a1e81_0 subdir: linux-64 variants: @@ -4900,7 +4872,7 @@ packages: path: ../cuda_pathfinder - conda: ../cuda_bindings name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314hd7f1909_0 subdir: win-64 variants: @@ -5227,19 +5199,6 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 1462453 timestamp: 1779895589763 -- pypi: https://files.pythonhosted.org/packages/32/d4/fad332f1923d47a0eafac37fde5259aad8987969eed6cceb33cb04f035a4/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - name: cuda-core - version: 1.1.0 - sha256: dc8103c78b9c15ad6b1ea48de7763b429c8fde42bec43a9dd0550868994a0ce4 - requires_dist: - - cuda-pathfinder>=1.4.2 - - numpy - - backports-strenum ; python_full_version < '3.11' - - cuda-bindings[all]==12.* ; extra == 'cu12' - - cuda-toolkit==12.* ; extra == 'cu12' - - cuda-bindings[all]==13.* ; extra == 'cu13' - - cuda-toolkit==13.* ; extra == 'cu13' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/5a/e0/572f2179b4353a0a4ff1265b8708629192ff1245fabdc0576e5276731f24/cuda_core-1.1.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: cuda-core version: 1.1.0 @@ -5253,19 +5212,6 @@ packages: - cuda-bindings[all]==13.* ; extra == 'cu13' - cuda-toolkit==13.* ; extra == 'cu13' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/6f/15/8d1f52cba966f7a130108132b197b13fbcacee715aa764baa79cd67f9169/cuda_core-1.1.0-cp314-cp314-win_amd64.whl - name: cuda-core - version: 1.1.0 - sha256: d0531306d2894523e261418491a68b8385481c9fa0552d78fd3ba6b746a20942 - requires_dist: - - cuda-pathfinder>=1.4.2 - - numpy - - backports-strenum ; python_full_version < '3.11' - - cuda-bindings[all]==12.* ; extra == 'cu12' - - cuda-toolkit==12.* ; extra == 'cu12' - - cuda-bindings[all]==13.* ; extra == 'cu13' - - cuda-toolkit==13.* ; extra == 'cu13' - requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/e0/14/db2256f3045fa17763726c09d519be4f876bfadeed85cfea539b42ecae25/cuda_core-1.1.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl name: cuda-core version: 1.1.0 @@ -5281,7 +5227,7 @@ packages: requires_python: '>=3.10' - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314h3ff45e1_0 subdir: linux-aarch64 variants: @@ -5304,7 +5250,7 @@ packages: license: Apache-2.0 - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314h5e6f764_0 subdir: win-64 variants: @@ -5329,7 +5275,7 @@ packages: license: Apache-2.0 - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314ha6d028f_0 subdir: linux-64 variants: @@ -5352,7 +5298,7 @@ packages: license: Apache-2.0 - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314hd3a1e81_0 subdir: linux-64 variants: @@ -5375,7 +5321,7 @@ packages: license: Apache-2.0 - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314hd7f1909_0 subdir: win-64 variants: @@ -5399,7 +5345,7 @@ packages: license: Apache-2.0 - conda: . name: cuda-core - version: 0.7.0 + version: 1.1.0 build: py314he8946ed_0 subdir: linux-aarch64 variants: @@ -6522,7 +6468,7 @@ packages: requires_python: '>=3.10' - conda: ../cuda_pathfinder name: cuda-pathfinder - version: 1.3.4a0 + version: 1.5.6 build: pyh4616a5c_0 subdir: noarch variants: @@ -6781,6 +6727,18 @@ packages: - pkg:pypi/cupy?source=hash-mapping size: 39191318 timestamp: 1779504103703 +- pypi: https://files.pythonhosted.org/packages/19/da/53b58aad8261451ca4e9384791ac8af1fb8b4ca976e8feba56a50d5e53ba/cutensor_cu13-2.7.0-py3-none-manylinux2014_x86_64.whl + name: cutensor-cu13 + version: 2.7.0 + sha256: 9a4187a153ddd431dca4313e2efc6f6f8bd4fda4dd0e41d863c9e039705b6f8f +- pypi: https://files.pythonhosted.org/packages/a8/c2/b76e58bb8beb0ac95cbbfd79659d38b69f38b383f3e179671bcfa9caae6e/cutensor_cu13-2.7.0-py3-none-win_amd64.whl + name: cutensor-cu13 + version: 2.7.0 + sha256: 7834c69b40cce5f6c086624ccb88a70a05461e263e52e368a9eaebca937c1c0f +- pypi: https://files.pythonhosted.org/packages/b1/65/73c65022634bac7816bdeaf453a7c37820c4d6fcd79832108e2662d10cd6/cutensor_cu13-2.7.0-py3-none-manylinux2014_aarch64.whl + name: cutensor-cu13 + version: 2.7.0 + sha256: 293730541bdcc260c2f735ba4aa123cd907ca143a964252d1912a58c1e37c18a - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 md5: 4c2a8fef270f6c69591889b93f9f55c1 diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index 09f55a2791a..5077d3eb459 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -34,6 +34,8 @@ cuda-core = { path = "." } cffi = "*" pyglet = "*" pytest = "*" +packaging = "*" +tomli = "*" # PEP 723 parsing fallback on Python 3.10. # numpy pinned <2.5 so `numba` (transitive dep of `numba-cuda` in # samples/simplePrint) can install; numba currently requires numpy<2.5. numpy = "<2.5" @@ -48,17 +50,25 @@ cuda = "13" # cudaComputeLambdas, matrixMulSharedMem, parallelReduction, prefixSum. # The conda-forge `cuda-cccl` package only installs C++ headers; the PyPI # wheel is the one that exposes `cuda.cccl` to Python. -cuda-cccl = "*" +cuda-cccl = { version = "*", extras = ["minimal-sysctk13"] } # nvtx: samples/kernelNsysProfile nvtx = "*" # numba-cuda: samples/simplePrint (pin >=0.29 to match the sample's # PEP 723 declaration; older 0.0.x releases resolve otherwise). numba-cuda = ">=0.29.0" # nvmath-python: samples/matrixMulSharedMem -nvmath-python = "*" +nvmath-python = { version = "*", extras = ["sysctk13"] } # nvidia-nvjitlink: samples/simplePrint (was nvidia-nvjitlink-cu13, now deprecated) nvidia-nvjitlink = "*" +# These packages are provided by the local Conda path builds in `local-deps`. +# Ignore copies requested through PyPI dependency closures so they cannot +# overwrite the branch-under-test packages in site-packages. +[feature.samples.pypi-options.dependency-overrides] +cuda-bindings = { version = "*", env-markers = "python_version < '0'" } +cuda-core = { version = "*", env-markers = "python_version < '0'" } +cuda-pathfinder = { version = "*", env-markers = "python_version < '0'" } + [feature.samples.target.linux.dependencies] cupy = "*" pytorch-gpu = "*" @@ -225,7 +235,7 @@ numba-classic = { features = ["numba-classic"] } # TODO: check if these can be extracted from pyproject.toml [package] name = "cuda-core" -version = "0.7.0" +version = "1.1.0" [package.build] backend = { name = "pixi-build-python", version = "*" } @@ -323,5 +333,12 @@ cmd = [ depends-on = [{ task = "build-cython-tests" }] [tasks.test-samples] -cmd = ["pytest", "-rxXs", "-v", "$PIXI_PROJECT_ROOT/tests/example_tests/test_samples.py"] +cmd = [ + "pytest", + "-rxXs", + "-v", + "--confcutdir", + "$PIXI_PROJECT_ROOT/tests/example_tests", + "$PIXI_PROJECT_ROOT/tests/example_tests", +] default-environment = "samples" diff --git a/cuda_core/pytest.ini b/cuda_core/pytest.ini index c3d243387fe..da40eb213a3 100644 --- a/cuda_core/pytest.ini +++ b/cuda_core/pytest.ini @@ -11,3 +11,4 @@ markers = agent_authored(model): agent-authored test not yet materially human-reviewed human_reviewed: agent-authored test materially reviewed or rewritten by a human human_authored: test authored primarily by a human + parallel_threads_limit: max number of threads (provided by pytest-run-parallel) diff --git a/cuda_core/tests/example_tests/run_samples.py b/cuda_core/tests/example_tests/run_samples.py index 3bbe7e8e030..9cc9fdca7c3 100644 --- a/cuda_core/tests/example_tests/run_samples.py +++ b/cuda_core/tests/example_tests/run_samples.py @@ -25,9 +25,9 @@ import argparse import concurrent.futures +import importlib.metadata import json import os -import re import subprocess import sys import threading @@ -35,6 +35,15 @@ from pathlib import Path from typing import Any +if sys.version_info >= (3, 11): + import tomllib +else: + import tomli as tomllib + +from packaging.requirements import InvalidRequirement, Requirement +from packaging.utils import canonicalize_name +from packaging.version import InvalidVersion + # Default timeout per sample run (seconds). Match cuda-samples. DEFAULT_TIMEOUT = 300 EXIT_WAIVED = 2 @@ -133,69 +142,91 @@ def get_gpu_count() -> int: # --------------------------------------------------------------------------- -# PEP 723 dep gating (reuse the helper that ships with cuda-bindings test -# infrastructure when available; otherwise fall back to a local parser so the -# runner stays usable without cuda-bindings installed). +# PEP 723 dependency gating # --------------------------------------------------------------------------- -_DEP_NAME_RE = re.compile(r"[a-zA-Z0-9_-]+") -_PEP723_RE = re.compile(r"(?m)^# /// (?P[a-zA-Z0-9-]+)$\s(?P(^#(| .*)$\s)+)^# ///$") - -# Aliases bridging PyPI distribution names declared in sample PEP 723 blocks -# and the install-name a conda/pixi environment provides. CI uses wheels where -# the names match exactly, so this map only fires in local pixi runs. Each -# entry maps a PyPI name to a list of alternative import names to try with -# ``importlib.import_module`` before declaring the dep missing. -_DEP_FALLBACK_IMPORTS: dict[str, tuple[str, ...]] = { - "cuda-python": ("cuda.bindings",), - "cuda-bindings": ("cuda.bindings",), - "cuda-core": ("cuda.core",), - "cuda-pathfinder": ("cuda.pathfinder",), - "cuda-cccl": ("cuda.cccl", "cccl"), - "cupy-cuda11x": ("cupy",), - "cupy-cuda12x": ("cupy",), - "cupy-cuda13x": ("cupy",), - "nvidia-nvjitlink": ("nvjitlink",), - "nvmath-python": ("nvmath",), - "cugraph-cu12": ("cugraph",), - "cugraph-cu13": ("cugraph",), - "cudf-cu12": ("cudf",), - "cudf-cu13": ("cudf",), +_DISTRIBUTION_PROVIDERS: dict[str, tuple[str, ...]] = { + # cuda-python is a metapackage; cuda-bindings carries the matching CUDA API + # version and is the package samples actually import. + "cuda-python": ("cuda-bindings",), + # Conda installs CuPy as ``cupy`` while PyPI uses CUDA-major-specific names. + "cupy-cuda11x": ("cupy-cuda11x", "cupy"), + "cupy-cuda12x": ("cupy-cuda12x", "cupy"), + "cupy-cuda13x": ("cupy-cuda13x", "cupy"), } +class DependencyMetadataError(ValueError): + """A sample contains invalid PEP 723 dependency metadata.""" + + +def _metadata_error(example: Path, detail: str) -> DependencyMetadataError: + return DependencyMetadataError(f"{example}: invalid PEP 723 metadata: {detail}") + + def _extract_pep723_dependencies(example: Path) -> list[str] | None: """Return the dependency list declared via PEP 723, or ``None`` if absent.""" - content = example.read_text(encoding="utf-8") - match = _PEP723_RE.search(content) - if not match: - return None - metadata: dict[str, str] = {} - for raw in match.group("content").splitlines(): - line = raw.lstrip("# ").rstrip() - if not line: - continue - key, _, value = line.partition("=") - if not _: - continue - metadata[key.strip()] = value.strip() - deps_literal = metadata.get("dependencies") - if not deps_literal: + lines = example.read_text(encoding="utf-8").splitlines() + starts = [index for index, line in enumerate(lines) if line == "# /// script"] + if not starts: return None + if len(starts) != 1: + raise _metadata_error(example, "expected exactly one script block") + + metadata_lines: list[str] = [] + for line_number, line in enumerate(lines[starts[0] + 1 :], start=starts[0] + 2): + if line == "# ///": + break + if line == "#": + metadata_lines.append("") + elif line.startswith("# "): + metadata_lines.append(line[2:]) + else: + raise _metadata_error(example, f"line {line_number} inside the script block is not a comment") + else: + raise _metadata_error(example, "script block is missing its closing '# ///'") + try: - # The PEP 723 spec uses TOML semantics, but in practice the values - # are simple list-of-strings literals; eval keeps the runner aligned - # with the cuda-bindings helper without taking a TOML dependency. - result = eval(deps_literal, {"__builtins__": {}}) # noqa: S307 - except Exception: - return None - if not isinstance(result, list): + metadata = tomllib.loads("\n".join(metadata_lines)) + except tomllib.TOMLDecodeError as exc: + raise _metadata_error(example, str(exc)) from exc + + dependencies = metadata.get("dependencies") + if dependencies is None: return None - return [str(item) for item in result] + if not isinstance(dependencies, list) or any(not isinstance(item, str) for item in dependencies): + raise _metadata_error(example, "'dependencies' must be an array of strings") + return dependencies + + +def _distribution_providers(requirement: Requirement) -> tuple[str, ...]: + name = canonicalize_name(requirement.name) + return _DISTRIBUTION_PROVIDERS.get(name, (name,)) + + +def _provided_extras(dist: importlib.metadata.Distribution) -> set[str]: + return {canonicalize_name(extra) for extra in (dist.metadata.get_all("Provides-Extra") or ())} + + +def _distribution_mismatches(requirement: Requirement, dist: importlib.metadata.Distribution) -> list[str]: + mismatches: list[str] = [] + if requirement.specifier: + try: + version_matches = requirement.specifier.contains(dist.version) + except InvalidVersion: + mismatches.append(f"has invalid version {dist.version!r}") + else: + if not version_matches: + mismatches.append(f"version {dist.version} does not satisfy {requirement.specifier}") + + missing_extras = {canonicalize_name(extra) for extra in requirement.extras} - _provided_extras(dist) + if missing_extras: + mismatches.append(f"does not provide extra(s): {', '.join(sorted(missing_extras))}") + return mismatches def missing_dependencies(example: Path) -> list[str]: - """Return the subset of declared deps that are not importable as distributions. + """Return useful diagnostics for unmet PEP 723 dependency requirements. Returns an empty list if all declared deps are present, or if no PEP 723 block exists (no gating to perform). @@ -203,33 +234,34 @@ def missing_dependencies(example: Path) -> list[str]: deps = _extract_pep723_dependencies(example) if not deps: return [] - # Local imports keep top-level import cost down. - import importlib - import importlib.metadata missing: list[str] = [] for spec in deps: - match = _DEP_NAME_RE.match(spec) - if match is None: - continue - name = match.group(0) try: - importlib.metadata.distribution(name) + requirement = Requirement(spec) + except InvalidRequirement as exc: + raise _metadata_error(example, f"invalid dependency requirement {spec!r}: {exc}") from exc + + if requirement.marker is not None and not requirement.marker.evaluate({"extra": ""}): continue - except importlib.metadata.PackageNotFoundError: - pass - # Strict distribution check missed it. Try the known alias imports so - # conda/pixi environments (which install under different distribution - # names than the PyPI wheels) don't waive every sample. - for module_name in _DEP_FALLBACK_IMPORTS.get(name, ()): + providers = _distribution_providers(requirement) + installed: list[str] = [] + for provider in providers: try: - importlib.import_module(module_name) - break - except ImportError: + dist = importlib.metadata.distribution(provider) + except importlib.metadata.PackageNotFoundError: continue + mismatches = _distribution_mismatches(requirement, dist) + if not mismatches: + break + installed.append(f"{provider} {dist.version}: {', '.join(mismatches)}") else: - missing.append(name) + if installed: + detail = "; ".join(installed) + else: + detail = f"no provider distribution installed (checked: {', '.join(providers)})" + missing.append(f"{requirement} ({detail})") return missing @@ -318,9 +350,14 @@ def run_sample(plan: RunPlan) -> RunResult: _safe_print(f" [WAIVED] {name}: {plan.skip_reason}") return RunResult(sample, "WAIVED", EXIT_WAIVED, plan.skip_reason) - missing = missing_dependencies(sample) + try: + missing = missing_dependencies(sample) + except DependencyMetadataError as exc: + reason = str(exc) + _safe_print(f" [ERROR] {name}: {reason}") + return RunResult(sample, "ERROR", -1, reason) if missing: - reason = f"missing package(s): {', '.join(missing)}" + reason = f"unmet package requirement(s): {'; '.join(missing)}" _safe_print(f" [WAIVED] {name}: {reason}") return RunResult(sample, "WAIVED", EXIT_WAIVED, reason) diff --git a/cuda_core/tests/example_tests/test_run_samples.py b/cuda_core/tests/example_tests/test_run_samples.py new file mode 100644 index 00000000000..865723fc1a9 --- /dev/null +++ b/cuda_core/tests/example_tests/test_run_samples.py @@ -0,0 +1,161 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import importlib.metadata +import sys +from email.message import Message +from pathlib import Path +from types import ModuleType + +import pytest +from packaging.utils import canonicalize_name + +from . import run_samples + + +class _Distribution: + def __init__(self, version: str, extras: tuple[str, ...] = ()) -> None: + self.version = version + self.metadata = Message() + for extra in extras: + self.metadata["Provides-Extra"] = extra + + +@pytest.fixture +def installed_distributions(monkeypatch: pytest.MonkeyPatch): + installed: dict[str, _Distribution] = {} + requested: list[str] = [] + + def distribution(name: str) -> _Distribution: + canonical_name = canonicalize_name(name) + requested.append(canonical_name) + try: + return installed[canonical_name] + except KeyError: + raise importlib.metadata.PackageNotFoundError(name) from None + + monkeypatch.setattr(run_samples.importlib.metadata, "distribution", distribution) + + def install(name: str, version: str, extras: tuple[str, ...] = ()) -> None: + installed[canonicalize_name(name)] = _Distribution(version, extras) + + return install, requested + + +def _sample(tmp_path: Path, dependencies: str) -> Path: + sample = tmp_path / "sample.py" + sample.write_text( + f"# /// script\n# dependencies = {dependencies}\n# ///\nprint('not executed')\n", + encoding="utf-8", + ) + return sample + + +@pytest.mark.parametrize( + ("version", "requirement", "is_met"), + [ + ("13.2.0", "demo>=13,<13.3", True), + ("13.3.1", "demo>=13,<13.3", False), + ("12.9.0", "demo>=13,<13.3", False), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_dependency_version_bounds( + tmp_path: Path, installed_distributions, version: str, requirement: str, is_met: bool +) -> None: + install, _ = installed_distributions + install("demo", version) + + missing = run_samples.missing_dependencies(_sample(tmp_path, f"[{requirement!r}]")) + + assert (missing == []) is is_met + if not is_met: + assert f"version {version} does not satisfy <13.3,>=13" in missing[0] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_cuda_python_uses_cuda_bindings_as_version_provider(tmp_path: Path, installed_distributions) -> None: + install, requested = installed_distributions + install("cuda-bindings", "13.2.0") + + missing = run_samples.missing_dependencies(_sample(tmp_path, "['cuda-python>=13,<13.3']")) + + assert missing == [] + assert requested == ["cuda-bindings"] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_cupy_cuda_requirement_accepts_conda_cupy_distribution(tmp_path: Path, installed_distributions) -> None: + install, requested = installed_distributions + install("cupy", "14.0.1") + + missing = run_samples.missing_dependencies(_sample(tmp_path, "['cupy-cuda13x>=14']")) + + assert missing == [] + assert requested == ["cupy-cuda13x", "cupy"] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_environment_markers_control_dependency_checks(tmp_path: Path, installed_distributions) -> None: + _, requested = installed_distributions + dependencies = "[\"ignored; python_version < '1'\", \"required; python_version >= '3'\"]" + + missing = run_samples.missing_dependencies(_sample(tmp_path, dependencies)) + + assert len(missing) == 1 + assert missing[0].startswith('required; python_version >= "3"') + assert requested == ["required"] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_requested_extras_must_be_provided(tmp_path: Path, installed_distributions) -> None: + install, _ = installed_distributions + install("demo", "1.0", extras=("other",)) + + missing = run_samples.missing_dependencies(_sample(tmp_path, "['demo[cu13]>=1']")) + + assert len(missing) == 1 + assert "does not provide extra(s): cu13" in missing[0] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_provided_extra_satisfies_requirement(tmp_path: Path, installed_distributions) -> None: + install, _ = installed_distributions + install("demo", "1.0", extras=("CU13",)) + + missing = run_samples.missing_dependencies(_sample(tmp_path, "['demo[cu13]>=1']")) + + assert missing == [] + + +@pytest.mark.parametrize( + "dependencies", + [ + "['unterminated'", + "['not a valid requirement ???']", + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_malformed_dependency_metadata_is_an_error(tmp_path: Path, dependencies: str) -> None: + sample = _sample(tmp_path, dependencies) + + result = run_samples.run_sample(run_samples.RunPlan(sample, [], [], timeout=1)) + + assert result.status == "ERROR" + assert result.return_code == -1 + assert "invalid PEP 723 metadata" in result.detail + + +@pytest.mark.agent_authored(model="gpt-5") +def test_importable_module_does_not_satisfy_distribution_requirement( + tmp_path: Path, installed_distributions, monkeypatch: pytest.MonkeyPatch +) -> None: + _, _ = installed_distributions + monkeypatch.setitem(sys.modules, "cupy", ModuleType("cupy")) + + missing = run_samples.missing_dependencies(_sample(tmp_path, "['cupy-cuda13x>=14']")) + + assert len(missing) == 1 + assert "no provider distribution installed" in missing[0] diff --git a/cuda_core/tests/example_tests/test_sample_environment.py b/cuda_core/tests/example_tests/test_sample_environment.py new file mode 100644 index 00000000000..479aeb7dd7c --- /dev/null +++ b/cuda_core/tests/example_tests/test_sample_environment.py @@ -0,0 +1,51 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import importlib.metadata +import json +import os +import sys +from pathlib import Path +from urllib.parse import urlparse +from urllib.request import url2pathname + +import pytest + + +@pytest.mark.parametrize( + ("distribution_name", "expected_source", "expected_version"), + ( + ("cuda-core", "cuda_core", "1.1.0"), + ("cuda-bindings", "cuda_bindings", "13.3.1"), + ("cuda-pathfinder", "cuda_pathfinder", "1.5.6"), + ), +) +@pytest.mark.agent_authored(model="gpt-5") +def test_samples_environment_uses_one_local_cuda_distribution( + distribution_name: str, + expected_source: str, + expected_version: str, +) -> None: + if os.environ.get("PIXI_ENVIRONMENT_NAME") != "samples": + pytest.skip("local package provenance is specific to the Pixi samples environment") + + distributions = list(importlib.metadata.distributions(name=distribution_name)) + assert len(distributions) == 1, f"expected one {distribution_name} distribution, found {len(distributions)}" + + direct_url = json.loads(distributions[0].read_text("direct_url.json")) + parsed_source = urlparse(direct_url["url"]) + source_path = Path(url2pathname(parsed_source.path)).resolve() + repository_root = Path(__file__).resolve().parents[3] + assert parsed_source.scheme == "file" + assert direct_url["dir_info"]["editable"] is True + assert source_path == repository_root / expected_source + + record_paths = list((Path(sys.prefix) / "conda-meta").glob(f"{distribution_name}-*.json")) + assert len(record_paths) == 1, f"expected one Conda record for {distribution_name}, found {record_paths}" + + record = json.loads(record_paths[0].read_text(encoding="utf-8")) + assert record["version"] == expected_version + assert record["channel"] is None + assert urlparse(record["url"]).scheme == "file" diff --git a/cuda_core/tests/example_tests/test_sample_verification.py b/cuda_core/tests/example_tests/test_sample_verification.py new file mode 100644 index 00000000000..641e01b9e7d --- /dev/null +++ b/cuda_core/tests/example_tests/test_sample_verification.py @@ -0,0 +1,58 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +from pathlib import Path + +import numpy as np +import pytest + +from .run_samples import RunPlan, run_sample + +REPO_ROOT = Path(__file__).resolve().parents[3] +UTILITIES_DIR = REPO_ROOT / "samples" / "Utilities" + + +@pytest.mark.agent_authored(model="gpt-5") +def test_verify_array_result_or_raise_enforces_match(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.syspath_prepend(str(UTILITIES_DIR)) + from cuda_samples_utils import verify_array_result_or_raise + + verify_array_result_or_raise( + np.array([1.0], dtype=np.float32), + np.array([1.0], dtype=np.float32), + verbose=False, + ) + + with pytest.raises(RuntimeError, match="forced mismatch"): + verify_array_result_or_raise( + np.array([1.0], dtype=np.float32), + np.array([2.0], dtype=np.float32), + verbose=False, + error_message="forced mismatch", + ) + + +@pytest.mark.agent_authored(model="gpt-5") +def test_verification_exception_is_reported_as_sample_failure(tmp_path: Path) -> None: + sample_dir = tmp_path / "verificationFailure" + sample_dir.mkdir() + sample = sample_dir / "verificationFailure.py" + sample.write_text( + "\n".join( + ( + "import sys", + f"sys.path.insert(0, {str(UTILITIES_DIR)!r})", + "import numpy as np", + "from cuda_samples_utils import verify_array_result_or_raise", + "verify_array_result_or_raise(np.array([1.0]), np.array([2.0]), verbose=False)", + ) + ), + encoding="utf-8", + ) + + result = run_sample(RunPlan(sample, [], [], timeout=10)) + + assert result.status == "FAIL" + assert result.return_code != 0 diff --git a/cuda_pathfinder/pixi.toml b/cuda_pathfinder/pixi.toml index 7ebcc9644d7..cf8d50d0da8 100644 --- a/cuda_pathfinder/pixi.toml +++ b/cuda_pathfinder/pixi.toml @@ -59,7 +59,7 @@ nvidia-sphinx-theme = "*" # TODO: check if these can be extracted from pyproject.toml [package] name = "cuda-pathfinder" -version = "1.3.4a0" +version = "1.5.6" [package.build] backend = { name = "pixi-build-python", version = "*" } diff --git a/samples/Utilities/cuda_samples_utils.py b/samples/Utilities/cuda_samples_utils.py index 50b21713fb1..b7fcb2a550d 100644 --- a/samples/Utilities/cuda_samples_utils.py +++ b/samples/Utilities/cuda_samples_utils.py @@ -126,6 +126,19 @@ def verify_array_result(result, expected, rtol: float = 1e-5, atol: float = 1e-8 return False +def verify_array_result_or_raise( + result, + expected, + rtol: float = 1e-5, + atol: float = 1e-8, + verbose: bool = True, + error_message: str = "Result verification failed", +) -> None: + """Verify array contents and raise ``RuntimeError`` on mismatch.""" + if not verify_array_result(result, expected, rtol=rtol, atol=atol, verbose=verbose): + raise RuntimeError(error_message) + + def print_gpu_info(device) -> None: """ Print GPU device information. diff --git a/samples/copyImageArraytoGPU/copyImageArraytoGPU.py b/samples/copyImageArraytoGPU/copyImageArraytoGPU.py index dd8d3da15fc..8e12291ecad 100644 --- a/samples/copyImageArraytoGPU/copyImageArraytoGPU.py +++ b/samples/copyImageArraytoGPU/copyImageArraytoGPU.py @@ -40,7 +40,7 @@ # Add parent directory to path to import utilities sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) -from cuda_samples_utils import verify_array_result +from cuda_samples_utils import verify_array_result_or_raise try: import cupy as cp @@ -151,22 +151,20 @@ def copy_image_from_gpu_cuda_core( # Step 1: Create pinned memory for fast GPU-to-CPU transfer pinned_mr = PinnedMemoryResource() pinned_buffer = pinned_mr.allocate(nbytes, stream=stream) + try: + # Step 2: Copy from GPU memory to pinned CPU memory + device_buffer.copy_to(pinned_buffer, stream=stream) + stream.sync() # Wait for the GPU transfer to complete - # Step 2: Copy from GPU memory to pinned CPU memory - device_buffer.copy_to(pinned_buffer, stream=stream) - stream.sync() # Wait for the GPU transfer to complete + # Step 3: Create NumPy view of pinned memory using DLPack + pinned_view = np.from_dlpack(pinned_buffer).view(dtype=dtype).reshape(shape) - # Step 3: Create NumPy view of pinned memory using DLPack - pinned_view = np.from_dlpack(pinned_buffer).view(dtype=dtype).reshape(shape) - - # Step 4: Copy from pinned CPU memory to regular CPU memory - # This creates the final result that can be used normally - host_result = pinned_view.copy() - - # Step 5: Clean up the temporary pinned buffer - pinned_buffer.close(stream) - - return host_result + # Step 4: Copy from pinned CPU memory to regular CPU memory + # This creates the final result that can be used normally + return pinned_view.copy() + finally: + # Step 5: Clean up the temporary pinned buffer + pinned_buffer.close(stream) # ------------------------------ Main Demo ------------------------------------ @@ -199,41 +197,51 @@ def main(): print(f"Device: {dev.name}") print(f"[Image array copy of {H}x{W}x{C} image]") - # Step 2: Configure CuPy to use our CUDA stream (for interoperability) - cp.cuda.Stream.from_external(stream).use() - - # Step 3: Create a test image on CPU - print("Creating sample image...") - host_np = make_random_image(H, W, C, dtype=dtype) - - # Step 4: Copy image from CPU to GPU - print("Copying image to GPU...") - device_buffer, pinned_buffer = copy_image_to_gpu_cuda_core(host_np, dev, stream) - - # Step 5: (Optional) Get a CuPy view of GPU data for processing - # This shows how you can work with the GPU data without copying it back - print("Creating CuPy view of GPU data...") - device_cp = cp.from_dlpack(device_buffer).view(dtype=dtype).reshape(H, W, C) - - # Example: compute mean pixel value on GPU - mean_value = float(cp.mean(device_cp)) - print(f"Mean pixel value (computed on GPU): {mean_value:.2f}") - - # Step 6: Copy image back from GPU to CPU - print("Copying image back from GPU...") - host_back = copy_image_from_gpu_cuda_core(device_buffer, host_np.shape, host_np.dtype, dev, stream) - - # Step 7: Verify that the data survived the round trip - print("Verifying result...") - host_back_cp = cp.asarray(host_back) - host_np_cp = cp.asarray(host_np) - verify_array_result(host_back_cp, host_np_cp, rtol=0, atol=0) - - # Step 8: Clean up all allocated resources - device_buffer.close(stream) # Free GPU memory - pinned_buffer.close(stream) # Free pinned CPU memory - stream.close() # Close CUDA stream - cp.cuda.Stream.null.use() # Reset CuPy's stream to default + device_buffer = pinned_buffer = None + try: + # Step 2: Configure CuPy to use our CUDA stream (for interoperability) + cp.cuda.Stream.from_external(stream).use() + + # Step 3: Create a test image on CPU + print("Creating sample image...") + host_np = make_random_image(H, W, C, dtype=dtype) + + # Step 4: Copy image from CPU to GPU + print("Copying image to GPU...") + device_buffer, pinned_buffer = copy_image_to_gpu_cuda_core(host_np, dev, stream) + + # Step 5: (Optional) Get a CuPy view of GPU data for processing + # This shows how you can work with the GPU data without copying it back + print("Creating CuPy view of GPU data...") + device_cp = cp.from_dlpack(device_buffer).view(dtype=dtype).reshape(H, W, C) + + # Example: compute mean pixel value on GPU + mean_value = float(cp.mean(device_cp)) + print(f"Mean pixel value (computed on GPU): {mean_value:.2f}") + + # Step 6: Copy image back from GPU to CPU + print("Copying image back from GPU...") + host_back = copy_image_from_gpu_cuda_core(device_buffer, host_np.shape, host_np.dtype, dev, stream) + + # Step 7: Verify that the data survived the round trip + print("Verifying result...") + host_back_cp = cp.asarray(host_back) + host_np_cp = cp.asarray(host_np) + verify_array_result_or_raise( + host_back_cp, + host_np_cp, + rtol=0, + atol=0, + error_message="Image round-trip verification failed", + ) + finally: + # Step 8: Clean up all allocated resources + if device_buffer is not None: + device_buffer.close(stream) # Free GPU memory + if pinned_buffer is not None: + pinned_buffer.close(stream) # Free pinned CPU memory + stream.close() # Close CUDA stream + cp.cuda.Stream.null.use() # Reset CuPy's stream to default print("\nDone") diff --git a/samples/kernelNsysProfile/kernelNsysProfile.py b/samples/kernelNsysProfile/kernelNsysProfile.py index 99a68d19fa3..9852ce2291f 100644 --- a/samples/kernelNsysProfile/kernelNsysProfile.py +++ b/samples/kernelNsysProfile/kernelNsysProfile.py @@ -70,7 +70,7 @@ # Add parent directory to path to import utilities sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) -from cuda_samples_utils import verify_array_result +from cuda_samples_utils import verify_array_result_or_raise # CUDA C++ kernel definitions # For larger projects, separating kernels into a separate file is also valid. @@ -282,19 +282,31 @@ def run(size): print(" Validating cuda.core kernels:") print(" Vector Add: ", end="") - vec_add_match = verify_array_result(c_cuda, c_cupy, rtol=1e-5, atol=1e-6) + verify_array_result_or_raise( + c_cuda, + c_cupy, + rtol=1e-5, + atol=1e-6, + error_message="Vector Add verification failed", + ) print(" SAXPY: ", end="") - saxpy_match = verify_array_result(y_cuda, y_cupy, rtol=1e-5, atol=1e-6) + verify_array_result_or_raise( + y_cuda, + y_cupy, + rtol=1e-5, + atol=1e-6, + error_message="SAXPY verification failed", + ) print(" Transform: ", end="") - transform_match = verify_array_result(transform_cuda, transform_cupy, rtol=1e-5, atol=1e-6) - - all_pass = vec_add_match and saxpy_match and transform_match - - if not all_pass: - print("\n ERROR: Kernel verification failed!") - return 1 + verify_array_result_or_raise( + transform_cuda, + transform_cupy, + rtol=1e-5, + atol=1e-6, + error_message="Transform verification failed", + ) print() # Final synchronization diff --git a/samples/launchConfigTuning/launchConfigTuning.py b/samples/launchConfigTuning/launchConfigTuning.py index bbd6d30dca9..fd1c3faf235 100644 --- a/samples/launchConfigTuning/launchConfigTuning.py +++ b/samples/launchConfigTuning/launchConfigTuning.py @@ -37,9 +37,13 @@ """ import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) try: import numpy as np + from cuda_samples_utils import verify_array_result_or_raise from cuda.core import ( Device, @@ -246,8 +250,13 @@ def demo_vector_add_tuning(device, stream, mr, kernel): # Verify result stream.sync() expected = np_a + np_b - if np.allclose(np_c, expected): - print("\n[OK] Results verified correct!") + verify_array_result_or_raise( + np_c, + expected, + verbose=False, + error_message="Vector addition verification failed", + ) + print("\n[OK] Results verified correct!") return results finally: diff --git a/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py b/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py index efa7802a324..820a44c4b0d 100644 --- a/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py +++ b/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py @@ -48,7 +48,7 @@ try: import numpy as np - from cuda_samples_utils import print_gpu_info + from cuda_samples_utils import print_gpu_info, verify_array_result_or_raise from cuda.core import ( Device, @@ -187,10 +187,15 @@ def main(): expected = np_in.astype(np.float32) * scale for _ in range(50): expected = np.sqrt(expected * expected + 1.0).astype(np.float32) - if np.allclose(np_out, expected, rtol=1e-4, atol=1e-4): - print("Verification: PASSED") - else: - print("Verification: FAILED") + verify_array_result_or_raise( + np_out, + expected, + rtol=1e-4, + atol=1e-4, + verbose=False, + error_message="Sequential execution verification failed", + ) + print("Verification: PASSED") finally: for buf in (h_in, h_out, d_in, d_out): if buf is not None: @@ -289,8 +294,14 @@ def main(): expected = np_in.astype(np.float32) * scale for _ in range(50): expected = np.sqrt(expected * expected + 1.0).astype(np.float32) - if not np.allclose(np_out, expected, rtol=1e-4, atol=1e-4): - print(f" Verification: FAILED for {n_streams} streams") + verify_array_result_or_raise( + np_out, + expected, + rtol=1e-4, + atol=1e-4, + verbose=False, + error_message=f"Verification failed for {n_streams} streams", + ) finally: for buf in h_ins + h_outs + d_ins + d_outs: buf.close() From 1804ddc118679ae193c860e0f961b2a8276fe263 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Fri, 17 Jul 2026 11:14:55 -0500 Subject: [PATCH 09/11] Split into cuda_bindings and cuda_core samples --- .github/labeler.yml | 8 +- .github/workflows/ci.yml | 6 +- ci/tools/run-tests | 4 +- conftest.py | 3 +- cuda_bindings/AGENTS.md | 2 +- cuda_bindings/DESCRIPTION.rst | 2 +- cuda_bindings/docs/source/conf.py | 12 +- cuda_bindings/docs/source/examples.rst | 19 +- cuda_bindings/docs/source/overview.rst | 2 +- cuda_bindings/pixi.lock | 13680 +++++++--------- cuda_bindings/pixi.toml | 14 + cuda_bindings/pyproject.toml | 4 + .../tests/example_tests/run_samples.py | 39 + .../tests/example_tests/test_args.json | 1 + .../tests/example_tests/test_samples.py | 54 + cuda_core/AGENTS.md | 4 +- cuda_core/DESCRIPTION.rst | 2 +- .../docs/source/10_minutes_to_cuda_core.rst | 2 +- cuda_core/docs/source/conf.py | 11 +- cuda_core/docs/source/examples.rst | 6 +- cuda_core/docs/source/getting-started.rst | 4 +- cuda_core/docs/source/interoperability.rst | 6 +- cuda_core/pixi.lock | 1650 +- cuda_core/pixi.toml | 27 +- cuda_core/pyproject.toml | 2 + cuda_core/pytest.ini | 3 +- cuda_core/tests/example_tests/run_samples.py | 494 +- cuda_core/tests/example_tests/test_args.json | 8 +- .../tests/example_tests/test_run_samples.py | 62 + .../example_tests/test_sample_verification.py | 2 +- cuda_core/tests/example_tests/test_samples.py | 42 +- .../cuda_python_test_helpers/sample_runner.py | 513 + cuda_python_test_helpers/pyproject.toml | 4 + pixi.toml | 15 +- pytest.ini | 2 +- ruff.toml | 2 +- samples/README.md | 40 + .../0_Introduction/clockNvrtc/README.md | 2 +- .../0_Introduction/clockNvrtc/clockNvrtc.py | 2 +- .../clockNvrtc/requirements.txt | 0 .../simpleCubemapTexture/README.md | 2 +- .../simpleCubemapTexture/requirements.txt | 0 .../simpleCubemapTexture.py | 4 +- .../systemWideAtomics/README.md | 2 +- .../systemWideAtomics/requirements.txt | 0 .../systemWideAtomics/systemWideAtomics.py | 2 +- .../vectorAddDriverApi/README.md | 8 +- .../vectorAddDriverApi/requirements.txt | 0 .../vectorAddDriverApi/vectorAddDriverApi.py | 6 +- .../0_Introduction/vectorAddMmap/README.md | 2 +- .../vectorAddMmap/requirements.txt | 0 .../vectorAddMmap/vectorAddMmap.py | 2 +- .../streamOrderedAllocation/README.md | 4 +- .../streamOrderedAllocation/requirements.txt | 0 .../streamOrderedAllocation.py | 4 +- .../cudaGraphsManualNodes/README.md | 8 +- .../cudaGraphsManualNodes.py | 6 +- .../cudaGraphsManualNodes/requirements.txt | 0 .../globalToShmemAsyncCopy/README.md | 4 +- .../globalToShmemAsyncCopy.py | 4 +- .../globalToShmemAsyncCopy/requirements.txt | 0 .../conjugateGradientMultiBlockCG/README.md | 6 +- .../conjugateGradientMultiBlockCG.py | 7 +- .../requirements.txt | 0 .../4_CUDA_Libraries/nvidiaSmi/README.md | 4 +- .../4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py | 2 +- .../nvidiaSmi/requirements.txt | 0 samples/cuda_bindings/Utilities/README.md | 35 + .../Utilities/cuda_bindings_utils.py | 0 .../extra/isoFdModelling/README.md | 4 +- .../extra/isoFdModelling/isoFdModelling.py | 4 +- .../extra/isoFdModelling/requirements.txt | 0 .../extra/jitProgram/README.md | 4 +- .../extra/jitProgram/jitProgram.py | 2 +- .../extra/jitProgram/requirements.txt | 0 samples/{ => cuda_core}/Utilities/README.md | 13 +- samples/{ => cuda_core}/Utilities/__init__.py | 0 .../Utilities/cuda_samples_utils.py | 0 .../{ => cuda_core}/binarySearch/README.md | 6 +- .../binarySearch/binarySearch.py | 0 .../binarySearch/requirements.txt | 0 .../{ => cuda_core}/blockwiseSum/README.md | 0 .../blockwiseSum/blockwiseSum.py | 0 .../blockwiseSum/requirements.txt | 0 .../blurImageUnifiedMemory/README.md | 2 +- .../blurImageUnifiedMemory.py | 0 .../blurImageUnifiedMemory/blurred_image.png | Bin .../blurImageUnifiedMemory/original_image.png | Bin .../blurImageUnifiedMemory/requirements.txt | 0 .../copyImageArraytoGPU/README.md | 6 +- .../copyImageArraytoGPU.py | 0 .../copyImageArraytoGPU/requirements.txt | 0 .../cudaComputeLambdas/README.md | 6 +- .../cudaComputeLambdas/cudaComputeLambdas.py | 0 .../cudaComputeLambdas/requirements.txt | 0 samples/{ => cuda_core}/cudaGraphs/README.md | 6 +- .../{ => cuda_core}/cudaGraphs/cudaGraphs.py | 0 .../cudaGraphs/requirements.txt | 0 .../customPyTorchKernel/README.md | 2 +- .../customPyTorchKernel.py | 0 .../customPyTorchKernel/requirements.txt | 0 .../customTensorFlowKernel/README.md | 2 +- .../customTensorFlowKernel.py | 0 .../customTensorFlowKernel/requirements.txt | 0 samples/{ => cuda_core}/deviceQuery/README.md | 4 +- .../deviceQuery/deviceQuery.py | 0 .../deviceQuery/requirements.txt | 0 .../fftSignalAnalysis/README.md | 0 .../fftSignalAnalysis/fftSignalAnalysis.py | 0 .../fftSignalAnalysis/requirements.txt | 0 .../{ => cuda_core}/glInteropFluid/README.md | 6 +- .../glInteropFluid/glInteropFluid.py | 0 .../glInteropFluid/requirements.txt | 0 .../glInteropFluidNumbaCudaMlir/README.md | 4 +- .../glInteropFluidNumbaCudaMlir.py | 0 .../requirements.txt | 0 .../glInteropMipmapLod/README.md | 6 +- .../glInteropMipmapLod/glInteropMipmapLod.py | 0 .../glInteropMipmapLod/requirements.txt | 0 .../{ => cuda_core}/glInteropPlasma/README.md | 0 .../glInteropPlasma/glInteropPlasma.py | 0 .../glInteropPlasma/requirements.txt | 0 .../{ => cuda_core}/greenContext/README.md | 4 +- .../greenContext/greenContext.py | 0 .../greenContext/requirements.txt | 0 .../{ => cuda_core}/ipcMemoryPool/README.md | 6 +- .../ipcMemoryPool/ipcMemoryPool.py | 0 .../ipcMemoryPool/requirements.txt | 0 .../{ => cuda_core}/jitLtoLinking/README.md | 6 +- .../jitLtoLinking/jitLtoLinking.py | 0 .../jitLtoLinking/requirements.txt | 0 .../kernelNsysProfile/README.md | 0 .../kernelNsysProfile/kernelNsysProfile.py | 0 .../kernelNsysProfile/requirements.txt | 0 .../launchConfigTuning/README.md | 0 .../launchConfigTuning/launchConfigTuning.py | 0 .../launchConfigTuning/requirements.txt | 0 .../matrixMulSharedMem/README.md | 2 +- .../matrixMulSharedMem/matrixMulSharedMem.py | 0 .../matrixMulSharedMem/requirements.txt | 0 .../{ => cuda_core}/memoryResources/README.md | 6 +- .../memoryResources/memoryResources.py | 0 .../memoryResources/requirements.txt | 0 .../multiGPUGradientAverage/README.md | 0 .../multiGPUGradientAverage.py | 0 .../multiGPUGradientAverage/requirements.txt | 0 samples/{ => cuda_core}/numpyVsCupy/README.md | 8 +- .../numpyVsCupy/numpyVsCupy.py | 0 .../numpyVsCupy/requirements.txt | 0 samples/{ => cuda_core}/pageRank/README.md | 2 +- samples/{ => cuda_core}/pageRank/pageRank.py | 0 .../{ => cuda_core}/pageRank/requirements.txt | 0 .../parallelHistogram/README.md | 0 .../parallelHistogram/parallelHistogram.py | 0 .../parallelHistogram/requirements.txt | 0 .../parallelReduction/README.md | 0 .../parallelReduction/parallelReduction.py | 0 .../parallelReduction/requirements.txt | 0 samples/{ => cuda_core}/prefixSum/README.md | 0 .../{ => cuda_core}/prefixSum/prefixSum.py | 0 .../prefixSum/requirements.txt | 0 .../processCheckpoint/README.md | 2 +- .../processCheckpoint/processCheckpoint.py | 0 .../processCheckpoint/requirements.txt | 0 samples/{ => cuda_core}/reduction/README.md | 0 .../{ => cuda_core}/reduction/reduction.py | 0 .../reduction/requirements.txt | 0 .../reductionMultiBlockCG/README.md | 0 .../reductionMultiBlockCG.py | 0 .../reductionMultiBlockCG/requirements.txt | 0 .../{ => cuda_core}/simpleMultiGpu/README.md | 0 .../simpleMultiGpu/requirements.txt | 0 .../simpleMultiGpu/simpleMultiGpu.py | 0 samples/{ => cuda_core}/simpleP2P/README.md | 0 .../simpleP2P/requirements.txt | 0 .../{ => cuda_core}/simpleP2P/simpleP2P.py | 0 samples/{ => cuda_core}/simplePrint/README.md | 2 +- .../simplePrint/requirements.txt | 0 .../simplePrint/simplePrint.py | 0 .../{ => cuda_core}/simpleZeroCopy/README.md | 0 .../simpleZeroCopy/requirements.txt | 0 .../simpleZeroCopy/simpleZeroCopy.py | 0 .../streamingCopyComputeOverlap/README.md | 0 .../requirements.txt | 0 .../streamingCopyComputeOverlap.py | 0 .../stridedMemoryViewConstructors/README.md | 0 .../requirements.txt | 0 .../stridedMemoryViewConstructors.py | 0 .../stridedMemoryViewCpu/README.md | 0 .../stridedMemoryViewCpu/requirements.txt | 0 .../stridedMemoryViewCpu.py | 0 .../stridedMemoryViewGpu/README.md | 0 .../stridedMemoryViewGpu/requirements.txt | 0 .../stridedMemoryViewGpu.py | 0 samples/{ => cuda_core}/systemInfo/README.md | 4 +- .../systemInfo/requirements.txt | 0 .../{ => cuda_core}/systemInfo/systemInfo.py | 0 .../{ => cuda_core}/textureSample/README.md | 4 +- .../textureSample/requirements.txt | 0 .../textureSample/textureSample.py | 0 .../threadBlockCluster/README.md | 0 .../threadBlockCluster/requirements.txt | 0 .../threadBlockCluster/threadBlockCluster.py | 0 .../{ => cuda_core}/tmaTensorMap/README.md | 6 +- .../tmaTensorMap/requirements.txt | 0 .../tmaTensorMap/tmaTensorMap.py | 4 +- samples/{ => cuda_core}/vectorAdd/README.md | 6 +- .../vectorAdd/requirements.txt | 0 .../{ => cuda_core}/vectorAdd/vectorAdd.py | 0 209 files changed, 6975 insertions(+), 10031 deletions(-) create mode 100644 cuda_bindings/tests/example_tests/run_samples.py create mode 100644 cuda_bindings/tests/example_tests/test_args.json create mode 100644 cuda_bindings/tests/example_tests/test_samples.py create mode 100644 cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py create mode 100644 samples/README.md rename samples/{ => cuda_bindings}/0_Introduction/clockNvrtc/README.md (97%) rename samples/{ => cuda_bindings}/0_Introduction/clockNvrtc/clockNvrtc.py (98%) rename samples/{ => cuda_bindings}/0_Introduction/clockNvrtc/requirements.txt (100%) rename samples/{ => cuda_bindings}/0_Introduction/simpleCubemapTexture/README.md (97%) rename samples/{ => cuda_bindings}/0_Introduction/simpleCubemapTexture/requirements.txt (100%) rename samples/{ => cuda_bindings}/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py (98%) rename samples/{ => cuda_bindings}/0_Introduction/systemWideAtomics/README.md (97%) rename samples/{ => cuda_bindings}/0_Introduction/systemWideAtomics/requirements.txt (100%) rename samples/{ => cuda_bindings}/0_Introduction/systemWideAtomics/systemWideAtomics.py (99%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddDriverApi/README.md (89%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddDriverApi/requirements.txt (100%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py (96%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddMmap/README.md (97%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddMmap/requirements.txt (100%) rename samples/{ => cuda_bindings}/0_Introduction/vectorAddMmap/vectorAddMmap.py (99%) rename samples/{ => cuda_bindings}/2_Concepts_and_Techniques/streamOrderedAllocation/README.md (94%) rename samples/{ => cuda_bindings}/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt (100%) rename samples/{ => cuda_bindings}/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py (98%) rename samples/{ => cuda_bindings}/3_CUDA_Features/cudaGraphsManualNodes/README.md (91%) rename samples/{ => cuda_bindings}/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py (98%) rename samples/{ => cuda_bindings}/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt (100%) rename samples/{ => cuda_bindings}/3_CUDA_Features/globalToShmemAsyncCopy/README.md (95%) rename samples/{ => cuda_bindings}/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py (99%) rename samples/{ => cuda_bindings}/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt (100%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md (92%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py (98%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt (100%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/nvidiaSmi/README.md (94%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py (99%) rename samples/{ => cuda_bindings}/4_CUDA_Libraries/nvidiaSmi/requirements.txt (100%) create mode 100644 samples/cuda_bindings/Utilities/README.md rename samples/{ => cuda_bindings}/Utilities/cuda_bindings_utils.py (100%) rename samples/{ => cuda_bindings}/extra/isoFdModelling/README.md (95%) rename samples/{ => cuda_bindings}/extra/isoFdModelling/isoFdModelling.py (99%) rename samples/{ => cuda_bindings}/extra/isoFdModelling/requirements.txt (100%) rename samples/{ => cuda_bindings}/extra/jitProgram/README.md (93%) rename samples/{ => cuda_bindings}/extra/jitProgram/jitProgram.py (98%) rename samples/{ => cuda_bindings}/extra/jitProgram/requirements.txt (100%) rename samples/{ => cuda_core}/Utilities/README.md (93%) rename samples/{ => cuda_core}/Utilities/__init__.py (100%) rename samples/{ => cuda_core}/Utilities/cuda_samples_utils.py (100%) rename samples/{ => cuda_core}/binarySearch/README.md (94%) rename samples/{ => cuda_core}/binarySearch/binarySearch.py (100%) rename samples/{ => cuda_core}/binarySearch/requirements.txt (100%) rename samples/{ => cuda_core}/blockwiseSum/README.md (100%) rename samples/{ => cuda_core}/blockwiseSum/blockwiseSum.py (100%) rename samples/{ => cuda_core}/blockwiseSum/requirements.txt (100%) rename samples/{ => cuda_core}/blurImageUnifiedMemory/README.md (98%) rename samples/{ => cuda_core}/blurImageUnifiedMemory/blurImageUnifiedMemory.py (100%) rename samples/{ => cuda_core}/blurImageUnifiedMemory/blurred_image.png (100%) rename samples/{ => cuda_core}/blurImageUnifiedMemory/original_image.png (100%) rename samples/{ => cuda_core}/blurImageUnifiedMemory/requirements.txt (100%) rename samples/{ => cuda_core}/copyImageArraytoGPU/README.md (93%) rename samples/{ => cuda_core}/copyImageArraytoGPU/copyImageArraytoGPU.py (100%) rename samples/{ => cuda_core}/copyImageArraytoGPU/requirements.txt (100%) rename samples/{ => cuda_core}/cudaComputeLambdas/README.md (94%) rename samples/{ => cuda_core}/cudaComputeLambdas/cudaComputeLambdas.py (100%) rename samples/{ => cuda_core}/cudaComputeLambdas/requirements.txt (100%) rename samples/{ => cuda_core}/cudaGraphs/README.md (95%) rename samples/{ => cuda_core}/cudaGraphs/cudaGraphs.py (100%) rename samples/{ => cuda_core}/cudaGraphs/requirements.txt (100%) rename samples/{ => cuda_core}/customPyTorchKernel/README.md (97%) rename samples/{ => cuda_core}/customPyTorchKernel/customPyTorchKernel.py (100%) rename samples/{ => cuda_core}/customPyTorchKernel/requirements.txt (100%) rename samples/{ => cuda_core}/customTensorFlowKernel/README.md (97%) rename samples/{ => cuda_core}/customTensorFlowKernel/customTensorFlowKernel.py (100%) rename samples/{ => cuda_core}/customTensorFlowKernel/requirements.txt (100%) rename samples/{ => cuda_core}/deviceQuery/README.md (98%) rename samples/{ => cuda_core}/deviceQuery/deviceQuery.py (100%) rename samples/{ => cuda_core}/deviceQuery/requirements.txt (100%) rename samples/{ => cuda_core}/fftSignalAnalysis/README.md (100%) rename samples/{ => cuda_core}/fftSignalAnalysis/fftSignalAnalysis.py (100%) rename samples/{ => cuda_core}/fftSignalAnalysis/requirements.txt (100%) rename samples/{ => cuda_core}/glInteropFluid/README.md (89%) rename samples/{ => cuda_core}/glInteropFluid/glInteropFluid.py (100%) rename samples/{ => cuda_core}/glInteropFluid/requirements.txt (100%) rename samples/{ => cuda_core}/glInteropFluidNumbaCudaMlir/README.md (87%) rename samples/{ => cuda_core}/glInteropFluidNumbaCudaMlir/glInteropFluidNumbaCudaMlir.py (100%) rename samples/{ => cuda_core}/glInteropFluidNumbaCudaMlir/requirements.txt (100%) rename samples/{ => cuda_core}/glInteropMipmapLod/README.md (86%) rename samples/{ => cuda_core}/glInteropMipmapLod/glInteropMipmapLod.py (100%) rename samples/{ => cuda_core}/glInteropMipmapLod/requirements.txt (100%) rename samples/{ => cuda_core}/glInteropPlasma/README.md (100%) rename samples/{ => cuda_core}/glInteropPlasma/glInteropPlasma.py (100%) rename samples/{ => cuda_core}/glInteropPlasma/requirements.txt (100%) rename samples/{ => cuda_core}/greenContext/README.md (98%) rename samples/{ => cuda_core}/greenContext/greenContext.py (100%) rename samples/{ => cuda_core}/greenContext/requirements.txt (100%) rename samples/{ => cuda_core}/ipcMemoryPool/README.md (95%) rename samples/{ => cuda_core}/ipcMemoryPool/ipcMemoryPool.py (100%) rename samples/{ => cuda_core}/ipcMemoryPool/requirements.txt (100%) rename samples/{ => cuda_core}/jitLtoLinking/README.md (95%) rename samples/{ => cuda_core}/jitLtoLinking/jitLtoLinking.py (100%) rename samples/{ => cuda_core}/jitLtoLinking/requirements.txt (100%) rename samples/{ => cuda_core}/kernelNsysProfile/README.md (100%) rename samples/{ => cuda_core}/kernelNsysProfile/kernelNsysProfile.py (100%) rename samples/{ => cuda_core}/kernelNsysProfile/requirements.txt (100%) rename samples/{ => cuda_core}/launchConfigTuning/README.md (100%) rename samples/{ => cuda_core}/launchConfigTuning/launchConfigTuning.py (100%) rename samples/{ => cuda_core}/launchConfigTuning/requirements.txt (100%) rename samples/{ => cuda_core}/matrixMulSharedMem/README.md (99%) rename samples/{ => cuda_core}/matrixMulSharedMem/matrixMulSharedMem.py (100%) rename samples/{ => cuda_core}/matrixMulSharedMem/requirements.txt (100%) rename samples/{ => cuda_core}/memoryResources/README.md (96%) rename samples/{ => cuda_core}/memoryResources/memoryResources.py (100%) rename samples/{ => cuda_core}/memoryResources/requirements.txt (100%) rename samples/{ => cuda_core}/multiGPUGradientAverage/README.md (100%) rename samples/{ => cuda_core}/multiGPUGradientAverage/multiGPUGradientAverage.py (100%) rename samples/{ => cuda_core}/multiGPUGradientAverage/requirements.txt (100%) rename samples/{ => cuda_core}/numpyVsCupy/README.md (92%) rename samples/{ => cuda_core}/numpyVsCupy/numpyVsCupy.py (100%) rename samples/{ => cuda_core}/numpyVsCupy/requirements.txt (100%) rename samples/{ => cuda_core}/pageRank/README.md (98%) rename samples/{ => cuda_core}/pageRank/pageRank.py (100%) rename samples/{ => cuda_core}/pageRank/requirements.txt (100%) rename samples/{ => cuda_core}/parallelHistogram/README.md (100%) rename samples/{ => cuda_core}/parallelHistogram/parallelHistogram.py (100%) rename samples/{ => cuda_core}/parallelHistogram/requirements.txt (100%) rename samples/{ => cuda_core}/parallelReduction/README.md (100%) rename samples/{ => cuda_core}/parallelReduction/parallelReduction.py (100%) rename samples/{ => cuda_core}/parallelReduction/requirements.txt (100%) rename samples/{ => cuda_core}/prefixSum/README.md (100%) rename samples/{ => cuda_core}/prefixSum/prefixSum.py (100%) rename samples/{ => cuda_core}/prefixSum/requirements.txt (100%) rename samples/{ => cuda_core}/processCheckpoint/README.md (99%) rename samples/{ => cuda_core}/processCheckpoint/processCheckpoint.py (100%) rename samples/{ => cuda_core}/processCheckpoint/requirements.txt (100%) rename samples/{ => cuda_core}/reduction/README.md (100%) rename samples/{ => cuda_core}/reduction/reduction.py (100%) rename samples/{ => cuda_core}/reduction/requirements.txt (100%) rename samples/{ => cuda_core}/reductionMultiBlockCG/README.md (100%) rename samples/{ => cuda_core}/reductionMultiBlockCG/reductionMultiBlockCG.py (100%) rename samples/{ => cuda_core}/reductionMultiBlockCG/requirements.txt (100%) rename samples/{ => cuda_core}/simpleMultiGpu/README.md (100%) rename samples/{ => cuda_core}/simpleMultiGpu/requirements.txt (100%) rename samples/{ => cuda_core}/simpleMultiGpu/simpleMultiGpu.py (100%) rename samples/{ => cuda_core}/simpleP2P/README.md (100%) rename samples/{ => cuda_core}/simpleP2P/requirements.txt (100%) rename samples/{ => cuda_core}/simpleP2P/simpleP2P.py (100%) rename samples/{ => cuda_core}/simplePrint/README.md (99%) rename samples/{ => cuda_core}/simplePrint/requirements.txt (100%) rename samples/{ => cuda_core}/simplePrint/simplePrint.py (100%) rename samples/{ => cuda_core}/simpleZeroCopy/README.md (100%) rename samples/{ => cuda_core}/simpleZeroCopy/requirements.txt (100%) rename samples/{ => cuda_core}/simpleZeroCopy/simpleZeroCopy.py (100%) rename samples/{ => cuda_core}/streamingCopyComputeOverlap/README.md (100%) rename samples/{ => cuda_core}/streamingCopyComputeOverlap/requirements.txt (100%) rename samples/{ => cuda_core}/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py (100%) rename samples/{ => cuda_core}/stridedMemoryViewConstructors/README.md (100%) rename samples/{ => cuda_core}/stridedMemoryViewConstructors/requirements.txt (100%) rename samples/{ => cuda_core}/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py (100%) rename samples/{ => cuda_core}/stridedMemoryViewCpu/README.md (100%) rename samples/{ => cuda_core}/stridedMemoryViewCpu/requirements.txt (100%) rename samples/{ => cuda_core}/stridedMemoryViewCpu/stridedMemoryViewCpu.py (100%) rename samples/{ => cuda_core}/stridedMemoryViewGpu/README.md (100%) rename samples/{ => cuda_core}/stridedMemoryViewGpu/requirements.txt (100%) rename samples/{ => cuda_core}/stridedMemoryViewGpu/stridedMemoryViewGpu.py (100%) rename samples/{ => cuda_core}/systemInfo/README.md (97%) rename samples/{ => cuda_core}/systemInfo/requirements.txt (100%) rename samples/{ => cuda_core}/systemInfo/systemInfo.py (100%) rename samples/{ => cuda_core}/textureSample/README.md (87%) rename samples/{ => cuda_core}/textureSample/requirements.txt (100%) rename samples/{ => cuda_core}/textureSample/textureSample.py (100%) rename samples/{ => cuda_core}/threadBlockCluster/README.md (100%) rename samples/{ => cuda_core}/threadBlockCluster/requirements.txt (100%) rename samples/{ => cuda_core}/threadBlockCluster/threadBlockCluster.py (100%) rename samples/{ => cuda_core}/tmaTensorMap/README.md (95%) rename samples/{ => cuda_core}/tmaTensorMap/requirements.txt (100%) rename samples/{ => cuda_core}/tmaTensorMap/tmaTensorMap.py (98%) rename samples/{ => cuda_core}/vectorAdd/README.md (95%) rename samples/{ => cuda_core}/vectorAdd/requirements.txt (100%) rename samples/{ => cuda_core}/vectorAdd/vectorAdd.py (100%) diff --git a/.github/labeler.yml b/.github/labeler.yml index 62b46533816..cff89c44a85 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -7,11 +7,15 @@ cuda.bindings: - changed-files: - - any-glob-to-any-file: 'cuda_bindings/**' + - any-glob-to-any-file: + - 'cuda_bindings/**' + - 'samples/cuda_bindings/**' cuda.core: - changed-files: - - any-glob-to-any-file: 'cuda_core/**' + - any-glob-to-any-file: + - 'cuda_core/**' + - 'samples/cuda_core/**' cuda.pathfinder: - changed-files: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe43b52d01a..56338eae803 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -150,12 +150,12 @@ jobs: } { - echo "bindings=$(has_match '^cuda_bindings/')" - echo "core=$(has_match '^cuda_core/')" + echo "bindings=$(has_match '^(cuda_bindings/|samples/cuda_bindings/)')" + echo "core=$(has_match '^(cuda_core/|samples/cuda_core/)')" echo "pathfinder=$(has_match '^cuda_pathfinder/')" echo "python_meta=$(has_match '^cuda_python/')" echo "test_helpers=$(has_match '^cuda_python_test_helpers/')" - echo "shared=$(has_match '^(\.github/|ci/|scripts/|toolshed/|conftest\.py$|pyproject\.toml$|pixi\.(toml|lock)$|pytest\.ini$|ruff\.toml$)')" + echo "shared=$(has_match '^(\.github/|ci/|scripts/|toolshed/|samples/README\.md$|conftest\.py$|pyproject\.toml$|pixi\.(toml|lock)$|pytest\.ini$|ruff\.toml$)')" } >> "$GITHUB_OUTPUT" - name: Compose gating outputs diff --git a/ci/tools/run-tests b/ci/tools/run-tests index e951aadef0c..c8051bb6ade 100755 --- a/ci/tools/run-tests +++ b/ci/tools/run-tests @@ -102,8 +102,8 @@ elif [[ "${test_module}" == "core" || "${test_module}" == nightly-* ]]; then # Constrain cuda-toolkit to the requested CTK version to avoid # pip pulling in a newer nvidia-cuda-runtime that conflicts with it. pip install "${CORE_WHL[@]}" --group "test-cu${TEST_CUDA_MAJOR}${FREE_THREADING}" "cuda-toolkit==${TEST_CUDA_MAJOR_MINOR}.*" - # Optional deps needed by some samples exercised in the core suite - # (tests/example_tests/test_samples.py). cupy already comes from the + # Optional deps needed by some cuda.core samples exercised in this suite. + # CuPy already comes from the # test-cuXX group; install the rest best-effort so those samples run # instead of being waived. Samples with heavier/unavailable deps stay waived. echo "Installing optional sample deps (nvtx, pillow)" diff --git a/conftest.py b/conftest.py index eb7b6aaa435..f49d55d5756 100644 --- a/conftest.py +++ b/conftest.py @@ -41,8 +41,7 @@ def pytest_collection_modifyitems(config, items): # noqa: ARG001 if nodeid.startswith("tests/integration/") or "/tests/integration/" in nodeid: item.add_marker(pytest.mark.smoke) - # Sample tests run within the cuda_core suite (orchestrator + wrapper live - # under cuda_core/tests/example_tests/; sample sources under ./samples/). + # Each package owns the sample wrapper under its example_tests subtree. if "example_tests/test_samples.py" in nodeid: item.add_marker(pytest.mark.samples) diff --git a/cuda_bindings/AGENTS.md b/cuda_bindings/AGENTS.md index 12267ad12d0..989550c9088 100644 --- a/cuda_bindings/AGENTS.md +++ b/cuda_bindings/AGENTS.md @@ -39,7 +39,7 @@ subpackage in the `cuda-python` monorepo. - **Cython tests**: - build: `tests/cython/build_tests.sh` (or platform equivalent) - run: `pytest tests/cython/` -- **Examples**: example coverage is pytest-based under `examples/`. +- **Samples**: sample coverage is pytest-based under `../samples/cuda_bindings/`. - **Benchmarks**: run with `pytest --benchmark-only benchmarks/` when needed. ## Build and environment notes diff --git a/cuda_bindings/DESCRIPTION.rst b/cuda_bindings/DESCRIPTION.rst index 08af44abb79..04ccc93e98a 100644 --- a/cuda_bindings/DESCRIPTION.rst +++ b/cuda_bindings/DESCRIPTION.rst @@ -13,7 +13,7 @@ cuda-bindings: Low-level CUDA interfaces * `Repository `_ * `Documentation `_ -* `Examples `_ +* `Examples `_ * `Issue tracker `_ For the installation instruction, please refer to the `Installation `_ page. diff --git a/cuda_bindings/docs/source/conf.py b/cuda_bindings/docs/source/conf.py index 932eaf6d820..2043cfae359 100644 --- a/cuda_bindings/docs/source/conf.py +++ b/cuda_bindings/docs/source/conf.py @@ -122,19 +122,23 @@ def _html_baseurl(): extlinks = { "cuda-bindings-example": ( - f"https://github.com/NVIDIA/cuda-python/blob/{GITHUB_EXAMPLES_REF}/cuda_bindings/examples/%s", + f"https://github.com/NVIDIA/cuda-python/blob/{GITHUB_EXAMPLES_REF}/samples/cuda_bindings/%s", "%s", ), "cuda-bindings-examples": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/cuda_bindings/examples%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_bindings%s", "%s", ), "sample": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_bindings/%s", "%s", ), "samples": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_bindings%s", + "%s", + ), + "cuda-core-sample": ( + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_core/%s", "%s", ), } diff --git a/cuda_bindings/docs/source/examples.rst b/cuda_bindings/docs/source/examples.rst index c5dd5af5638..29ea46b0dbb 100644 --- a/cuda_bindings/docs/source/examples.rst +++ b/cuda_bindings/docs/source/examples.rst @@ -4,17 +4,19 @@ Examples ======== -The canonical, runnable examples for ``cuda.bindings`` live under the top-level -:samples:`samples/ directory ` of the cuda-python repository, alongside -the ``cuda.core`` samples. Each sample is a self-contained directory with +The canonical, runnable examples for ``cuda.bindings`` live under +:samples:`samples/cuda_bindings/ ` in the cuda-python repository. Each +sample is a self-contained directory with its own ``README.md``, ``requirements.txt``, and PEP 723 dependency block, -and every sample is exercised as part of the ``cuda.core`` test suite. +and every sample is exercised as part of the ``cuda.bindings`` test suite. The cuda-bindings-flavored samples preserve the same category structure the ``cuda-samples`` repository uses, so they are grouped under -``samples/0_Introduction/``, ``samples/2_Concepts_and_Techniques/``, -``samples/3_CUDA_Features/``, ``samples/4_CUDA_Libraries/``, and -``samples/extra/``. +``samples/cuda_bindings/0_Introduction/``, +``samples/cuda_bindings/2_Concepts_and_Techniques/``, +``samples/cuda_bindings/3_CUDA_Features/``, +``samples/cuda_bindings/4_CUDA_Libraries/``, and +``samples/cuda_bindings/extra/``. Introduction ------------ @@ -68,4 +70,5 @@ Advanced and interoperability with peer-to-peer halo exchange. - :sample:`extra/jitProgram ` JIT-compiles a SAXPY kernel with NVRTC and launches it through the - Driver API — the low-level companion to ``samples/jitLtoLinking/``. + Driver API -- the low-level companion to + :cuda-core-sample:`cuda.core's jitLtoLinking sample `. diff --git a/cuda_bindings/docs/source/overview.rst b/cuda_bindings/docs/source/overview.rst index 14c068c2af5..aefe7819f51 100644 --- a/cuda_bindings/docs/source/overview.rst +++ b/cuda_bindings/docs/source/overview.rst @@ -524,7 +524,7 @@ CUDA objects Certain CUDA kernels use native CUDA types as their parameters such as ``cudaTextureObject_t``. These types require special handling since they're neither a primitive ctype nor a custom user type. Since ``cuda.bindings`` exposes each of them as Python classes, they each implement ``getPtr()`` and ``__int__()``. These two callables used to support the NumPy and ctypes approach. The difference between each call is further described under `Tips and Tricks `_. For this example, lets use the ``transformKernel`` from -:cuda-bindings-example:`simple_cubemap_texture.py <0_Introduction/simple_cubemap_texture.py>`. +:cuda-bindings-example:`simpleCubemapTexture.py <0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py>`. The :doc:`examples` page links to more samples covering textures, graphs, memory mapping, and multi-GPU workflows. diff --git a/cuda_bindings/pixi.lock b/cuda_bindings/pixi.lock index b3493db3209..9c102aa52a5 100644 --- a/cuda_bindings/pixi.lock +++ b/cuda_bindings/pixi.lock @@ -8,14 +8,17 @@ environments: packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda @@ -31,194 +34,247 @@ environments: - 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-profiler-api-12.9.79-h7938cbb_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py314h1807b08_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hcddb375_914.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h8dc83e7_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h6f77f03_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.5-h2b0a6b4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.7-h2b0a6b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.0-h6083320_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.5-h434b012_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.14.1.1-hbc026e6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-ha23c83e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.9.82-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.9.82-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h2840a7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-h9d88235_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h65dd3cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.12-hdeec2a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . build: py314ha6d028f_0 - conda: ../cuda_pathfinder linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.46.1-default_h5f4c503_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-12.9.86-h579c4fd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-12.9.79-h3ae8b8a_0.conda @@ -234,182 +290,235 @@ environments: - 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/linux-aarch64/cuda-profiler-api-12.9.79-h16bee8c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.4-py314h4c416a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py314hc6b4731_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h62efc85_914.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h635796f_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.7-h90308e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.0-h1134a53_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260107.1-cxx17_h6983b43_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.5-hac26362_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.14.1.1-had8bf56_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.4.0-hf71c8f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.2-default_ha470c98_1000.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.3.0-h81d0cf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-devel-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.12.0-hbae46ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-12.9.82-h8f3c8d4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-12.9.82-h8f3c8d4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-12.9.86-h8f3c8d4_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.0.0-h3d5001d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.0.0-h3d5001d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.0.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.0.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.0.0-h558496d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.0.0-h558496d_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.0.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.0.0-h2cb6e3c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.0.0-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.33.5-h1f88751_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.2-h8171147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h30ec8a2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.3-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.2-hdb009f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py314haac167e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py314he1698a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h663e864_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.12-had2c13b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.0.1-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.2.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-hfefdfc9_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5cf4473_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.26.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - conda: . build: py314he8946ed_0 - conda: ../cuda_pathfinder win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45.1-default_ha84baeb_101.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.46.1-default_ha84baeb_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/conda-gcc-specs-15.2.0-hd546029_18.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-12.9.86-h57928b3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda @@ -425,118 +534,152 @@ environments: - 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-profiler-api-12.9.79-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py314h344ed54_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py314h344ed54_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_hb2d76f6_914.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_hdd6294f_902.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-ha526d7c_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.5-h1f5b9c4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.2.0-h294ba9c_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.0-h5a1b470_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-h6123e3b_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h062b9a2_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.7-h1f5b9c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.88.2-h395db07_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.88.2-h74ecf4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45.1-default_hfd38196_101.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.46.1-default_hfd38196_102.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_118.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.3.0-ha71e874_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-devel-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-hf3f85d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.12.0-h932607e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-12.9.82-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-12.9.82-hac47afa_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-12.9.86-hac47afa_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_18.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_118.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.3-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/m2w64-sysroot_win-64-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-crt-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-headers-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-he206cdd_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-winpthreads-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h03d888a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_233.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.1.0-h57928b3_233.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-h1eab103_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.2-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-h8fa7867_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.1-h49e36cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.12-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . build: py314h5e6f764_0 @@ -548,19 +691,20 @@ environments: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.33-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.73-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-13.3.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda @@ -568,195 +712,255 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.3.33-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.33-h69a702a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.73-h69a702a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.73-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.73-h4bc722e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-13.3.27-h7938cbb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py314h1807b08_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hb3f9226_906.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h8dc83e7_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-hc5723f1_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.4-h2b0a6b4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.1.0-hfd11570_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.7-h2b0a6b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.3.0-h6083320_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.1-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.26.3-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.5-h434b012_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-ha23c83e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.3-h6548e54_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.2.0-hed573e4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.2.0-hed573e4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.2.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.2.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.2.0-h1862bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.2.0-h1862bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.2.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.2.0-h0767aad_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.2.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.5.2-hd0c01bc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.53-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h2840a7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-hf4e2dac_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-h9d88235_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.13-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.328.1-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hca6bf5a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-he237659_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.0-py314h2b28147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h65dd3cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.30-h3b84278_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h3e344bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.12-hdeec2a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2025.4-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . build: py314hd3a1e81_0 - conda: ../cuda_pathfinder linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.1-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45-default_h5f4c503_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.46.1-default_h5f4c503_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.3.1-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-13.3.33-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-13.3.73-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-dev-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-13.3.29-h8f3c8d4_0.conda @@ -764,182 +968,243 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.3.33-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.33-he9431aa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.33-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.33-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.33-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.73-he9431aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.73-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.73-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.73-h7b14b0b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-profiler-api-13.3.27-h16bee8c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.4-py314h4c416a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py314hc6b4731_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h936a714_906.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h635796f_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.15.0-h8dda3cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-habb1d5c_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.4-h90308e0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.1.0-hd1da3a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.7-h90308e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-12.3.0-h1134a53_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.1-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.5-hac26362_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-hd65408f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.4.0-hf71c8f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.3-hf53f6bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.1-default_ha470c98_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-devel-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.12.0-hbae46ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.2.0-hcd21e76_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.2.0-hcd21e76_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.2.0-h3890994_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2025.2.0-h3890994_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2025.2.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2025.2.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2025.2.0-h07d5dce_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2025.2.0-h07d5dce_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2025.2.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2025.2.0-h38473e3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2025.2.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.5.2-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.53-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h2cf3c76_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.0-h8171147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h30ec8a2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.1-h10b116e_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.3-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.2-hdb009f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.13-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.328.1-h8b8848b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h79dcc73_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h825857f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.0-py314haac167e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.0-h8e36d6e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py314he1698a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h663e864_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.2-hb06a95a_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.2.30-h3d544e7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.12-had2c13b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.4-hfefdfc9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-3.1.2-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.2.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-h0eac15c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h561c983_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5cf4473_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.26.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.12-hca56bd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.6-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - conda: . build: py314h3ff45e1_0 - conda: ../cuda_pathfinder win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45-default_ha84baeb_105.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.46.1-default_ha84baeb_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/conda-gcc-specs-15.2.0-hd546029_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-13.3.3.3.1-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-13.3.33-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-13.3.3.4.1-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-13.3.73-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-13.3.29-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-dev-13.3.29-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_win-64-13.3.29-hac47afa_0.conda @@ -947,118 +1212,158 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_win-64-13.3.29-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_win-64-13.3.29-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.73-h719f0c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.73-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.73-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.73-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-profiler-api-13.3.27-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py314h344ed54_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py314h344ed54_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_h74fd8f1_908.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_hdd6294f_902.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.15.0-h765892d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.1-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h79c4613_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.4-h1f5b9c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.1.0-h5b34520_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-12.3.0-h5a1b470_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.1-h637d24d_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-h6123e3b_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h062b9a2_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.7-h1f5b9c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.88.2-h395db07_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.88.2-h74ecf4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45-default_hfd38196_105.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h6470a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.46.1-default_hfd38196_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.1-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.1-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_116.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.3-h0c9aed9_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.1-default_h4379cf1_1003.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-devel-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.12.0-h932607e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6-h6a83c73_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.53-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_116.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.3-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.328.1-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/m2w64-sysroot_win-64-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-crt-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-headers-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-he206cdd_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-winpthreads-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.0-py314h06c3c77_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h03d888a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_233.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.1.0-h57928b3_233.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-h1eab103_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.2-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.2.30-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-haa9a63f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2025.4-h49e36cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-3.1.2-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-hd094cb3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.12-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . build: py314hd7f1909_0 @@ -1070,520 +1375,682 @@ environments: pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-12.9.79-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-12.9.79-h3f2d84a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-12.9.86-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-12.9.86-h69a702a_6.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda - - 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-profiler-api-12.9.79-h7938cbb_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.3-py314h1807b08_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.73-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-dev-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-static-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.3.33-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.73-h69a702a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.73-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.73-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-13.3.27-h7938cbb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py314h1807b08_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hb3f9226_906.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h8dc83e7_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-hc5723f1_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.4-h2b0a6b4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.1.0-hfd11570_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.7-h2b0a6b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.26.2-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.14.1.1-hbc026e6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.5-h434b012_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-ha23c83e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_15.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.3-h6548e54_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.2.1-h17a8019_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-h174a0a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.9.82-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.2.0-hed573e4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.2.0-hed573e4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.2.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.2.0-hb617929_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.2.0-hd41364c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.2.0-h1862bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.2.0-h1862bb8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.2.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.2.0-h0767aad_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.2.0-hecca717_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.5.2-hd0c01bc_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.53-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h2840a7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_15.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-h9d88235_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.12-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libusb-1.0.29-h73b1eb8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-h5347b49_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpx-1.15.2-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.328.1-h5279c79_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.5-py314h2b28147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py314h2b28147_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h65dd3cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pugixml-1.15-h3f63f65_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-17.0-h9a6aba3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.1-h32b2ec7_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.28-h3b84278_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h3e344bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.12-hdeec2a5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2025.4-hb700be7_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.28-h4ee821c_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hd6090a7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - conda: . - build: py314ha6d028f_0 + build: py314hd3a1e81_0 - conda: ../cuda_pathfinder linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.1-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45-default_h5f4c503_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h83712da_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.46.1-default_h5f4c503_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-12.9.86-h579c4fd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-dev-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-static-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-12.9.79-h3ae8b8a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-12.9.86-h8f3c8d4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-12.9.86-he9431aa_106.conda - - 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/linux-aarch64/cuda-profiler-api-12.9.79-h16bee8c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.3-py314h4c416a3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-13.3.73-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-dev-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-cudart-static-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_linux-aarch64-13.3.29-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.3.33-h8f3c8d4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.73-he9431aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.73-h579c4fd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.73-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.73-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-profiler-api-13.3.27-h16bee8c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py314hc6b4731_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h936a714_906.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h635796f_903.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.15.0-h8dda3cd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-habb1d5c_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.4-h90308e0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.1.0-hd1da3a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.7-h90308e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gmp-6.3.0-h0a1ffab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-12.2.0-he4899c9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_104.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.14.1.1-had8bf56_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.5-hac26362_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-hd65408f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.4.0-hf71c8f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libflac-1.5.0-he9c94f4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_15.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.3-hf53f6bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.1-default_ha470c98_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-devel-14.2.1-h3a99ef3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.12.0-hbae46ee_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-12.9.82-h8f3c8d4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-12.9.86-h8f3c8d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.2.0-hcd21e76_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.2.0-hcd21e76_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.2.0-h3890994_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2025.2.0-h3890994_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2025.2.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2025.2.0-he07c6df_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2025.2.0-h07d5dce_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2025.2.0-h07d5dce_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2025.2.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2025.2.0-h38473e3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2025.2.0-hfae3067_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.5.2-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.53-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h2cf3c76_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.0-h8171147_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h30ec8a2_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.1-h022381a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_15.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_116.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_15.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.3-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.2-hdb009f0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libunwind-1.8.3-h6470e1d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.12-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libusb-1.0.29-h06eaf92_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.2-h1022ec0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvorbis-1.3.7-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvpx-1.15.2-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.328.1-h8b8848b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h8591a01_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h788dabe_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.3.5-py314haac167e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.0-h8e36d6e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py314he1698a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h663e864_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pugixml-1.15-h6ef32b0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pulseaudio-client-17.0-hcf98165_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.1-hb06a95a_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.2.28-h3d544e7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.12-had2c13b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.4-hfefdfc9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-3.1.2-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.2.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-aarch64-2.28-h585391f_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-h0eac15c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h561c983_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5cf4473_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.26.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.12-hca56bd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.6-h57736b2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - conda: . - build: py314he8946ed_0 + build: py314h3ff45e1_0 - conda: ../cuda_pathfinder win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45-default_ha84baeb_104.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h5782bbf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.46.1-default_ha84baeb_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/conda-gcc-specs-15.2.0-hd546029_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-13.3.3.3.1-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-13.3.33-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-dev-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_win-64-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-static-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_win-64-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_win-64-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-profiler-api-13.3.27-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.3-py314h344ed54_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-12.9.86-h57928b3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-dev-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-dev_win-64-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-cudart-static-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart-static_win-64-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cudart_win-64-12.9.79-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-12.9.86-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-12.9.86-h719f0c7_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-12.9.86-h57928b3_2.conda + - 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-profiler-api-12.9.79-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py314h344ed54_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_h74fd8f1_907.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_hdd6294f_902.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.15.0-h765892d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.1-h57928b3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h79c4613_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.4-h1f5b9c4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.1.0-h5b34520_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-12.2.0-h5f2951f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/icu-75.1-he0c23c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-h6123e3b_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h062b9a2_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.7-h1f5b9c4_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.88.2-h395db07_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.88.2-h74ecf4c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45-default_hfd38196_104.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h6470a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.46.1-default_hfd38196_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.1-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.1-hdbac1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_116.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.3-h0c9aed9_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_16.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.1-default_h4379cf1_1003.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-devel-14.2.1-h03b5201_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.12.0-h932607e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-12.9.82-hac47afa_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-12.9.86-hac47afa_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6-h6a83c73_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.53-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_16.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_116.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.3-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_19.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_119.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libusb-1.0.29-h1839187_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h5112557_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.328.1-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h06f855e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-ha29bfb0_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda - conda: https://conda.anaconda.org/conda-forge/noarch/m2w64-sysroot_win-64-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-crt-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-headers-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-he206cdd_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mingw-w64-ucrt-x86_64-winpthreads-git-12.0.0.r4.gg4f2fc60ca-hd8ed1ab_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_454.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.5-py314h06c3c77_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h03d888a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_233.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py314h02f10f6_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.1.0-h57928b3_233.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-h1eab103_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/py-cpuinfo-9.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-randomly-3.15.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-repeat-0.9.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.1-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.2.28-h5112557_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-haa9a63f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2025.4-h49e36cd_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-3.1.2-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-hd094cb3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.12-h5112557_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_32.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_32.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . - build: py314hd7f1909_0 + build: py314h5e6f764_0 - conda: ../cuda_pathfinder docs: channels: @@ -1595,148 +2062,144 @@ environments: packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-core-1.1.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.6.0-py312h90b7ffd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.4-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.2.0-py312hf79963d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.2.0-py312hf79963d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvrtc-13.3.33-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.6-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py312h68e6be4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py312h68e6be4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py312h8285ef7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/domdf-python-tools-3.10.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.3.2-py312h8285ef7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.30.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.5.3-py312h8285ef7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.15.0-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py312h33ff503_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-7.2.2-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.19.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.13-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py312h868fb18_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.6.3-py312h192e038_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py312h5253ce2_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py312h54fa4ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda @@ -1749,172 +2212,170 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.49-py312h5253ce2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py312h5253ce2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-core-1.1.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py312h3d8e7d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.6.0-py312ha46dd1d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py312hac7b6a9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.4-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-bindings-13.2.0-py312hdc0efb6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-bindings-13.2.0-py312hdc0efb6_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvrtc-13.3.33-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.33-h7b14b0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.73-h7b14b0b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.6-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.4-py312he940de5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.20-py312hf55c4e8_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py312hbda70bc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.21-py312hf55c4e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/domdf-python-tools-3.10.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.3.2-py312hf55c4e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.30.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.5.3-py312hf55c4e8_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.15.0-pyh53cf698_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-hf9559e3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hf9559e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hf9559e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.22-h80f16a2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.3-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/make-4.4.1-h2a6d0cb_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py312h4f740d2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.2.1-py312hf18b547_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py312h6615c27_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py312hce9e0af_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-7.2.2-py312hd41f8a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.19.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.13-h91f4b29_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py312h75d7d99_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-2026.6.3-py312h00f41f5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ruamel.yaml.clib-0.2.15-py312hd41f8a7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/scipy-1.17.1-py312he5b0e10_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/scipy-1.18.0-py312ha7f05e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda @@ -1927,157 +2388,156 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.49-py312h2fc9c67_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.51-py312h2fc9c67_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5cf4473_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py312hefbd42c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py312hefbd42c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hec9560f_11.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-core-1.1.5-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.15-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.18.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.6.0-py312h06d0912_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.2.0-py312hc6d9e41_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.4-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.9-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyh6dadd2b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.3-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-bindings-13.2.0-py312hc128f0a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-bindings-13.2.0-py312hc128f0a_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.73-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.6-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py312hd245ac3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py312ha1a9051_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py312hd245ac3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py312ha1a9051_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.6.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/domdf-python-tools-3.10.0-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.3.2-py312ha1a9051_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.30.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.5.3-py312ha1a9051_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-7.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.15.0-pyhe2676ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2025.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-cache-1.0.1-pyhff2d567_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-6_hf2e6a31_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-6_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-6_hf9ab0e9_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libnvjitlink-13.3.33-hac47afa_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.3-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h692994f_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-hbc0d294_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/make-4.4.1-h0e40799_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.1-hac47afa_11.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.2-py312hf90b1b7_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_233.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/myst-nb-1.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.3-py312ha3f287d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py312ha3f287d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.1.0-h57928b3_233.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.52-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-7.2.2-py312he5662c2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.19.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.13-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py312h829343e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.37.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.6.3-py312hd944d65_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py312he5662c2_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py312h9b3c559_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py312h9b3c559_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autodoc-typehints-3.0.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_1.conda @@ -2090,40 +2550,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.49-py312he5662c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py312he5662c2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tabulate-0.10.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py312he06e257_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - 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/yaml-0.2.5-h6a83c73_3.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/8c/79/017fab2f7167a9a9795665f894d04f77aafceca80821b51589bb4b23ff5c/nvidia_sphinx_theme-0.0.9.post1-py3-none-any.whl packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - md5: d7c89558ba9fa0495403155b64376d81 - license: None - size: 2562 - timestamp: 1578324546067 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 @@ -2138,19 +2593,6 @@ packages: purls: [] size: 28948 timestamp: 1770939786096 -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 - md5: 73aaf86a425cc6e73fcf236a5a46396d - depends: - - _libgcc_mutex 0.1 conda_forge - - libgomp >=7.5.0 - constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - size: 23621 - timestamp: 1650670423406 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 @@ -2164,18 +2606,6 @@ packages: purls: [] size: 28926 timestamp: 1770939656741 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 - md5: 6168d71addc746e8f2b8d57dfd2edcea - depends: - - libgomp >=7.5.0 - constrains: - - openmp_impl 9999 - license: BSD-3-Clause - license_family: BSD - size: 23712 - timestamp: 1650670790230 - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 sha256: 8a1cee28bd0ee7451ada1cd50b64720e57e17ff994fc62dd8329bef570d382e4 @@ -2191,31 +2621,17 @@ packages: purls: [] size: 52252 timestamp: 1770943776666 -- conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-2_gnu.conda - build_number: 8 - sha256: 1a62cd1f215fe0902e7004089693a78347a30ad687781dfda2289cab000e652d - md5: 37e16618af5c4851a3f3d66dd0e11141 - depends: - - libgomp >=7.5.0 - - libwinpthread >=12.0.0.r2.ggc561118da - constrains: - - openmp_impl 9999 - - msys2-conda-epoch <0.0a0 - license: BSD-3-Clause - license_family: BSD - size: 49468 - timestamp: 1718213032772 -- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 - md5: aaa2a381ccc56eac91d63b6c1240312f +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_3.conda + sha256: 2a7204314663eeda5dec482a956f0e2eaf289bd5b9953eaaaad0e81aa64638f2 + md5: 3845f3d75991bae0fb90884662f4327c depends: - cpython - python-gil license: MIT license_family: MIT purls: [] - size: 8191 - timestamp: 1744137672556 + size: 8144 + timestamp: 1784221492234 - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_1.conda sha256: 1307719f0d8ee694fc923579a39c0621c23fdaa14ccdf9278a5aac5665ac58e9 md5: 74ac5069774cdbc53910ec4d631a3999 @@ -2239,75 +2655,57 @@ packages: - pkg:pypi/alabaster?source=hash-mapping size: 18684 timestamp: 1733750512696 -- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.1-hb03c661_0.conda - sha256: 224f1a55a9ba7e877bce980f14fc3e3c0f0fb6d3cbf3c5f1a8f5dd8391ce8bba - md5: bba37fb066adb90e1d876dff0fd5d09d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: LGPL-2.1-or-later - license_family: GPL - size: 585491 - timestamp: 1766155792553 -- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda - sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 - md5: dcdc58c15961dbf17a0621312b01f5cb +- conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.16.1-hb03c661_0.conda + sha256: cf93ca0f1f107e95a35969a4622684e08fcb8cf37f8cf4a1e9e424828386c921 + md5: 8904e09bda369377b3dd07e2ac828c5d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: LGPL-2.1-or-later - license_family: GPL - size: 584660 - timestamp: 1768327524772 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.1-he30d5cf_0.conda - sha256: cb8c79ff99e2e36958e088278971cfec4aeed8e44084e968c906b7bbc3cd8de1 - md5: 50a88426e78ae8eb7d52072ba2e8db21 + license_family: LGPL + size: 592377 + timestamp: 1781521980743 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.16.1-he30d5cf_0.conda + sha256: 105e4c19cfa770affcb9a64b9d2451f406914cd09a67664009910869fa01a639 + md5: 5427b5dcb268bddf1a69c16d1cb77a47 depends: - libgcc >=14 license: LGPL-2.1-or-later - license_family: GPL - size: 615491 - timestamp: 1766156819056 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.15.3-he30d5cf_0.conda - sha256: ea2233e2db9908c2e5f29d3ca420a546b4583253f4f70abb5494cdd676866d42 - md5: 4a98cbc4ade694520227402ff8880630 + license_family: LGPL + size: 621865 + timestamp: 1781522013595 +- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda + sha256: b1d972a9b949a88babee681437535550b3ca5dbca6a23a40dffeb7900fec19fd + md5: 5a78a69eb3b50f24b379e9d2a93163ae depends: + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 - libgcc >=14 - license: LGPL-2.1-or-later - license_family: GPL - size: 615729 - timestamp: 1768327548407 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.9.1-hac33072_0.conda - sha256: b08ef033817b5f9f76ce62dfcac7694e7b6b4006420372de22494503decac855 - md5: 346722a0be40f6edc53f12640d301338 - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 license: BSD-2-Clause license_family: BSD - size: 2706396 - timestamp: 1718551242397 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.9.1-hcccb83c_0.conda - sha256: ac438ce5d3d3673a9188b535fc7cda413b479f0d52536aeeac1bd82faa656ea0 - md5: cc744ac4efe5bcaa8cca51ff5b850df0 + size: 3103347 + timestamp: 1780752473089 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/aom-3.14.1-pl5321h8fffa31_1.conda + sha256: a228f46f68fa3e2e50a09b5a4cefd1ee2c1ce868bfa2a288867b3d44b6e77427 + md5: a3c86229b531656c2bce99e8a6c6de4a depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 + - libstdcxx >=14 + - libgcc >=14 license: BSD-2-Clause license_family: BSD - size: 3250813 - timestamp: 1718551360260 -- conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.9.1-he0c23c2_0.conda - sha256: 0524d0c0b61dacd0c22ac7a8067f977b1d52380210933b04141f5099c5b6fec7 - md5: 3d7c14285d3eb3239a76ff79063f27a5 + size: 4091040 + timestamp: 1780752489693 +- conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda + sha256: 3033fa8953f7f0c1bb5b89b5af77253badc14a89ba94d743dde3c9159e10fd5e + md5: 7a8ace8100a48355a34d87386012c57b depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: BSD-2-Clause license_family: BSD - size: 1958151 - timestamp: 1718551737234 + size: 2214571 + timestamp: 1780752497150 - conda: https://conda.anaconda.org/conda-forge/noarch/apeye-1.4.1-pyhd8ed1ab_1.conda sha256: b554d2d2fc869a5955ebb3e5c8aea5e13ec49363b782b08e1802e29c91beaebf md5: 0f2a7ba1dfc3b6117cfd864d25fa86ce @@ -2346,9 +2744,9 @@ packages: purls: [] size: 7126 timestamp: 1742928603302 -- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.1-pyhd8ed1ab_0.conda - sha256: ee4da0f3fe9d59439798ee399ef3e482791e48784873d546e706d0935f9ff010 - md5: 9673a61a297b00016442e022d689faa6 +- conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-3.0.2-pyhd8ed1ab_0.conda + sha256: fbbd8ce60cbd5c16f3fe559eb644551f94285caff30985ea961ff851c1cf25ac + md5: 89d495168582cb00428dad699d149624 depends: - python >=3.10 constrains: @@ -2356,28 +2754,9 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/asttokens?source=hash-mapping - size: 28797 - timestamp: 1763410017955 -- conda: https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda - sha256: a9c114cbfeda42a226e2db1809a538929d2f118ef855372293bd188f71711c48 - md5: 791365c5f65975051e4e017b5da3abf5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: GPL-2.0-or-later - license_family: GPL - size: 68072 - timestamp: 1756738968573 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/attr-2.5.1-h4e544f5_1.tar.bz2 - sha256: 2c793b48e835a8fac93f1664c706442972a0206963bf8ca202e83f7f4d29a7d7 - md5: 1ef6c06fec1b6f5ee99ffe2152e53568 - depends: - - libgcc-ng >=12 - license: GPL-2.0-or-later - license_family: GPL - size: 74992 - timestamp: 1660065534958 + - pkg:pypi/asttokens?source=compressed-mapping + size: 34639 + timestamp: 1783975742052 - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-26.1.0-pyhcf101f3_0.conda sha256: 1b6124230bb4e571b1b9401537ecff575b7b109cc3a21ee019f65e083b8399ab md5: c6b0543676ecb1fb2d7643941fe375f2 @@ -2413,12 +2792,12 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/babel?source=compressed-mapping + - pkg:pypi/babel?source=hash-mapping size: 7684321 timestamp: 1772555330347 -- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py312h90b7ffd_0.conda - sha256: d77a24be15e283d83214121428290dbe55632a6e458378205b39c550afa008cf - md5: 5b8c55fed2e576dde4b0b33693a4fdb1 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.6.0-py312h90b7ffd_0.conda + sha256: 95b3d6d44c17c4061db703289f39915646e455f75f0c8c9d949bf081d2e61579 + md5: 55811da425538da800b89c0c588652fa depends: - python - libgcc >=14 @@ -2427,26 +2806,25 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause AND MIT AND EPL-2.0 purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 237970 - timestamp: 1767045004512 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py312h3d8e7d4_0.conda - sha256: 15ca235863f67ebbfa5a3c1cf1eb3f448ad4bafa9e9d1660996d90b406c2f5ca - md5: 342f2741b222094a78db95893ecc42f9 + - pkg:pypi/backports-zstd?source=compressed-mapping + size: 239892 + timestamp: 1781450817988 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.6.0-py312ha46dd1d_0.conda + sha256: dfe925314fd594cd6cefa78d79df8bc6898a3848460db346b87597f77df8442c + md5: 19c1ea1ad92760d8e465a371a40ca125 depends: - python - libgcc >=14 - - python 3.12.* *_cpython - - zstd >=1.5.7,<1.6.0a0 - python_abi 3.12.* *_cp312 + - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause AND MIT AND EPL-2.0 purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 243175 - timestamp: 1767044998908 -- conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.3.0-py312h06d0912_0.conda - sha256: c9c97cd644faa6c4fb38017c5ecfd082f56a3126af5925d246364fa4a22b2a74 - md5: 2db2b356f08f19ce4309a79a9ee6b9d8 + - pkg:pypi/backports-zstd?source=compressed-mapping + size: 241556 + timestamp: 1781450814407 +- conda: https://conda.anaconda.org/conda-forge/win-64/backports.zstd-1.6.0-py312h06d0912_0.conda + sha256: 9926f274d8b642f5421e4536952cb158912517f40acf1df3a8fbd891c5f600ed + md5: 0d8bcdc0af72309fb998811f5f4db2c5 depends: - python - vc >=14.3,<15 @@ -2456,12 +2834,12 @@ packages: - zstd >=1.5.7,<1.6.0a0 license: BSD-3-Clause AND MIT AND EPL-2.0 purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 236635 - timestamp: 1767045021157 -- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.14.3-pyha770c72_0.conda - sha256: bf1e71c3c0a5b024e44ff928225a0874fc3c3356ec1a0b6fe719108e6d1288f6 - md5: 5267bef8efea4127aacd1f4e1f149b6e + - pkg:pypi/backports-zstd?source=compressed-mapping + size: 238542 + timestamp: 1781450836106 +- conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.15.0-pyha770c72_0.conda + sha256: aed4b9dcf68ec2a75e5645fed14d77fd884d38d2e52bfa6ef4b278d90cd88781 + md5: 3b261da3fe9b4168738712832410b022 depends: - python >=3.10 - soupsieve >=1.2 @@ -2469,108 +2847,117 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/beautifulsoup4?source=hash-mapping - size: 90399 - timestamp: 1764520638652 -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_104.conda - sha256: 054a77ccab631071a803737ea8e5d04b5b18e57db5b0826a04495bd3fdf39a7c - md5: a7a67bf132a4a2dea92a7cb498cdc5b1 + - pkg:pypi/beautifulsoup4?source=compressed-mapping + size: 92704 + timestamp: 1780853175566 +- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.46.1-default_hfdba357_102.conda + sha256: fb7bf36984a37ce7e4714d1d1da0bd0e3bfc679520f5cdc184afc676fd4b5da2 + md5: a0c5e0b7f58c8ceeb08e5bc41251d5a2 depends: - - ld_impl_linux-64 2.45 default_hbd61a6d_104 + - ld_impl_linux-64 2.46.1 default_hbd61a6d_102 - sysroot_linux-64 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only license_family: GPL - size: 3747046 - timestamp: 1764007847963 -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45-default_hfdba357_105.conda - sha256: 17fbb32191430310d3eb8309f80a8df54f0d66eda9cf84b2ae5113e6d74e24d8 - md5: e410a8f80e22eb6d840e39ac6a34bd0e + size: 3713752 + timestamp: 1784214522814 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.46.1-default_h5f4c503_102.conda + sha256: eebe159bf600943552e4319ff4ce27b6a2dadf0dcc5443e76dcee9259a408e11 + md5: 58f37d76b8234c69dbf2939d511bea0b depends: - - ld_impl_linux-64 2.45 default_hbd61a6d_105 - - sysroot_linux-64 + - ld_impl_linux-aarch64 2.46.1 default_h1979696_102 + - sysroot_linux-aarch64 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only license_family: GPL - size: 3719982 - timestamp: 1766513109980 -- conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_101.conda - sha256: 74341b26a2b9475dc14ba3cf12432fcd10a23af285101883e720216d81d44676 - md5: 83aa53cb3f5fc849851a84d777a60551 + size: 4677171 + timestamp: 1784214549910 +- conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.46.1-default_ha84baeb_102.conda + sha256: 83476bc3ed6ee4f1d6e67e6e1360696a0ac3e99679f9c142674003cf721740e3 + md5: 7832bada38267be3333319febcf5e4fc depends: - - ld_impl_linux-64 2.45.1 default_hbd61a6d_101 - - sysroot_linux-64 + - ld_impl_win-64 2.46.1 default_hfd38196_102 + - m2w64-sysroot_win-64 >=12.0.0.r0 - zstd >=1.5.7,<1.6.0a0 license: GPL-3.0-only license_family: GPL - size: 3744895 - timestamp: 1770267152681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45-default_h5f4c503_104.conda - sha256: b7694c53943941a5234406b77b168e28d92227f8e69c697edda3faf436dd26c1 - md5: 8107322440b07ab4234815368d1785a9 + size: 6140284 + timestamp: 1784214565466 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda + sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 + md5: 8ccf913aaba749a5496c17629d859ed1 depends: - - ld_impl_linux-aarch64 2.45 default_h1979696_104 - - sysroot_linux-aarch64 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 4850743 - timestamp: 1764007931341 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45-default_h5f4c503_105.conda - sha256: 7398706fe428530777a7b1e69925c94e46cd45182c52f8a84f34cd601c8d2584 - md5: 3cee44d70779b513523a9a46146da3f9 + - __glibc >=2.17,<3.0.a0 + - brotli-bin 1.2.0 hb03c661_1 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + size: 20103 + timestamp: 1764017231353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda + sha256: 1fdee53dea5baa0b4d7ccd3bc0269e81017032c7cfe8843b6a0622eddf05714b + md5: 5c933384d588a06cd8dac78ca2864aab depends: - - ld_impl_linux-aarch64 2.45 default_h1979696_105 - - sysroot_linux-aarch64 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 4848132 - timestamp: 1766513201703 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_101.conda - sha256: e90ab42a5225dc1eaa6e4e7201cd7b8ed52dad6ec46814be7e5a4039433ae85c - md5: df6e1dc38cbe5642350fa09d4a1d546b + - brotli-bin 1.2.0 he30d5cf_1 + - libbrotlidec 1.2.0 he30d5cf_1 + - libbrotlienc 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + size: 20145 + timestamp: 1764017310011 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda + sha256: a4fffdf1c9b9d3d0d787e20c724cff3a284dfa3773f9ce609c93b1cfd0ce8933 + md5: bc58fdbced45bb096364de0fba1637af depends: - - ld_impl_linux-aarch64 2.45.1 default_h1979696_101 - - sysroot_linux-aarch64 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 4741684 - timestamp: 1770267224406 -- conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45-default_ha84baeb_104.conda - sha256: 78922b9eca51e828b4626b35e6893861728f284cc8253e0922469971a63e6295 - md5: ea7736f58de65900a5420f4485d73eaf + - brotli-bin 1.2.0 hfd05255_1 + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 20342 + timestamp: 1764017988883 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda + sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 + md5: af39b9a8711d4a8d437b52c1d78eb6a1 depends: - - ld_impl_win-64 2.45 default_hfd38196_104 - - m2w64-sysroot_win-64 >=12.0.0.r0 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 5997864 - timestamp: 1764007778611 -- conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45-default_ha84baeb_105.conda - sha256: 0caf8210512b7ae6db752264897384cfb8c87ab8584b14ec07df3c0bff0bba51 - md5: fe34d00e7c9e92559ec8b5a927d06e57 + - __glibc >=2.17,<3.0.a0 + - libbrotlidec 1.2.0 hb03c661_1 + - libbrotlienc 1.2.0 hb03c661_1 + - libgcc >=14 + license: MIT + license_family: MIT + size: 21021 + timestamp: 1764017221344 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda + sha256: cffd260d3b1527ff8c1d29f00e10f4e1d4bccbe4d5e605c23af68453cf78d32b + md5: b31f6f3a888c3f8f4c5a9dafc2575187 depends: - - ld_impl_win-64 2.45 default_hfd38196_105 - - m2w64-sysroot_win-64 >=12.0.0.r0 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 6096221 - timestamp: 1766513640880 -- conda: https://conda.anaconda.org/conda-forge/win-64/binutils_impl_win-64-2.45.1-default_ha84baeb_101.conda - sha256: 31211bd89e77203f731f31871ff13b5828fbd99f02ae2fc56ae15fcd568c4466 - md5: 84d2e3fd656b05705b7cfe7a92a8c840 + - libbrotlidec 1.2.0 he30d5cf_1 + - libbrotlienc 1.2.0 he30d5cf_1 + - libgcc >=14 + license: MIT + license_family: MIT + size: 20758 + timestamp: 1764017301339 +- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda + sha256: e76966232ef9612de33c2087e3c92c2dc42ea5f300050735a3c646f33bce0429 + md5: 6abd7089eb3f0c790235fe469558d190 depends: - - ld_impl_win-64 2.45.1 default_hfd38196_101 - - m2w64-sysroot_win-64 >=12.0.0.r0 - - zstd >=1.5.7,<1.6.0a0 - license: GPL-3.0-only - license_family: GPL - size: 5830940 - timestamp: 1770267725685 + - libbrotlidec 1.2.0 hfd05255_1 + - libbrotlienc 1.2.0 hfd05255_1 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 22714 + timestamp: 1764017952449 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312hdb49522_1.conda sha256: 49df13a1bb5e388ca0e4e87022260f9501ed4192656d23dc9d9a1b4bf3787918 md5: 64088dffd7413a2dd557ce837b4cbbdb @@ -2585,7 +2972,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/brotli?source=compressed-mapping + - pkg:pypi/brotli?source=hash-mapping size: 368300 timestamp: 1764017300621 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py312hac7b6a9_1.conda @@ -2622,16 +3009,6 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 335482 timestamp: 1764018063640 -- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 - md5: 51a19bba1b8ebfb60df25cde030b7ebc - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - size: 260341 - timestamp: 1757437258798 - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -2643,15 +3020,6 @@ packages: purls: [] size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - sha256: d2a296aa0b5f38ed9c264def6cf775c0ccb0f110ae156fcde322f3eccebf2e01 - md5: 2921ac0b541bf37c69e66bd6d9a43bca - depends: - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - size: 192536 - timestamp: 1757437302703 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c md5: 840d8fc0d7b3209be93080bc20e07f2d @@ -2662,17 +3030,6 @@ packages: purls: [] size: 192412 timestamp: 1771350241232 -- conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda - sha256: d882712855624641f48aa9dc3f5feea2ed6b4e6004585d3616386a18186fe692 - md5: 1077e9333c41ff0be8edd1a5ec0ddace - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: bzip2-1.0.6 - license_family: BSD - size: 55977 - timestamp: 1757437738856 - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda sha256: 76dfb71df5e8d1c4eded2dbb5ba15bb8fb2e2b0fe42d94145d5eed4c75c35902 md5: 4cb8e6b48f67de0b018719cdf1136306 @@ -2685,94 +3042,37 @@ packages: purls: [] size: 56115 timestamp: 1771350256444 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-h4c7d964_0.conda - sha256: 686a13bd2d4024fc99a22c1e0e68a7356af3ed3304a8d3ff6bb56249ad4e82f0 - md5: f98fb7db808b94bc1ec5b0e62f9f1069 - depends: - - __win - license: ISC - size: 152827 - timestamp: 1762967310929 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.11.12-hbd8a1cb_0.conda - sha256: b986ba796d42c9d3265602bc038f6f5264095702dd546c14bc684e60c385e773 - md5: f0991f0f84902f6b6009b4d2350a83aa - depends: - - __unix - license: ISC - size: 152432 - timestamp: 1762967197890 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-h4c7d964_0.conda - sha256: 4ddcb01be03f85d3db9d881407fb13a673372f1b9fac9c836ea441893390e049 - md5: 84d389c9eee640dda3d26fc5335c67d8 - depends: - - __win - license: ISC - size: 147139 - timestamp: 1767500904211 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 - md5: bddacf101bb4dd0e51811cb69c7790e2 - depends: - - __unix - license: ISC - size: 146519 - timestamp: 1767500828366 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-h4c7d964_0.conda - sha256: 37950019c59b99585cee5d30dbc2cc9696ed4e11f5742606a4db1621ed8f94d6 - md5: f001e6e220355b7f87403a4d0e5bf1ca +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda + sha256: 7f458e4a82514d7bebbfef23d92817794a16aaf1c748a15f04870d4fb49aeab2 + md5: b9696b2cf00dfeec138c70cee38ed192 depends: - __win license: ISC purls: [] - size: 147734 - timestamp: 1772006322223 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc - md5: 4492fd26db29495f0ba23f146cd5638d + size: 129352 + timestamp: 1781709016515 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda + sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf + md5: a9965dd99f683c5f444428f896635716 depends: - __unix license: ISC purls: [] - size: 147413 - timestamp: 1772006283803 -- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - sha256: ec791bb6f1ef504411f87b28946a7ae63ed1f3681cefc462cf1dfdaf0790b6a9 - md5: 241ef6e3db47a143ac34c21bfba510f1 + size: 128866 + timestamp: 1781708962055 +- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.4-pyha770c72_0.conda + sha256: cca3a26282a5bc37a10afb1aa2006a21c45033cbc4ff012f9501f56f2a115c12 + md5: 13bdbb9b693b29134c56a9a00c23de41 depends: - msgpack-python >=0.5.2,<2.0.0 - - python >=3.9 + - python >=3.10 - requests >=2.16.0 license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/cachecontrol?source=hash-mapping - size: 23868 - timestamp: 1746103006628 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda - sha256: 3bd6a391ad60e471de76c0e9db34986c4b5058587fbf2efa5a7f54645e28c2c7 - md5: 09262e66b19567aff4f592fb53b28760 - depends: - - __glibc >=2.17,<3.0.a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - freetype >=2.12.1,<3.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.6.4,<3.0a0 - - libgcc >=13 - - libglib >=2.82.2,<3.0a0 - - libpng >=1.6.47,<1.7.0a0 - - libstdcxx >=13 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pixman >=0.44.2,<1.0a0 - - xorg-libice >=1.1.2,<2.0a0 - - xorg-libsm >=1.2.5,<2.0a0 - - xorg-libx11 >=1.8.11,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxrender >=0.9.12,<0.10.0a0 - license: LGPL-2.1-only or MPL-1.1 - size: 978114 - timestamp: 1741554591855 + - pkg:pypi/cachecontrol?source=compressed-mapping + size: 24906 + timestamp: 1782470439060 - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda sha256: 06525fa0c4e4f56e771a3b986d0fdf0f0fc5a3270830ee47e127a5105bde1b9a md5: bb6c4808bfa69d6f7f6b07e5846ced37 @@ -2824,30 +3124,6 @@ packages: license: LGPL-2.1-only or MPL-1.1 size: 927045 timestamp: 1766416003626 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h83712da_0.conda - sha256: 37cfff940d2d02259afdab75eb2dbac42cf830adadee78d3733d160a1de2cc66 - md5: cd55953a67ec727db5dc32b167201aa6 - depends: - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - freetype >=2.12.1,<3.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.6.4,<3.0a0 - - libgcc >=13 - - libglib >=2.82.2,<3.0a0 - - libpng >=1.6.47,<1.7.0a0 - - libstdcxx >=13 - - libxcb >=1.17.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pixman >=0.44.2,<1.0a0 - - xorg-libice >=1.1.2,<2.0a0 - - xorg-libsm >=1.2.5,<2.0a0 - - xorg-libx11 >=1.8.11,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxrender >=0.9.12,<0.10.0a0 - license: LGPL-2.1-only or MPL-1.1 - size: 966667 - timestamp: 1741554768968 - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda sha256: 9ee4ad706c5d3e1c6c469785d60e3c2b263eec569be0eac7be33fbaef978bccc md5: 52ea1beba35b69852d210242dd20f97d @@ -2868,73 +3144,54 @@ packages: license: LGPL-2.1-only or MPL-1.1 size: 1537783 timestamp: 1766416059188 -- conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h5782bbf_0.conda - sha256: b9f577bddb033dba4533e851853924bfe7b7c1623d0697df382eef177308a917 - md5: 20e32ced54300292aff690a69c5e7b97 - depends: - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - freetype >=2.12.1,<3.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.6.4,<3.0a0 - - libglib >=2.82.2,<3.0a0 - - libpng >=1.6.47,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - - pixman >=0.44.2,<1.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: LGPL-2.1-only or MPL-1.1 - size: 1524254 - timestamp: 1741555212198 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 - md5: 765c4d97e877cdbbb88ff33152b86125 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.6.17-pyhd8ed1ab_0.conda + sha256: 6c13620e458ba43278379d0cdacc30c497336bddfda81681fd50d114a65c702f + md5: c13824fedced67005d3832c152fe9c2f depends: - python >=3.10 license: ISC purls: - pkg:pypi/certifi?source=compressed-mapping - size: 151445 - timestamp: 1772001170301 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.7-pyhd8ed1ab_0.conda - sha256: 3f9483d62ce24ecd063f8a5a714448445dc8d9e201147c46699fc0033e824457 - md5: a9167b9571f3baa9d448faa2139d1089 + size: 133877 + timestamp: 1781719949728 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.9-pyhd8ed1ab_0.conda + sha256: 8d8813ef655b4e75e4fb897abd83ad548882efad7b4e836b021b797f42780799 + md5: d154b40b109e503430979e8a8d099eaf depends: - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/charset-normalizer?source=compressed-mapping - size: 58872 - timestamp: 1775127203018 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 - md5: ea8a6c3256897cc31263de9f455e25d9 + size: 61418 + timestamp: 1783505332569 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyh6dadd2b_0.conda + sha256: 5b5c96afdd801dd9c3b78ebc2cd9a9f3ce34186257415d394dde1aa8468aa3c0 + md5: 8a0d65027e25e367f9f1754f0604e8de depends: + - __win + - colorama - python >=3.10 - - __unix - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/click?source=hash-mapping - size: 97676 - timestamp: 1764518652276 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda - sha256: c3bc9a49930fa1c3383a1485948b914823290efac859a2587ca57a270a652e08 - md5: 6cd3ccc98bacfcc92b2bd7f236f01a7e + - pkg:pypi/click?source=compressed-mapping + size: 106227 + timestamp: 1783085395110 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.4.2-pyhc90fa1f_0.conda + sha256: ccc4787f511964f9a1f2d2d2859c91c5d571fb60f7f09d4c4e092c9b7a94e671 + md5: 2c4bd6aeb90bb157456841c3270a0d92 depends: - - python >=3.10 - - colorama - - __win + - __unix - python + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/click?source=hash-mapping - size: 96620 - timestamp: 1764518654675 + - pkg:pypi/click?source=compressed-mapping + size: 107155 + timestamp: 1783085363526 - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 md5: 962b9857ee8e7018c22f2776ffa0b2d7 @@ -2958,33 +3215,57 @@ packages: - pkg:pypi/comm?source=hash-mapping size: 14690 timestamp: 1753453984907 -- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_16.conda - sha256: 0e3a6497ccfad65246f9ca8225f290b10ee3be7712e6f7585f1585f72074ecff - md5: 7d1e5e99f086b25a8aeace8f35962fe7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda + sha256: 1a53d0bd9d8197a7dc57f9b154e24d908ade29934e0a450ee6e40294d0a237f9 + md5: 3b482cadfc77f094c8b3016166292dfb depends: - gcc_impl_linux-64 >=15.2.0,<15.2.1.0a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 31290 - timestamp: 1765257044086 -- conda: https://conda.anaconda.org/conda-forge/win-64/conda-gcc-specs-15.2.0-hd546029_16.conda - sha256: d4a75332dbe12c326dfb68e71fd44d489c0141a166bc2d7bab85d062eb79babe - md5: b8c66fe4f0dcd3ec9d5a9a739df3e365 + size: 31857 + timestamp: 1778269225076 +- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda + sha256: b0314a7f1fb4a294b1a8bcf5481d4a8d9412a9fee23b7e3f93fb10e4d504f2cc + md5: 95bede9cdb7a30a4b611223d52a01aa4 depends: - - gcc_impl_win-64 >=15.2.0,<15.2.1.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 54364 - timestamp: 1765260662854 -- conda: https://conda.anaconda.org/conda-forge/win-64/conda-gcc-specs-15.2.0-hd546029_18.conda - sha256: 21062850a891e5a82b7a473de0a2fa4bfafff6fcba9455a619604343018c9f99 - md5: 071dbd17ed598f723c5f48624ae455f9 + - numpy >=1.25 + - python + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 324013 + timestamp: 1769155968691 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda + sha256: ce3575300f89e6d384cb28f44d11a52862087b3fbd82127300f3ec8b292a553d + md5: 015503b3e0c818f2e773665aacada937 depends: - - gcc_impl_win-64 >=15.2.0,<15.2.1.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 54725 - timestamp: 1771382417485 + - numpy >=1.25 + - python + - libstdcxx >=14 + - libgcc >=14 + - python 3.14.* *_cp314 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 342661 + timestamp: 1769155977005 +- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda + sha256: f141bcbf8e490b49b2f53f517173d13a64d75e43cfae170e0d931cb0b66f4bce + md5: c26934035616f7d578f9da0491aed3d8 + depends: + - numpy >=1.25 + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 247437 + timestamp: 1769155978556 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.13-py312hd8ed1ab_0.conda noarch: generic sha256: d3e9bbd7340199527f28bbacf947702368f31de60c433a16446767d3c6aaf6fe @@ -2996,21 +3277,9 @@ packages: purls: [] size: 46463 timestamp: 1772728929620 -- conda: https://conda.anaconda.org/conda-forge/noarch/cssutils-2.11.1-pyhd8ed1ab_0.conda - sha256: b9006cbd28ed63a6461717cb9234e1d1f39441d9db0493f55ee0ca72f3577833 - md5: 99cf98eea444365238fb6ee8f518ef19 - depends: - - more-itertools - - python >=3.9 - license: LGPL-3.0-only - license_family: LGPL - purls: - - pkg:pypi/cssutils?source=hash-mapping - size: 284664 - timestamp: 1747322864144 - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314h3ff45e1_0 subdir: linux-aarch64 variants: @@ -3027,7 +3296,7 @@ packages: - cuda-nvvm - libnvfatbin - libcufile - - libcufile >=1.18.0.66,<2.0a0 + - libcufile >=1.18.1.6,<2.0a0 - libgcc >=15 - libgcc >=15 - libstdcxx >=15 @@ -3038,7 +3307,7 @@ packages: path: ../cuda_pathfinder - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314h5e6f764_0 subdir: win-64 variants: @@ -3066,7 +3335,7 @@ packages: path: ../cuda_pathfinder - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314ha6d028f_0 subdir: linux-64 variants: @@ -3094,7 +3363,7 @@ packages: path: ../cuda_pathfinder - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314hd3a1e81_0 subdir: linux-64 variants: @@ -3111,7 +3380,7 @@ packages: - cuda-nvvm - libnvfatbin - libcufile - - libcufile >=1.18.0.66,<2.0a0 + - libcufile >=1.18.1.6,<2.0a0 - libgcc >=15 - libgcc >=15 - libstdcxx >=15 @@ -3122,7 +3391,7 @@ packages: path: ../cuda_pathfinder - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314hd7f1909_0 subdir: win-64 variants: @@ -3150,7 +3419,7 @@ packages: path: ../cuda_pathfinder - conda: . name: cuda-bindings - version: 13.2.0 + version: 13.3.1 build: py314he8946ed_0 subdir: linux-aarch64 variants: @@ -3176,9 +3445,9 @@ packages: sources: cuda-pathfinder: path: ../cuda_pathfinder -- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.2.0-py312hf79963d_0.conda - sha256: 3234a03d1c491edb7d24ce995dd271dab038bc58eee5dffbaab8253a8042ac4a - md5: cf07366d06fc39a555feb7e288de2dfe +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.2.0-py312hf79963d_1.conda + sha256: 749c0e2e664f76833a24a7a4d970a643888ca582fba1c46ca1b7c01b245dc99d + md5: 13d8b143b3513c95a1d3aec4e65a9529 depends: - __glibc >=2.17,<3.0.a0 - cuda-nvrtc >=13,<14.0a0 @@ -3187,6 +3456,7 @@ packages: - cuda-version >=13,<14.0a0 - libcufile >=1,<2.0a0 - libgcc >=14 + - libnvfatbin - libnvjitlink >=13.0,<14.0a0 - libstdcxx >=14 - python >=3.12,<3.13.0a0 @@ -3197,11 +3467,11 @@ packages: license: LicenseRef-NVIDIA-SOFTWARE-LICENSE purls: - pkg:pypi/cuda-bindings?source=hash-mapping - size: 4018993 - timestamp: 1773284505127 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-bindings-13.2.0-py312hdc0efb6_0.conda - sha256: 609e783783f4bb44643115665923ce225619ec5f5534099ce19a312119714fc4 - md5: 89d9c83a2a367fc5dad80bb134302d9c + size: 4143685 + timestamp: 1779249651391 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-bindings-13.2.0-py312hdc0efb6_1.conda + sha256: b8784c43ccd7c61c3944b48e7751e454e8c4b9ae50cabf42696e432b2e5b6b3b + md5: c7560ec15413c9b14e46d26c2ce94fb3 depends: - cuda-nvrtc >=13,<14.0a0 - cuda-nvvm-impl >=13,<14.0a0 @@ -3209,27 +3479,29 @@ packages: - cuda-version >=13,<14.0a0 - libcufile >=1,<2.0a0 - libgcc >=14 + - libnvfatbin - libnvjitlink >=13.0,<14.0a0 - libstdcxx >=14 - python >=3.12,<3.13.0a0 - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 constrains: - - cuda-cudart >=13,<14.0a0 - cuda-python >=13.2.0,<13.3.0a0 + - cuda-cudart >=13,<14.0a0 license: LicenseRef-NVIDIA-SOFTWARE-LICENSE purls: - pkg:pypi/cuda-bindings?source=hash-mapping - size: 3714646 - timestamp: 1773284747607 -- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-bindings-13.2.0-py312hc128f0a_0.conda - sha256: 04a8aafd54d5a42f8587706f1458e5a7491775292e3361a66ddd7fd5c517d407 - md5: 38204c165a2af6c58dfa1f59eb5e1f64 + size: 3866781 + timestamp: 1779249873318 +- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-bindings-13.2.0-py312hc128f0a_1.conda + sha256: 31113f2c14b5e549aa59863f711890e9bf442defd7af3bd6ff192ec96e5dcdf1 + md5: a17fac259dd34ef9ee1f508933614967 depends: - cuda-nvrtc >=13,<14.0a0 - cuda-nvvm-impl >=13,<14.0a0 - cuda-pathfinder >=1.1.0,<2 - cuda-version >=13,<14.0a0 + - libnvfatbin - libnvjitlink >=13.0,<14.0a0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -3237,13 +3509,13 @@ packages: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - cuda-cudart >=13,<14.0a0 - cuda-python >=13.2.0,<13.3.0a0 + - cuda-cudart >=13,<14.0a0 license: LicenseRef-NVIDIA-SOFTWARE-LICENSE purls: - pkg:pypi/cuda-bindings?source=hash-mapping - size: 3575293 - timestamp: 1773284355109 + size: 3509245 + timestamp: 1779249639234 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-12.9.27-ha770c72_0.conda sha256: 2ee3b9564ca326226e5cda41d11b251482df8e7c757e333d28ec75213c75d126 md5: 87ff6381e33b76e5b9b179a2cdd005ec @@ -3252,14 +3524,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 1150650 timestamp: 1746189825236 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.3.1-ha770c72_0.conda - sha256: 66d95390d49b989f550ede42dfb3f6e82b6b729493f0843e13cd041a91682730 - md5: 56501e8a53d75afef7a2e3ca723d7569 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda + sha256: 51106d05567031d9b10a26bcaea95022c9ae91ce44758df5dec86d46985bef61 + md5: c7aab5efb8e8151a038f9eb271f23dcf depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 1472271 - timestamp: 1779895496841 + size: 1475805 + timestamp: 1782773759292 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda sha256: b4efaee8fa95b9ec97a462dc343914a138ece704895e33caa52ac55968f7adfa md5: 71e4d87a72bf003bd05f05a502288b2a @@ -3269,15 +3541,15 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 1149299 timestamp: 1746189919921 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.3.1-h579c4fd_0.conda - sha256: f35385d6e5aca20274ae3d97f7859dae903b61ed5353ed68595d234beb774dfe - md5: e4cee0d90174186e1bdc9e01d6c66b90 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda + sha256: 2f9d85d0297b0c461518e5665351d73ffc5f7c9e2aa8b6e3e1cd9498bdd31cd0 + md5: 29bc81fe5927466cd27f2e1151e8502a depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 1481900 - timestamp: 1779895522474 + size: 1480995 + timestamp: 1782773779842 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-12.9.27-h57928b3_0.conda sha256: 681eb1d9afd596e04329a82b04734c0e37c6ecb94b3380f3a378d61983e2a8cc md5: 8f897dca7111f3bb4ded97ba6947b186 @@ -3286,14 +3558,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 1139649 timestamp: 1746189858434 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-13.3.3.3.1-h57928b3_0.conda - sha256: d730af2f1553511eab97a43522cae5c71ed618c65821084571a2d0655a426f4b - md5: 48f0b2f8be52ff044598069b4753f5bc +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_win-64-13.3.3.4.1-h57928b3_0.conda + sha256: cc1524d3d25991ba509aa36b43c9b30ac1cde43820a4b318dbdd729e0ff029fe + md5: 64ff59f43bc9a8838324c8527d4d509d depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 1462453 - timestamp: 1779895589763 + size: 1467923 + timestamp: 1782773832153 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-12.9.86-ha770c72_2.conda sha256: e6257534c4b4b6b8a1192f84191c34906ab9968c92680fa09f639e7846a87304 md5: 79d280de61e18010df5997daea4743df @@ -3302,14 +3574,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 94239 timestamp: 1753975242354 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.33-ha770c72_0.conda - sha256: bd3381629964d1d00245ae9e4a7918c35e4967d216a34aad013f0ce387065b05 - md5: 0c95fd4e823baffe0f8885f4eef00ce7 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.73-ha770c72_0.conda + sha256: 94894c81f0257fc8a7daee9e18f885ce5e26adf1494e05b57ffb0660d59096cd + md5: 05b21494055e653903a447c506e091c8 depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 116655 - timestamp: 1779905079263 + size: 116550 + timestamp: 1782782846502 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-12.9.86-h579c4fd_2.conda sha256: 1db1f3ff4b0f445ce4064eb323733f7612ce28bc879dd6849e162b1504b7474a md5: 86be43a4154301b74f823bc6fe476629 @@ -3319,15 +3591,15 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 94794 timestamp: 1753975199249 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-13.3.33-h579c4fd_0.conda - sha256: 129008eb8a49e1c0edbb4ba33855f46aab879b975fc427c5990c945fd371d89e - md5: b865ed5c0162925511f48e5a425e42bb +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-13.3.73-h579c4fd_0.conda + sha256: f7c7c73110c0d762030165b634eafbd921200d982ee3c34d42021838bee544dc + md5: 802c7fb645cef271966164736a763523 depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 116665 - timestamp: 1779905122757 + size: 116641 + timestamp: 1782782854071 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-12.9.86-h57928b3_2.conda sha256: 2fccde18cafec3cdb6697f37c576567ac623dc69531e2a81bbc83d8a86a82d1f md5: 569c55bd368307e48191a2ed54c64428 @@ -3336,14 +3608,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 95452 timestamp: 1753975640812 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-13.3.33-h57928b3_0.conda - sha256: ed73e5072b9f4e603bb43f30988dde675174c38e45ce8120a39e6125283b3563 - md5: 7207fca55f102141c1e038577a153c1e +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_win-64-13.3.73-h57928b3_0.conda + sha256: b1e55dca7962c05b3ed28025c4e650bcf11b6e775c374fe98f8bc58699b02baf + md5: 653dd441bddb625b0f12adfdf846cc14 depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 117452 - timestamp: 1779905164275 + size: 116958 + timestamp: 1782782896721 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda sha256: 57d1294ecfaf9dc8cdb5fc4be3e63ebc7614538bddb5de53cfd9b1b7de43aed5 md5: cb15315d19b58bd9cd424084e58ad081 @@ -3819,16 +4091,16 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 25475 timestamp: 1771619493286 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.33-h69a702a_0.conda - sha256: 5a379ec765df86fa34c253033fff9e916b3b8a01fc6a8ab2ec451e2ac7b57a2c - md5: 6dc6ffa1da0abc6d1fa4f5385aa93040 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-13.3.73-h69a702a_0.conda + sha256: d57adacdd922ee66e1b8c15aa07a7555819a24a6286f7e748d12018dad51141e + md5: 4e0f9af8d9a275dbd97763eeb50f4d7b depends: - - cuda-nvvm-dev_linux-64 13.3.33.* - - cuda-nvvm-impl 13.3.33.* - - cuda-nvvm-tools 13.3.33.* + - cuda-nvvm-dev_linux-64 13.3.73.* + - cuda-nvvm-impl 13.3.73.* + - cuda-nvvm-tools 13.3.73.* license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 25697 - timestamp: 1779909800589 + size: 24732 + timestamp: 1782788494281 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-12.9.86-he9431aa_106.conda sha256: 97bf1688e3847090d1c4193c39ca575a67e2183d0c20ddf8bcedc0f9d9528bbc md5: 8ace2a8121a5f733a902822290aae11c @@ -3839,16 +4111,16 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 25585 timestamp: 1771619514901 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.33-he9431aa_0.conda - sha256: cf2ee921c3e8bb70872b0e146f7809d02f45c894e12bf93537fc0523ecc370a8 - md5: b69f69843b228a650173716b23b1d834 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-13.3.73-he9431aa_0.conda + sha256: aaa45b15436cf0fe279efeddb0c8456ecbfe7b9a269ae01de725af22e88e29c2 + md5: 6b2562f71c917867830ebec5899d0aff depends: - - cuda-nvvm-dev_linux-aarch64 13.3.33.* - - cuda-nvvm-impl 13.3.33.* - - cuda-nvvm-tools 13.3.33.* + - cuda-nvvm-dev_linux-aarch64 13.3.73.* + - cuda-nvvm-impl 13.3.73.* + - cuda-nvvm-tools 13.3.73.* license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 25733 - timestamp: 1779909827964 + size: 24930 + timestamp: 1782788514971 - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-12.9.86-h719f0c7_6.conda sha256: 020a5bb67a35654f391d21b170ba763f95b7f133fec5678d69e676559dcd5653 md5: b162c7fb8b19f9102bd5f801d7f58ca2 @@ -3859,16 +4131,16 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 26007 timestamp: 1771619504675 -- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - sha256: d63d8a093e2390976ef5732996248fe683f153764553a98f5096de7252fb31bb - md5: 28b7994501f69efa53dbf1ebe9f9b350 +- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.73-h719f0c7_0.conda + sha256: 0695be0be2ef990ad821d4f1e481c275c717fd77f790a9fca50557771d1c3da4 + md5: 681a2be43dcc68156ed403872cefa25e depends: - - cuda-nvvm-dev_win-64 13.3.33.* - - cuda-nvvm-impl 13.3.33.* - - cuda-nvvm-tools 13.3.33.* + - cuda-nvvm-dev_win-64 13.3.73.* + - cuda-nvvm-impl 13.3.73.* + - cuda-nvvm-tools 13.3.73.* license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 26223 - timestamp: 1779909907942 + size: 25400 + timestamp: 1782788559176 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-12.9.86-ha770c72_2.conda sha256: 522722dcaffd133e0c7500c69dc70e21ac34d6762dcbaabfe847439f944028f0 md5: 7b386291414c7eea113d25ac28a33772 @@ -3877,14 +4149,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 27096 timestamp: 1753975261562 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.33-ha770c72_0.conda - sha256: a7eada853603adf6bed7022384b2b4ddb6d27b348a23a271f75caefa141ea954 - md5: b1b8dcad428089c6ddc16e0f4ac2631d +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.73-ha770c72_0.conda + sha256: 64859da589e9d4512b564d813273407b30a4213238f787ef958b84a7960cf469 + md5: ad71cad219a0ba0234e5592a279e8b3f depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 28476 - timestamp: 1779905085657 + size: 27969 + timestamp: 1782782853086 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.9.86-h579c4fd_2.conda sha256: 5f27299818ecef44d6cf46a99465671744f6074c14618b5f8491a03a62942a7f md5: c59b036058d7bf78ac0a99618c321e85 @@ -3894,15 +4166,15 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 27218 timestamp: 1753975206503 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.33-h579c4fd_0.conda - sha256: 68c76156498287e1fcffd5d0fb2a83b99b570e3efacf2e9416dfc9a356384738 - md5: 89a0f306085d404e6e774edc5d812679 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-13.3.73-h579c4fd_0.conda + sha256: 38718cc1669374cbc6442d727c0fa7f90d9a5d11c4c8d32ea75da309d28eadb1 + md5: 8326b68628d6d40a0cab0f6751d6a6d8 depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 28720 - timestamp: 1779905125664 + size: 27935 + timestamp: 1782782857355 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-12.9.86-h57928b3_2.conda sha256: 455dbf0ec81efdbd40c0387d82c77689721f6d34b6e7694ca0d51bad9392eddc md5: 23f7e70c03eabd2139b5e659c8e188b4 @@ -3911,14 +4183,14 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 27284 timestamp: 1753975714790 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - sha256: 295a4555e021ec3d4a35009a46b9a190c24e33f27e54e2575472c332fd52f204 - md5: c437c34990ce67cd1defa7f98a674417 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.73-h57928b3_0.conda + sha256: 400fa3aa271496bd173a3bb93a0ec8819fc73c795223156b14dcab9a7d0a7fda + md5: 7ff0ccae277707c5cb50965f84fee4e0 depends: - cuda-version >=13.3,<13.4.0a0 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 28779 - timestamp: 1779905174253 + size: 27987 + timestamp: 1782782907080 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-12.9.86-h4bc722e_2.conda sha256: f4d34556174e4faa9d374ba2244707082870e1bbc1bb441ad3d9d2cea37da6af md5: 82125dd3c0c4aa009faa00e2829b93d8 @@ -3929,17 +4201,17 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 21425520 timestamp: 1753975283188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.33-h4bc722e_0.conda - sha256: 1ea87e853ba917c14b222da1bff5179a3aa490ca5fd64e9ff1b865d2ca62e569 - md5: 3cdad839773c71e550927c626f8ba5fa +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-h4bc722e_0.conda + sha256: 41f356d6c38af4d2be789b13697469eb2eb61fc7aaf2765ae8dc5845587a36f7 + md5: e9fa0c38f175daa97354d21e74603588 depends: - __glibc >=2.17,<3.0.a0 - cuda-version >=13.3,<13.4.0a0 - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 22428462 - timestamp: 1779905092854 + size: 22429305 + timestamp: 1782782861319 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-12.9.86-h7b14b0b_2.conda sha256: 100accfc6f608004ddef4b9004ee5179eddbac19e7d5c4c7bd5e6e8b71bd7c5d md5: 8e9fceb7b677be7107cc9c20f8d71d86 @@ -3950,17 +4222,17 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 21601172 timestamp: 1753975236344 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.33-h7b14b0b_0.conda - sha256: e90b28ba3cac0f00acb5090693f7aaca46884ed9bd2d6fabec2b2c2c753be795 - md5: aee27037173867115c798567ba92c876 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-impl-13.3.73-h7b14b0b_0.conda + sha256: a41e62f9f3e6887a57c7e3c747b8762c60279b34e51b356df2474c0852e3cd24 + md5: 9163c2edad94dc8f1e194c41351eb383 depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 21556608 - timestamp: 1779905144993 + size: 21565754 + timestamp: 1782782874457 - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-12.9.86-h2466b09_2.conda sha256: 7b995ea653816b129bae6e4ee92898824a39fe82227472537bf75ac6ece7e955 md5: d8cea7bc32045bde718d0b1ceb595445 @@ -3972,9 +4244,9 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 31168 timestamp: 1753975780038 -- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - sha256: 64393c62eb39d09b1be9cecddd6721fa018f67f1d598d89ff63a36d4d1dac221 - md5: 0aa6111a0d7a368cc75e261d020a2c07 +- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.73-h2466b09_0.conda + sha256: 923a4ce23f1b4c9d733ad3b776de0569d51ec0a036935ee699d136d388684eae + md5: 1218693a2f626407453930c7af8d188d depends: - cuda-version >=13.3,<13.4.0a0 - ucrt >=10.0.20348.0 @@ -3982,8 +4254,8 @@ packages: - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 32862 - timestamp: 1779905180272 + size: 32375 + timestamp: 1782782913178 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda sha256: 45f5e881ed0d973132a5475a0b5c066db6e748ef3a831a14dba8374b252e0067 md5: f9af26e4079adcd72688a8e8dbecb229 @@ -3994,16 +4266,16 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 24246736 timestamp: 1753975332907 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.33-h4bc722e_0.conda - sha256: 3fc9d3ba08b4a3b5fd0065f048e8c6007a8ca1c8df07b3538f4b61435ecbc2ac - md5: 99365fca01f05b4255c79180e6e86a43 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.73-h4bc722e_0.conda + sha256: f853f097a67a197608fafc193ab877393c7735b1da2364572172cc9eff262775 + md5: d5c9cf56873f461074420e70970604a9 depends: - __glibc >=2.17,<3.0.a0 - cuda-version >=13.3,<13.4.0a0 - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 29720382 - timestamp: 1779905121216 + size: 29734373 + timestamp: 1782782895477 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-12.9.86-h7b14b0b_2.conda sha256: f5cf91e491e150e37cd224fa648c07f6b1cd2cbfee5affba10625df7ba0b0425 md5: 9a35dcda5573a713183f5159ec282364 @@ -4014,16 +4286,16 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 24411824 timestamp: 1753975273689 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.33-h7b14b0b_0.conda - sha256: cce5ef4c36f3db60909fc5bbbe138dfbf51d237d880cea77e366db33d97cac56 - md5: 6c981201b590365bbe2fd8af4f8a1675 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-nvvm-tools-13.3.73-h7b14b0b_0.conda + sha256: f96eb5d7c663c501a6e254e03818fa52f177dfd3a3a969a5ec71144787a95128 + md5: 9b78eff3eff8405a3c3c02ab47268409 depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 - libgcc >=12 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 29031580 - timestamp: 1779905175228 + size: 29030637 + timestamp: 1782782902389 - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-12.9.86-h2466b09_2.conda sha256: 5692a559206420f77e376a598329db966da762ad574866f9cc80a447d26ac49c md5: 25e269101d3eb39715a48998bc04289e @@ -4035,20 +4307,20 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 40286977 timestamp: 1753975898550 -- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - sha256: aac4f4ddb2d612350269e58364b5aa1142612838d429d493e2816a1626e41883 - md5: 394839d70f28114ece1f2e4efac66523 +- conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.73-h2466b09_0.conda + sha256: b06b40a782cae69f4c208bb64a83da6603d83b3ea7eb4b77a70d806189dedb98 + md5: 119e34d79508b512d33235312fdaff7d depends: - cuda-version >=13.3,<13.4.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 45453672 - timestamp: 1779905194696 + size: 45302858 + timestamp: 1782782927290 - conda: ../cuda_pathfinder name: cuda-pathfinder - version: 1.3.4a0 + version: 1.5.6 build: pyh4616a5c_0 subdir: noarch variants: @@ -4057,18 +4329,19 @@ packages: - python >=3.10 - python * license: Apache-2.0 -- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.2-pyhc364b38_0.conda - sha256: 8d1c8a686dd0b1b131eb6dd91aaf35b9cd9c256e26bfebe702683c32bee82798 - md5: 63c7ba46fbfc291fab512005c1753041 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.5.6-pyhc364b38_0.conda + sha256: aa6b13a1f13e8ee9f4e48d0d1bfe8505d1b40f4c547eea5fba7a69f1ca3ae508 + md5: f9b46e920d4929d099565a251b4902db depends: - python >=3.10 - cuda-version >=12.0,<14 - python license: Apache-2.0 + license_family: APACHE purls: - pkg:pypi/cuda-pathfinder?source=hash-mapping - size: 44855 - timestamp: 1775517790256 + size: 45350 + timestamp: 1782782777927 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-12.9.79-h7938cbb_1.conda sha256: 4f679dfbf2bf2d17abb507f31b0176c0e3572337b5005b9e36179948a53988ac md5: 90d09865fb37d11d510444e34ebe6a09 @@ -4146,22 +4419,48 @@ packages: purls: [] size: 22083 timestamp: 1779891651771 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.3-py314h1807b08_0.conda - sha256: a0e2ed0efefb82278e0fd1d455d10d1095d951a896591838b30674aa872300c4 - md5: f0658a93053b13335be941289d7d6160 +- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda + sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 + md5: 4c2a8fef270f6c69591889b93f9f55c1 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + size: 14778 + timestamp: 1764466758386 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda + sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 + md5: af491aae930edc096b58466c51c4126c depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: APACHE - size: 3797747 - timestamp: 1765651158436 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py312h68e6be4_0.conda - sha256: 01b815091e0c534a5f32a830b514e31c150dc2f539b7ba1d5c70b6d095a5ebcf - md5: 14f638dad5953c83443a2c4f011f1c9e + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm >=1.8,<2.0a0 + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + size: 210103 + timestamp: 1771943128249 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda + sha256: 0606296a3b0cc757229dd97db8c6dc0f77e54f975f89ae63c36fb01e2a2abe61 + md5: f4fbf4001970e3e58984281a12c99969 + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=13 + - libntlm + - libstdcxx >=13 + - libxcrypt >=4.4.36 + - openssl >=3.5.5,<4.0a0 + license: BSD-3-Clause-Attribution + license_family: BSD + size: 224450 + timestamp: 1771943147365 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py312h68e6be4_0.conda + sha256: 66b599f2bcd23ebcf6616947ec43e9f4d8d1d4f91462ebb9545d847d8d40013e + md5: 72177815525d6c5e684fc3ea3978b9c7 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -4172,11 +4471,11 @@ packages: license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3738170 - timestamp: 1767577770165 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda - sha256: f700d10c2a794710a1656a6fdb8908fb04f3c7812ac4f17187777646ede1a3d9 - md5: 866fd3d25b767bccb4adc8476f4035cd + size: 3752839 + timestamp: 1782821659817 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.8-py314h1807b08_0.conda + sha256: f0210259007f573e38f7b8037be9b36e53aa0906b786e9f1f931e0a24f8a18e6 + md5: 0e6a14f60b561b2fff81d325b4dc8283 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -4185,68 +4484,40 @@ packages: - python_abi 3.14.* *_cp314 license: Apache-2.0 license_family: APACHE - size: 3806945 - timestamp: 1767576996860 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.3-py314h4c416a3_0.conda - sha256: 431042164f0f50ce173be72d96f6a9ec069d1a4846f19ff8cf616ea98678a090 - md5: e641cbdecc93a5e243af87d198edc716 - depends: - - libgcc >=14 - - libstdcxx >=14 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: APACHE - size: 3701570 - timestamp: 1765651306767 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.4-py312he940de5_0.conda - sha256: 30bfb6445b8ae8022996283faa2d918393b1f0f78e37014995e1733e50df4303 - md5: 2f50ec4afc8e9f402b9041e9cee62744 + size: 3819412 + timestamp: 1782821647528 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py312hbda70bc_0.conda + sha256: 8e82a6164887243b8e1b2065cacdd0caff29abf8205aa0473476c4fb20da917c + md5: 57c5731af8ac35cdb4d767975d2a4357 depends: - libgcc >=14 - libstdcxx >=14 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3629503 - timestamp: 1767577211661 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.4-py314h4c416a3_0.conda - sha256: 1369b5b23d9451ae3ef678cb68678778a6ea164186bc8ebe6539a1d6fa803da8 - md5: 822c83a4ba5a12101695ba39607c338f + size: 3657323 + timestamp: 1782821628383 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.2.8-py314hc6b4731_0.conda + sha256: 4add54f62b3fbdc7f8e1238f5e5990e16a561bed33d18e3dbc1db1d4f6cf8572 + md5: c8ec76477232c7e59f68545a1b4fb8ea depends: - libgcc >=14 - libstdcxx >=14 - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - python_abi 3.14.* *_cp314 license: Apache-2.0 license_family: APACHE - size: 3707806 - timestamp: 1767577060898 -- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.3-py314h344ed54_0.conda - sha256: 6406b67af71dc477f891e6380eb6021d012ea467635c432017f08f954fa2b98d - md5: 91e2ed41320f5c89cc6d77ef47a820cd + size: 3747072 + timestamp: 1782821625037 +- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py312hd245ac3_0.conda + sha256: 5f01023be770526fa98f429405efb5027e4c51747181c18905e8fff05091fe43 + md5: 9a08c4b3f82b0fc612a38bce9aa7a4ca depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: APACHE - size: 3336844 - timestamp: 1765651351516 -- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py312hd245ac3_0.conda - sha256: 68e921fad16accb32e86c7c73abaea7d49c9346e078924d0a593f821672a5a0c - md5: 575ebca0d973015c21087b800bc48515 - depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 @@ -4254,11 +4525,11 @@ packages: license_family: APACHE purls: - pkg:pypi/cython?source=hash-mapping - size: 3285032 - timestamp: 1767577225362 -- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.4-py314h344ed54_0.conda - sha256: c2e08246f2e6f38b5793ebc8d36de32704e4f152ed959ab0558d529580610e0e - md5: 545afbc1940d8a81f114b9c14eecf2ca + size: 3299961 + timestamp: 1782821762725 +- conda: https://conda.anaconda.org/conda-forge/win-64/cython-3.2.8-py314h344ed54_0.conda + sha256: 8900c3a11e71521ed7400265a36686c4ed3973b937658c1f58cc74b707a1c173 + md5: 596f6f1a842a246dbe778dce002d0ca5 depends: - python >=3.14,<3.15.0a0 - python_abi 3.14.* *_cp314 @@ -4267,8 +4538,8 @@ packages: - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: APACHE - size: 3332872 - timestamp: 1767577440799 + size: 3338147 + timestamp: 1782821777709 - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda sha256: 22053a5842ca8ee1cf8e1a817138cdb5e647eb2c46979f84153f6ad7bde73020 md5: 418c6ca5929a611cbd69204907a83995 @@ -4323,39 +4594,39 @@ packages: license: AFL-2.1 OR GPL-2.0-or-later size: 480416 timestamp: 1764536098891 -- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.20-py312h8285ef7_0.conda - sha256: f20121b67149ff80bf951ccae7442756586d8789204cd08ade59397b22bfd098 - md5: ee1b48795ceb07311dd3e665dd4f5f33 +- conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.21-py312h8285ef7_0.conda + sha256: b8dbe25820064a099f315bbb8f45f5bac3fddb63e96af3cbf0c93a830733ef34 + md5: e6778419a1851f6e15820558abddfa04 depends: - python + - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - python_abi 3.12.* *_cp312 license: MIT license_family: MIT purls: - - pkg:pypi/debugpy?source=hash-mapping - size: 2858582 - timestamp: 1769744978783 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.20-py312hf55c4e8_0.conda - sha256: c041ed2da3fd1e237972a360cb0f532a0caf66f571fdc9ec2cc07ccb48b8c665 - md5: d7ee86593223e812e41612678c26a10d + - pkg:pypi/debugpy?source=compressed-mapping + size: 2821960 + timestamp: 1780390159181 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/debugpy-1.8.21-py312hf55c4e8_0.conda + sha256: 9d8a3442fae659629980c972b5f7ba8c2d339d233bd1de38ae72faf244cdc3a9 + md5: 228761e2c5f069dc8445337bd4abe097 depends: - python - - libstdcxx >=14 - libgcc >=14 - python 3.12.* *_cpython + - libstdcxx >=14 - python_abi 3.12.* *_cp312 license: MIT license_family: MIT purls: - - pkg:pypi/debugpy?source=hash-mapping - size: 2820348 - timestamp: 1769745006474 -- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.20-py312ha1a9051_0.conda - sha256: 5a886b1af3c66bf58213c7f3d802ea60fe8218313d9072bc1c9e8f7840548ba0 - md5: 032746a0b0663920f0afb18cec61062b + - pkg:pypi/debugpy?source=compressed-mapping + size: 2791691 + timestamp: 1780390168122 +- conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.21-py312ha1a9051_0.conda + sha256: a41f403ca4b7b0c001140ac7a39fce1c0494ba95e8359f7a47590ed4377728a2 + md5: 5628287239c9ef6df2d66dc143f7c8dd depends: - python - vc >=14.3,<15 @@ -4366,32 +4637,32 @@ packages: license_family: MIT purls: - pkg:pypi/debugpy?source=hash-mapping - size: 3996113 - timestamp: 1769745013982 -- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.2.1-pyhd8ed1ab_0.conda - sha256: c17c6b9937c08ad63cb20a26f403a3234088e57d4455600974a0ce865cb14017 - md5: 9ce473d1d1be1cc3810856a48b3fab32 + size: 3995148 + timestamp: 1780390185301 +- conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.3.1-pyhd8ed1ab_0.conda + sha256: 430bd9d731b265f0bedb3183ac3ecfaa1656390c092b6e864ff8cc1229843c8c + md5: 61dcf784d59ef0bd62c57d982b154ace depends: - - python >=3.9 + - python >=3.10 license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/decorator?source=hash-mapping - size: 14129 - timestamp: 1740385067843 -- conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.3.0.post1-pyhd8ed1ab_1.conda - sha256: 3aa044441dcea3afb935a48a075b59ed14dabb7ee6e019a757ff68d6b13c0a36 - md5: 103dc54172d3083adcda6bf8f1addcf3 + - pkg:pypi/decorator?source=compressed-mapping + size: 16102 + timestamp: 1779115228886 +- conda: https://conda.anaconda.org/conda-forge/noarch/dict2css-0.6.0-pyhd8ed1ab_0.conda + sha256: 446d5d68b2e76ed4afbd23fdde580b242e4fd309006fc246181437942ef1fac7 + md5: 788c6a27890b964b6980d062d593c5da depends: - - cssutils >=2.2.0 - domdf-python-tools >=2.2.0 - - python >=3.9 + - python >=3.10 + - tinycss2 >=1.2.1 license: MIT license_family: MIT purls: - pkg:pypi/dict2css?source=hash-mapping - size: 13700 - timestamp: 1738250096666 + size: 16157 + timestamp: 1779358557191 - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_1.conda sha256: fa5966bb1718bbf6967a85075e30e4547901410cc7cb7b16daf68942e9a94823 md5: 24c1ca34138ee57de72a943237cde4cc @@ -4417,13 +4688,46 @@ packages: - pkg:pypi/domdf-python-tools?source=hash-mapping size: 96253 timestamp: 1739444562482 -- conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda - sha256: 07f06106f9c15d36dff4694d1191e7c0f42273f175ad8d7abbffd347dfe33d4c - md5: 8b259cc3194c36e0235f873c6dae9eef +- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda + sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc + md5: dbe3ec0f120af456b3477743ffd99b74 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + size: 71809 + timestamp: 1765193127016 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda + sha256: a636dfd17adc2a859cbdfce97e449e338b02a9f099c6dc0941c9f26bf448cca9 + md5: 9fd794eaf983eabf975ead524540b4be + depends: + - libgcc >=14 + - libstdcxx >=14 + license: BSD-3-Clause + license_family: BSD + size: 71905 + timestamp: 1765194538141 +- conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda + sha256: 09e30a170e0da3e9847d449b594b5e55e6ae2852edd3a3680e05753a5e015605 + md5: 3d3caf4ccc6415023640af4b1b33060a + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-3-Clause + license_family: BSD + size: 70943 + timestamp: 1765193243911 +- conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhcf101f3_1.conda + sha256: 6a9ca88e9cb9410fbc2a3ec8ef8fa691bfd69541b652cd9e6ec1accf02f07cb1 + md5: 2c4a76362cf961db49bc9dbd8707dcef depends: - pygments >=2.6.1 - - python >=3.9 + - python >=3.10 - typing-extensions >=3.7.4.3 + - python constrains: - sphinx >=3.4.0 - sphinx-toolbox >=2.16.0 @@ -4431,8 +4735,8 @@ packages: license_family: LGPL purls: - pkg:pypi/enum-tools?source=hash-mapping - size: 24762 - timestamp: 1744913087216 + size: 31183 + timestamp: 1777266899521 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 md5: 8e662bd460bda79b1ea39194e3c4c9ab @@ -4455,106 +4759,46 @@ packages: - pkg:pypi/executing?source=hash-mapping size: 30753 timestamp: 1756729456476 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hb3f9226_906.conda - sha256: 7992f272a45d90731771b36db0acd3565f22ebc285829385262900e59f75db12 - md5: 48787f2eab82ef1d90ccd9c24b64981e - depends: - - __glibc >=2.17,<3.0.a0 - - alsa-lib >=1.2.14,<1.3.0a0 - - aom >=3.9.1,<3.10.0a0 - - bzip2 >=1.0.8,<2.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - gmp >=6.3.0,<7.0a0 - - harfbuzz >=12.2.0 - - lame >=3.100,<3.101.0a0 - - libass >=0.17.4,<0.17.5.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libopenvino >=2025.2.0,<2025.2.1.0a0 - - libopenvino-auto-batch-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-auto-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-hetero-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-intel-cpu-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-intel-gpu-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-intel-npu-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-ir-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-onnx-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-paddle-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-pytorch-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-tensorflow-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-tensorflow-lite-frontend >=2025.2.0,<2025.2.1.0a0 - - libopus >=1.5.2,<2.0a0 - - librsvg >=2.60.0,<3.0a0 - - libstdcxx >=14 - - libva >=2.22.0,<3.0a0 - - libvorbis >=1.3.7,<1.4.0a0 - - libvpl >=2.15.0,<2.16.0a0 - - libvpx >=1.15.2,<1.16.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 - - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.4,<4.0a0 - - pulseaudio-client >=17.0,<17.1.0a0 - - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=3.1.2,<3.1.3.0a0 - - x264 >=1!164.3095,<1!165 - - x265 >=3.5,<3.6.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - constrains: - - __cuda >=12.8 - license: GPL-2.0-or-later - license_family: GPL - size: 12482468 - timestamp: 1765653517558 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.0.1-gpl_hcddb375_914.conda - sha256: 0d465b145eb7166d6a3989f0befe790789624604945f53de767b169b1832c088 - md5: f0e9f1452786e2b32907e8d9a6b3c752 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h8dc83e7_903.conda + sha256: 5d14dfd1f0f6448ddee383bac7088c779506096e2911e7dde566760b0ea5a855 + md5: 805e8307b7c1fd6c72b95d593b5bfe63 depends: - __glibc >=2.17,<3.0.a0 - - alsa-lib >=1.2.15.3,<1.3.0a0 - - aom >=3.9.1,<3.10.0a0 + - alsa-lib >=1.2.16.1,<1.3.0a0 + - aom >=3.14.1,<3.15.0a0 - bzip2 >=1.0.8,<2.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.17.1,<3.0a0 + - fontconfig >=2.18.1,<3.0a0 - fonts-conda-ecosystem - gmp >=6.3.0,<7.0a0 - - harfbuzz >=12.3.2 - lame >=3.100,<3.101.0a0 - - libass >=0.17.4,<0.17.5.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 + - libass >=0.17.5,<0.17.6.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 + - libharfbuzz >=14.2.1 - libiconv >=1.18,<2.0a0 - - libjxl >=0.11,<1.0a0 - - liblzma >=5.8.2,<6.0a0 - - libopenvino >=2026.0.0,<2026.0.1.0a0 - - libopenvino-auto-batch-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-auto-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-hetero-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-intel-cpu-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-intel-gpu-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-intel-npu-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-ir-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-onnx-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-paddle-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-pytorch-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-tensorflow-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-tensorflow-lite-frontend >=2026.0.0,<2026.0.1.0a0 + - libjxl >=0.12.0,<0.13.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-batch-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-hetero-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-cpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-gpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-intel-npu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-ir-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-onnx-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-paddle-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-pytorch-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.2.1,<2026.2.2.0a0 - libopus >=1.6.1,<2.0a0 - - librsvg >=2.60.2,<3.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.3,<3.0a0 - libstdcxx >=14 - - libva >=2.23.0,<3.0a0 + - libva >=2.24.1,<3.0a0 - libvorbis >=1.3.7,<1.4.0a0 - libvpl >=2.16.0,<2.17.0a0 - libvpx >=1.15.2,<1.16.0a0 @@ -4563,13 +4807,13 @@ packages: - libxcb >=1.17.0,<2.0a0 - libxml2 - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 - pulseaudio-client >=17.0,<17.1.0a0 - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=4.0.1,<4.0.2.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.2.0,<4.2.1.0a0 - x264 >=1!164.3095,<1!165 - x265 >=3.5,<3.6.0a0 - xorg-libx11 >=1.8.13,<2.0a0 @@ -4577,42 +4821,43 @@ packages: - __cuda >=12.8 license: GPL-2.0-or-later license_family: GPL - size: 12485347 - timestamp: 1773008832077 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h62efc85_914.conda - sha256: a2816bcef9d7b072597192fcb15b851eaee1ef358c0a3890ab255070d41b64cb - md5: e9f109db13b0fad0c1f2f92d9770c8c3 - depends: - - alsa-lib >=1.2.15.3,<1.3.0a0 - - aom >=3.9.1,<3.10.0a0 + size: 13041011 + timestamp: 1784109820032 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.1.2-gpl_h635796f_903.conda + sha256: 683af8981ea5df4119dd536ccc26fe1fe2fdbe1adaf97e10820849bf0c32ed01 + md5: 90d5058a76c73da3b3a775380f727838 + depends: + - alsa-lib >=1.2.16.1,<1.3.0a0 + - aom >=3.14.1,<3.15.0a0 - bzip2 >=1.0.8,<2.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.17.1,<3.0a0 + - fontconfig >=2.18.1,<3.0a0 - fonts-conda-ecosystem - gmp >=6.3.0,<7.0a0 - - harfbuzz >=12.3.2 - lame >=3.100,<3.101.0a0 - - libass >=0.17.4,<0.17.5.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 + - libass >=0.17.5,<0.17.6.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 + - libharfbuzz >=14.2.1 - libiconv >=1.18,<2.0a0 - - libjxl >=0.11,<1.0a0 - - liblzma >=5.8.2,<6.0a0 - - libopenvino >=2026.0.0,<2026.0.1.0a0 - - libopenvino-arm-cpu-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-auto-batch-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-auto-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-hetero-plugin >=2026.0.0,<2026.0.1.0a0 - - libopenvino-ir-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-onnx-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-paddle-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-pytorch-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-tensorflow-frontend >=2026.0.0,<2026.0.1.0a0 - - libopenvino-tensorflow-lite-frontend >=2026.0.0,<2026.0.1.0a0 + - libjxl >=0.12.0,<0.13.0a0 + - liblzma >=5.8.3,<6.0a0 + - libopenvino >=2026.2.1,<2026.2.2.0a0 + - libopenvino-arm-cpu-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-batch-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-auto-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-hetero-plugin >=2026.2.1,<2026.2.2.0a0 + - libopenvino-ir-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-onnx-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-paddle-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-pytorch-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-frontend >=2026.2.1,<2026.2.2.0a0 + - libopenvino-tensorflow-lite-frontend >=2026.2.1,<2026.2.2.0a0 - libopus >=1.6.1,<2.0a0 - - librsvg >=2.60.2,<3.0a0 + - libplacebo >=7.360.1,<7.361.0a0 + - librsvg >=2.62.3,<3.0a0 - libstdcxx >=14 - libvorbis >=1.3.7,<1.4.0a0 - libvpx >=1.15.2,<1.16.0a0 @@ -4621,13 +4866,13 @@ packages: - libxcb >=1.17.0,<2.0a0 - libxml2 - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 - pulseaudio-client >=17.0,<17.1.0a0 - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=4.0.1,<4.0.2.0a0 + - shaderc >=2026.2,<2026.3.0a0 + - svt-av1 >=4.2.0,<4.2.1.0a0 - x264 >=1!164.3095,<1!165 - x265 >=3.5,<3.6.0a0 - xorg-libx11 >=1.8.13,<2.0a0 @@ -4635,171 +4880,37 @@ packages: - __cuda >=12.8 license: GPL-2.0-or-later license_family: GPL - size: 12035194 - timestamp: 1773008913159 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_h936a714_906.conda - sha256: b9c6d3698809316fc278f9df373b4ec3a016f6f3b9b0ccbedb0d3a828c7572a1 - md5: 2a521f179f7aa9a820fa3441e0cb2a50 - depends: - - alsa-lib >=1.2.14,<1.3.0a0 - - aom >=3.9.1,<3.10.0a0 - - bzip2 >=1.0.8,<2.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - gmp >=6.3.0,<7.0a0 - - harfbuzz >=12.2.0 - - lame >=3.100,<3.101.0a0 - - libass >=0.17.4,<0.17.5.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libopenvino >=2025.2.0,<2025.2.1.0a0 - - libopenvino-arm-cpu-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-auto-batch-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-auto-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-hetero-plugin >=2025.2.0,<2025.2.1.0a0 - - libopenvino-ir-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-onnx-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-paddle-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-pytorch-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-tensorflow-frontend >=2025.2.0,<2025.2.1.0a0 - - libopenvino-tensorflow-lite-frontend >=2025.2.0,<2025.2.1.0a0 - - libopus >=1.5.2,<2.0a0 - - librsvg >=2.60.0,<3.0a0 - - libstdcxx >=14 - - libvorbis >=1.3.7,<1.4.0a0 - - libvpx >=1.15.2,<1.16.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 - - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.4,<4.0a0 - - pulseaudio-client >=17.0,<17.1.0a0 - - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=3.1.2,<3.1.3.0a0 - - x264 >=1!164.3095,<1!165 - - x265 >=3.5,<3.6.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - constrains: - - __cuda >=12.8 - license: GPL-2.0-or-later - license_family: GPL - size: 12009838 - timestamp: 1765653483363 -- conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_h74fd8f1_907.conda - sha256: d2fd4f6ccb01270a59b2f9277b938b8795201d3e44547fa3b7d228ce66c67050 - md5: 9062e8bce38eee2540db36e35947adf7 - depends: - - aom >=3.9.1,<3.10.0a0 - - bzip2 >=1.0.8,<2.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - harfbuzz >=12.2.0 - - lame >=3.100,<3.101.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libopus >=1.6,<2.0a0 - - librsvg >=2.60.0,<3.0a0 - - libvorbis >=1.3.7,<1.4.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 - - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.4,<4.0a0 - - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=3.1.2,<3.1.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - x264 >=1!164.3095,<1!165 - - x265 >=3.5,<3.6.0a0 - constrains: - - __cuda >=12.8 - license: GPL-2.0-or-later - license_family: GPL - size: 10420698 - timestamp: 1765873656019 -- conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_h74fd8f1_908.conda - sha256: 28b398848c1389d474557a19e9963c778ab76e0e3a02c1cabdb94a3067cad82b - md5: e08d05ea85b8b24fabb8afa1d0d79362 - depends: - - aom >=3.9.1,<3.10.0a0 - - bzip2 >=1.0.8,<2.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.15.0,<3.0a0 - - fonts-conda-ecosystem - - harfbuzz >=12.2.0 - - lame >=3.100,<3.101.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libopus >=1.6,<2.0a0 - - librsvg >=2.60.0,<3.0a0 - - libvorbis >=1.3.7,<1.4.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 - - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.4,<4.0a0 - - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 - - svt-av1 >=3.1.2,<3.1.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - x264 >=1!164.3095,<1!165 - - x265 >=3.5,<3.6.0a0 - constrains: - - __cuda >=12.8 - license: GPL-2.0-or-later - license_family: GPL - size: 10416746 - timestamp: 1766461370784 -- conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.0.1-gpl_hb2d76f6_914.conda - sha256: fbe7916ed95bdc9650c9906865ab21cc04fb337548fdffec94f64a547ba3644d - md5: 7cffff39ee349bddb81e1de24c780f34 + size: 12677429 + timestamp: 1784109810659 +- conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_hdd6294f_902.conda + sha256: 136bb34782ed1dfa0cdc594c0ce61a120057c394efa3c64008c9404785d1b4da + md5: 6efa244e707348f5b174e4cf4f945446 depends: - - aom >=3.9.1,<3.10.0a0 + - aom >=3.14.1,<3.15.0a0 - bzip2 >=1.0.8,<2.0a0 - dav1d >=1.2.1,<1.2.2.0a0 - - fontconfig >=2.17.1,<3.0a0 + - fontconfig >=2.18.1,<3.0a0 - fonts-conda-ecosystem - - harfbuzz >=12.3.2 - lame >=3.100,<3.101.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libharfbuzz >=14.2.1 - libiconv >=1.18,<2.0a0 - - libjxl >=0.11,<1.0a0 - - liblzma >=5.8.2,<6.0a0 + - libjxl >=0.12,<0.13.0a0 + - liblzma >=5.8.3,<6.0a0 - libopus >=1.6.1,<2.0a0 - - librsvg >=2.60.0,<3.0a0 + - librsvg >=2.62.3,<3.0a0 - libvorbis >=1.3.7,<1.4.0a0 - libvulkan-loader >=1.4.341.0,<2.0a0 - libwebp-base >=1.6.0,<2.0a0 - libxml2 - libxml2-16 >=2.14.6 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - openh264 >=2.6.0,<2.6.1.0a0 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 - sdl2 >=2.32.56,<3.0a0 - - shaderc >=2025.5,<2025.6.0a0 + - shaderc >=2026.2,<2026.3.0a0 - svt-av1 >=4.0.1,<4.0.2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -4810,18 +4921,18 @@ packages: - __cuda >=12.8 license: GPL-2.0-or-later license_family: GPL - size: 10417843 - timestamp: 1773010275486 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f - md5: f58064cec97b12a7136ebb8a6f8a129b + size: 11017596 + timestamp: 1783098933593 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.30.2-pyhd8ed1ab_0.conda + sha256: 6ce888c8d597af7aba41e5a48b8fcc86fba072a97297d39f821968297b27d497 + md5: 0c38ae0295ee197e7f26675f34e173c4 depends: - python >=3.10 license: Unlicense purls: - pkg:pypi/filelock?source=compressed-mapping - size: 25845 - timestamp: 1773314012590 + size: 74480 + timestamp: 1784269447478 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -4850,93 +4961,52 @@ packages: license_family: Other size: 1620504 timestamp: 1727511233259 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda - sha256: 7093aa19d6df5ccb6ca50329ef8510c6acb6b0d8001191909397368b65b02113 - md5: 8f5b0b297b59e1ac160ad4beec99dbee - depends: - - __glibc >=2.17,<3.0.a0 - - freetype >=2.12.1,<3.0a0 - - libexpat >=2.6.3,<3.0a0 - - libgcc >=13 - - libuuid >=2.38.1,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 265599 - timestamp: 1730283881107 -- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.17.1-h27c8c51_0.conda - sha256: aa4a44dba97151221100a637c7f4bde619567afade9c0265f8e1c8eed8d7bd8c - md5: 867127763fbe935bab59815b6e0b7b5c +- conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda + sha256: 2e50bdcebdf70a865b81f2456bbc586386451ec601c60f2b6cd22b8c40a2d384 + md5: e0e050cfa9fa85fe39632ab11cb7f3e0 depends: - __glibc >=2.17,<3.0.a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - size: 270705 - timestamp: 1771382710863 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.15.0-h8dda3cd_1.conda - sha256: fe023bb8917c8a3138af86ef537b70c8c5d60c44f93946a87d1e8bb1a6634b55 - md5: 112b71b6af28b47c624bcbeefeea685b + size: 281880 + timestamp: 1780450077431 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda + sha256: 2ccfd118269d363a5506161c4a0d96da46d2f01beecc74e0540a54b4737d0e45 + md5: f4d29a0cd77104a683607319a542ac7e depends: - - freetype >=2.12.1,<3.0a0 - - libexpat >=2.6.3,<3.0a0 - - libgcc >=13 - - libuuid >=2.38.1,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 277832 - timestamp: 1730284967179 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.17.1-hba86a56_0.conda - sha256: 835aff8615dd8d8fff377679710ce81b8a2c47b6404e21a92fb349fda193a15c - md5: 0fed1ff55f4938a65907f3ecf62609db - depends: - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 279044 - timestamp: 1771382728182 -- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.15.0-h765892d_1.conda - sha256: ed122fc858fb95768ca9ca77e73c8d9ddc21d4b2e13aaab5281e27593e840691 - md5: 9bb0026a2131b09404c59c4290c697cd - depends: - - freetype >=2.12.1,<3.0a0 - - libexpat >=2.6.3,<3.0a0 - - libiconv >=1.17,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - size: 192355 - timestamp: 1730284147944 -- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.17.1-hd47e2ca_0.conda - sha256: ff2db9d305711854de430f946dc59bd40167940a1de38db29c5a78659f219d9c - md5: a0b1b87e871011ca3b783bbf410bc39f + size: 290522 + timestamp: 1780450108132 +- conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda + sha256: 9217184c4a8e82101b0e512b059ae3ff67e3913133b9031edad89ab5341284e4 + md5: abd79bad98c99c1a116154d6de74ea89 depends: - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libintl >=0.22.5,<1.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: MIT license_family: MIT - size: 195332 - timestamp: 1771382820659 + size: 202630 + timestamp: 1780450217840 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 md5: fee5683a3f04bd15cbd8318b096a27ab @@ -4958,60 +5028,48 @@ packages: license_family: BSD size: 4059 timestamp: 1762351264405 -- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda - sha256: bf8e4dffe46f7d25dc06f31038cacb01672c47b9f45201f065b0f4d00ab0a83e - md5: 4afc585cd97ba8a23809406cd8a9eda8 +- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda + sha256: c9752235f1ff7061d834e5e4a3d0adf71ebeeff2b3fad82dab607edce7f70c91 + md5: 0509ee74d95e5b98eb6fe2a47760e399 depends: - - libfreetype 2.14.1 ha770c72_0 - - libfreetype6 2.14.1 h73754d4_0 - license: GPL-2.0-only OR FTL - size: 173114 - timestamp: 1757945422243 -- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda - sha256: 36857701b46828b6760c3c1652414ee504e7fc12740261ac6fcff3959b72bd7a - md5: eeec961fec28e747e1e1dc0446277452 - depends: - - libfreetype 2.14.2 ha770c72_0 - - libfreetype6 2.14.2 h73754d4_0 - license: GPL-2.0-only OR FTL - size: 174292 - timestamp: 1772757205296 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.1-h8af1aa0_0.conda - sha256: 9f8de35e95ce301cecfe01bc9d539c7cc045146ffba55efe9733ff77ad1cfb21 - md5: 0c8f36ebd3678eed1685f0fc93fc2175 - depends: - - libfreetype 2.14.1 h8af1aa0_0 - - libfreetype6 2.14.1 hdae7a39_0 - license: GPL-2.0-only OR FTL - size: 173174 - timestamp: 1757945489158 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.2-h8af1aa0_0.conda - sha256: ecbe6e811574fba5194b29ac3a2badea5eaa060bd9fe7f5bd48a70d16ef38e5a - md5: 9cb47d7bbb36646c44d7cf1cb8047887 - depends: - - libfreetype 2.14.2 h8af1aa0_0 - - libfreetype6 2.14.2 hdae7a39_0 + - brotli + - munkres + - python >=3.10 + - unicodedata2 >=15.1.0 + track_features: + - fonttools_no_compile + license: MIT + license_family: MIT + size: 846038 + timestamp: 1778770337113 +- conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda + sha256: c934c385889c7836f034039b43b05ccfa98f53c900db03d8411189892ced090b + md5: 8462b5322567212beeb025f3519fb3e2 + depends: + - libfreetype 2.14.3 ha770c72_0 + - libfreetype6 2.14.3 h73754d4_0 license: GPL-2.0-only OR FTL - size: 173437 - timestamp: 1772756019067 -- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.1-h57928b3_0.conda - sha256: a9b3313edea0bf14ea6147ea43a1059d0bf78771a1336d2c8282891efc57709a - md5: d69c21967f35eb2ce7f1f85d6b6022d3 - depends: - - libfreetype 2.14.1 h57928b3_0 - - libfreetype6 2.14.1 hdbac1cb_0 + size: 173839 + timestamp: 1774298173462 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda + sha256: 1112c56bc19cbce233b30d9d31ce8eb6fcc100c9baa5145315aaa1e3a25b5178 + md5: 5e8e88bfb3fbb0df0f9f8bb890721e07 + depends: + - libfreetype 2.14.3 h8af1aa0_1 + - libfreetype6 2.14.3 hdae7a39_1 license: GPL-2.0-only OR FTL - size: 184553 - timestamp: 1757946164012 -- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.2-h57928b3_0.conda - sha256: 6dd4bb3862ea3d07015331059504cf3b6af1a11a6909e7a9b6e04a20e253da28 - md5: c360b467564b875a9f5dc481b8726cee - depends: - - libfreetype 2.14.2 h57928b3_0 - - libfreetype6 2.14.2 hdbac1cb_0 + size: 174060 + timestamp: 1780933507786 +- conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda + sha256: a0e419e96146159f12344c870dca608d11bca36841f228092b986ffc2e1e0f02 + md5: e77293b32225b136a8be300f93d0e89f + depends: + - libfreetype 2.14.3 h57928b3_1 + - libfreetype6 2.14.3 hdbac1cb_1 + - zlib license: GPL-2.0-only OR FTL - size: 185633 - timestamp: 1772756186241 + size: 185584 + timestamp: 1780934817461 - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda sha256: 858283ff33d4c033f4971bf440cebff217d5552a5222ba994c49be990dacd40d md5: f9f81ea472684d75b9dd8d0b328cf655 @@ -5039,270 +5097,163 @@ packages: license: LGPL-2.1-or-later size: 64394 timestamp: 1757438741305 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_16.conda - sha256: f7d74b470dbaaaf715bf0c29a8e5786b41c5be38b8fd2b703cdbe8c3ac9a4061 - md5: d65a413999f5e84b95cc56145f7dc8ae +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h0dff253_19.conda + sha256: 54a0d9ee655ba83b78b7a796f12224b26c24943d8970559ecc47ccd6c2b0fa72 + md5: 18ec2ee87e4f532afa459ce8ea9a6b02 depends: - conda-gcc-specs - - gcc_impl_linux-64 15.2.0 hc5723f1_16 + - gcc_impl_linux-64 15.2.0 he0086c7_19 license: BSD-3-Clause license_family: BSD - size: 28938 - timestamp: 1765257209407 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.2.0-h6f77f03_18.conda - sha256: d120a7616f8b2717fc2a9d0246b53f69ce3fb33e565d22dba44e3d6827ee4f12 - md5: 094638a454410aa77586ffcc9a403aef + size: 29561 + timestamp: 1778269371353 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_19.conda + sha256: 3d75b775f6ab3977b2b72b9940806603158d10d60ff3e66930a59b74c4305219 + md5: 6b596ff6f13f6e46365d2182c6ea1e53 depends: - - gcc_impl_linux-64 15.2.0 he420e7e_18 + - gcc_impl_linux-aarch64 15.2.0 h3530432_19 track_features: - gcc_no_conda_specs license: BSD-3-Clause license_family: BSD - size: 29453 - timestamp: 1771378662937 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_16.conda - sha256: 7124670911087be385d372979a31afd1e37a9d0e6de3e56efc6b8447aae31c75 - md5: 4f8b33ee4999031fc336eb0d1853a439 + size: 29538 + timestamp: 1778269115054 +- conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-h6123e3b_19.conda + sha256: 7f8ee38e98ecc50818a509d794abcd4f1dbbe3d154cdc3e4dba6eeb6cbe75faa + md5: 64a4036e06e497afe50d690c63906e38 depends: - - gcc_impl_linux-aarch64 15.2.0 habb1d5c_16 + - gcc_impl_win-64 15.2.0 h062b9a2_19 track_features: - gcc_no_conda_specs license: BSD-3-Clause license_family: BSD - size: 29174 - timestamp: 1765257473532 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc-15.2.0-h24a549f_18.conda - sha256: 0bd812fcf81d866d75eca0fd759b001f0f39601d0f8ea9b7a888b47719491de9 - md5: e4c2c2d15fc780407d7012a529aa7d23 - depends: - - gcc_impl_linux-aarch64 15.2.0 hcedddb3_18 - track_features: - - gcc_no_conda_specs - license: BSD-3-Clause - license_family: BSD - size: 29408 - timestamp: 1771378529822 -- conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_16.conda - sha256: 47e615d15323e8e5713079d6a364c29e622c1351a1bbae25a4b2b29a8a65176e - md5: 75be5b3f44f3f939e2c3cdb041d12a44 - depends: - - conda-gcc-specs - - gcc_impl_win-64 15.2.0 h79c4613_16 - license: BSD-3-Clause - license_family: BSD - size: 1202509 - timestamp: 1765260844098 -- conda: https://conda.anaconda.org/conda-forge/win-64/gcc-15.2.0-hd556455_18.conda - sha256: 349dd70890b3bb51d8f7a7976f53711f4606c076a659ee7fdc7c32e2ffa019a1 - md5: 0f295318682c2fbefbe293399fae135f - depends: - - conda-gcc-specs - - gcc_impl_win-64 15.2.0 ha526d7c_18 - license: BSD-3-Clause - license_family: BSD - size: 1198343 - timestamp: 1771382604468 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-hc5723f1_16.conda - sha256: dfd180b9df441b57aa539dfcfcc416c804638b3bc5ec9dbb5d7bdbc009eba497 - md5: 83c672f0e373c37436953413b2272a42 - depends: - - binutils_impl_linux-64 >=2.45 - - libgcc >=15.2.0 - - libgcc-devel_linux-64 15.2.0 hcc6f6b0_116 - - libgomp >=15.2.0 - - libsanitizer 15.2.0 h90f66d4_16 - - libstdcxx >=15.2.0 - - libstdcxx-devel_linux-64 15.2.0 hd446a21_116 - - sysroot_linux-64 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 80309755 - timestamp: 1765256937267 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he420e7e_18.conda - sha256: a088cfd3ae6fa83815faa8703bc9d21cc915f17bd1b51aac9c16ddf678da21e4 - md5: cf56b6d74f580b91fd527e10d9a2e324 + size: 1199452 + timestamp: 1778273446640 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-15.2.0-he0086c7_19.conda + sha256: a48400ec4b73369c1c59babe4ad35821b63a88bba0ec40a80cea5f8c53a26b83 + md5: e3be72048d3c4a78b8e27ec48ba06252 depends: - binutils_impl_linux-64 >=2.45 - libgcc >=15.2.0 - - libgcc-devel_linux-64 15.2.0 hcc6f6b0_118 + - libgcc-devel_linux-64 15.2.0 hcc6f6b0_119 - libgomp >=15.2.0 - - libsanitizer 15.2.0 h90f66d4_18 + - libsanitizer 15.2.0 h90f66d4_19 - libstdcxx >=15.2.0 - - libstdcxx-devel_linux-64 15.2.0 hd446a21_118 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 - sysroot_linux-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 81814135 - timestamp: 1771378369317 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-habb1d5c_16.conda - sha256: 9b7e56534fa3029e0caf6dbbf4daa2d567e630672f977f01ad0c356933fb1b0d - md5: af391ca6347927b4e067a8be221d1b3a - depends: - - binutils_impl_linux-aarch64 >=2.45 - - libgcc >=15.2.0 - - libgcc-devel_linux-aarch64 15.2.0 h55c397f_116 - - libgomp >=15.2.0 - - libsanitizer 15.2.0 he19c465_16 - - libstdcxx >=15.2.0 - - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_116 - - sysroot_linux-aarch64 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 74461928 - timestamp: 1765257095042 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-hcedddb3_18.conda - sha256: 12919d985a6c6787872699c7a3c295dad07f4084f2d850e9c7fe592ee0a6806b - md5: 761a75d8c098913bc1186b26588051e0 + size: 81180457 + timestamp: 1778269124617 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gcc_impl_linux-aarch64-15.2.0-h3530432_19.conda + sha256: cd23829b5fb7f3ff5f44eab2da1a993e06bdf759b681a0a7a73bb5783755b6b3 + md5: 66dfb62e7a47e2b511f9c5ee0ff1abf3 depends: - binutils_impl_linux-aarch64 >=2.45 - libgcc >=15.2.0 - - libgcc-devel_linux-aarch64 15.2.0 h55c397f_118 + - libgcc-devel_linux-aarch64 15.2.0 h55c397f_119 - libgomp >=15.2.0 - - libsanitizer 15.2.0 he19c465_18 + - libsanitizer 15.2.0 he19c465_19 - libstdcxx >=15.2.0 - - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_118 + - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_119 - sysroot_linux-aarch64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 73516504 - timestamp: 1771378256368 -- conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h79c4613_16.conda - sha256: 73489f4fe29f8a80a2514ff21285226aafed37693099c5d48460a780608a6ee2 - md5: c545222077e50b9cdc7dfb2c80ba8cfa - depends: - - binutils_impl_win-64 >=2.45 - - libgcc >=15.2.0 - - libgcc-devel_win-64 15.2.0 hbb59886_116 - - libgomp >=15.2.0 - - libstdcxx >=15.2.0 - - libstdcxx-devel_win-64 15.2.0 h0a72980_116 - - m2w64-sysroot_win-64 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 62325084 - timestamp: 1765260533999 -- conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-ha526d7c_18.conda - sha256: 70db065b687f52e64b942af8daf33e244e17128158ced9dc019924c4f79d3b82 - md5: 7568471e78e882712c3d3715624a54c8 + size: 73237372 + timestamp: 1778268860495 +- conda: https://conda.anaconda.org/conda-forge/win-64/gcc_impl_win-64-15.2.0-h062b9a2_19.conda + sha256: 9a1087fc15253a923d6c4f3a313285b1ad7f5e8c849f24086bc0696b9383313b + md5: 04354147d91b3ac936a4f410af5e1d0f depends: - binutils_impl_win-64 >=2.45 - libgcc >=15.2.0 - - libgcc-devel_win-64 15.2.0 hbb59886_118 + - libgcc-devel_win-64 15.2.0 hbb59886_119 - libgomp >=15.2.0 - libstdcxx >=15.2.0 - - libstdcxx-devel_win-64 15.2.0 h0a72980_118 + - libstdcxx-devel_win-64 15.2.0 h0a72980_119 - m2w64-sysroot_win-64 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 62510234 - timestamp: 1771382289787 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.4-h2b0a6b4_0.conda - sha256: f47222f58839bcc77c15f11a8814c1d8cb8080c5ca6ba83398a12b640fd3c85c - md5: c379d67c686fb83475c1a6ed41cc41ff + size: 62130152 + timestamp: 1778273122806 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.7-h2b0a6b4_0.conda + sha256: 1c22e37f9d7e06e9e0582ee5a55c2ddd19ea75f71f44eb13b56f504ef5c37aa5 + md5: 5d355db3e937086e22cf4cb5fe19787c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libglib >=2.86.0,<3.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 + - libglib >=2.88.2,<3.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 - libtiff >=4.7.1,<4.8.0a0 license: LGPL-2.1-or-later license_family: LGPL - size: 572093 - timestamp: 1761082340749 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.44.5-h2b0a6b4_1.conda - sha256: b2a6fb56b8f2d576a3ae5e6c57b2dbab91d52d1f1658bf1b258747ae25bb9fde - md5: 7eb4977dd6f60b3aaab0715a0ea76f11 + size: 581631 + timestamp: 1782591374199 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.7-h90308e0_0.conda + sha256: f406e0b58a51da8648b100316c7b5893e5585256b67eb410126e2357a901f0d2 + md5: 6b26b46bbc0761e0f256699eab75202d depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - liblzma >=5.8.2,<6.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - license: LGPL-2.1-or-later - license_family: LGPL - size: 575109 - timestamp: 1771530561157 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.4-h90308e0_0.conda - sha256: 78a1d69c3d0da73b4d54a35001abd4e273605180d21365b4f31e9a241d9fb715 - md5: 4c8c0d2f7620467869d41f29304362dc - depends: - - libgcc >=14 - - libglib >=2.86.0,<3.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - license: LGPL-2.1-or-later - license_family: LGPL - size: 580454 - timestamp: 1761083738779 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gdk-pixbuf-2.44.5-h90308e0_1.conda - sha256: aa95b37da0750fb93c5eeef79073b9b0d50976fa0dc02ed0301ff7bbbfc7ff36 - md5: c75ae103325db056719dd51d6525e1cd - depends: - - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - liblzma >=5.8.2,<6.0a0 - - libpng >=1.6.55,<1.7.0a0 + - libglib >=2.88.2,<3.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 - libtiff >=4.7.1,<4.8.0a0 license: LGPL-2.1-or-later license_family: LGPL - size: 584221 - timestamp: 1771532437279 -- conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.4-h1f5b9c4_0.conda - sha256: 24189e4615a0aa574ab2bd5c270fff999da6951e3cd391f1e807c7e4fafd5cdc - md5: 0ce8e4983a4c60a5b75a9a5b5f227447 + size: 588681 + timestamp: 1782593151876 +- conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.7-h1f5b9c4_0.conda + sha256: 4965bf7c84c9b7c970f1f7bc475962e43441018cf9551682a4a22960c5090588 + md5: 5daba86dbe8072c7e49f74013ef308cd depends: - - libglib >=2.86.0,<3.0a0 + - libglib >=2.88.2,<3.0a0 - libintl >=0.22.5,<1.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libpng >=1.6.50,<1.7.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libpng >=1.6.58,<1.7.0a0 - libtiff >=4.7.1,<4.8.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LGPL-2.1-or-later license_family: LGPL - size: 573466 - timestamp: 1761082560321 -- conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.5-h1f5b9c4_1.conda - sha256: 82c725a67098c7c43dfc33ba292a48e68530135b94a8703f20566d90574acdfd - md5: 4059b4975e2de5894286dbe6bd6728fb + size: 579329 + timestamp: 1782591520147 +- conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.88.2-h395db07_0.conda + sha256: b67107959a71dbf9f5c2e95511f18095d9ac6f0001f0de4a1b6e14282162989e + md5: 7d203837b88a2255b32dca555d37ca50 depends: - - libglib >=2.86.4,<3.0a0 - - libintl >=0.22.5,<1.0a0 - - libjpeg-turbo >=3.1.2,<4.0a0 - - liblzma >=5.8.2,<6.0a0 - - libpng >=1.6.55,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - ucrt >=10.0.20348.0 + - python * + - packaging + - libglib ==2.88.2 h7ce1215_0 + - glib-tools ==2.88.2 h74ecf4c_0 + - libintl-devel - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libintl >=0.22.5,<1.0a0 license: LGPL-2.1-or-later - license_family: LGPL - size: 574950 - timestamp: 1771530717329 -- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.1.0-hfd11570_0.conda - sha256: 595c87f69145f8228202578d45b876ae9befbd941e0f551c586f7230a86789d4 - md5: 67ad188ef4f3311ff3d447a698a03a0d + size: 75973 + timestamp: 1782463965040 +- conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.88.2-h74ecf4c_0.conda + sha256: c604b6ca42c6271f281b1c0616e0d50bd800f8fc913a91a2753c2551b3b6b16c + md5: 63c615f0c525ee64f72e557e583b6257 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 - license: BSD-3-Clause - license_family: BSD - size: 1312583 - timestamp: 1764720535916 -- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.2.0-h96af755_1.conda - sha256: 88a5ad3571948bde22957d08ab01328b8a7eb04fdee66268b3125cc322dbde8b - md5: ba5b655d827f263090ad2dc514810328 + - libglib ==2.88.2 h7ce1215_0 + - libffi + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libintl >=0.22.5,<1.0a0 + license: LGPL-2.1-or-later + size: 251644 + timestamp: 1782463965040 +- conda: https://conda.anaconda.org/conda-forge/linux-64/glslang-16.3.0-h96af755_0.conda + sha256: 3c9b6a90937a96ad27d160304cdbe5e9961db613aba2b84ff673429f0c61d48e + md5: d175cb2c14104728ada04883786a309d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -5310,45 +5261,22 @@ packages: - spirv-tools >=2026,<2027.0a0 license: BSD-3-Clause license_family: BSD - size: 1353008 - timestamp: 1770195199411 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.1.0-hd1da3a6_0.conda - sha256: 1c26a898409377b4dcd0d5e26c2a5735b0178b2adcc543aeef3550d4e56a08ea - md5: 4b5eeb76eee40ba958b8f2e97088aaa7 - depends: - - libgcc >=14 - - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 - license: BSD-3-Clause - license_family: BSD - size: 1308404 - timestamp: 1764720598114 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.2.0-h124e036_1.conda - sha256: a1c0db6c226b9d80e74bdd49f604eece637489c8c71e6ae63ada8db9e2359944 - md5: 3ead7f968b529f76f972621558ed2f68 + size: 1366082 + timestamp: 1777747028121 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/glslang-16.3.0-h124e036_0.conda + sha256: bae4806f4076cf9f91089fbeae7c9357ce4348df3657c25b249ac4487beed230 + md5: c0045dffcc3660ecd1b9123df377796f depends: - libgcc >=14 - libstdcxx >=14 - spirv-tools >=2026,<2027.0a0 license: BSD-3-Clause license_family: BSD - size: 1348415 - timestamp: 1770195275881 -- conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.1.0-h5b34520_0.conda - sha256: ab8cca5c5b8aba98f83d8732a3fca71a246a05525d00dce7e528089348cd64ec - md5: e3cf749f8cc50a6e636fb90c9d4f0c58 - depends: - - spirv-tools >=2025,<2026.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-3-Clause - license_family: BSD - size: 6241332 - timestamp: 1764720816129 -- conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.2.0-h294ba9c_1.conda - sha256: c46afa4a43b7709e07a69d0a2d70b10f59f22e96dbf9ec80e53a42cc6551111c - md5: 4b5f576265df0a05d4e47e48c50bb4e6 + size: 1359428 + timestamp: 1777747105441 +- conda: https://conda.anaconda.org/conda-forge/win-64/glslang-16.3.0-h294ba9c_0.conda + sha256: d80276b89d8aeab6ff0d8d7d4b9af336b368fc0b8fa28ea8cde6f6f2aa07bacf + md5: 7d6fed8a6ebeeebd6362790e22e56bb3 depends: - spirv-tools >=2026,<2027.0a0 - ucrt >=10.0.20348.0 @@ -5356,8 +5284,8 @@ packages: - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD - size: 4929181 - timestamp: 1770195251565 + size: 5074630 + timestamp: 1777747167205 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda sha256: 309cf4f04fec0c31b6771a5809a1909b4b3154a2208f52351e1ada006f4c750c md5: c94a5994ef49749880a8139cf9afcbe1 @@ -5376,56 +5304,56 @@ packages: license: GPL-2.0-or-later OR LGPL-3.0-or-later size: 417323 timestamp: 1718980707330 -- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda - sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c - md5: 2cd94587f3a401ae05e03a6caf09539d +- conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda + sha256: 885fa7d1d7e2ad9ed0a700ee0d81ceb49de278253082d517959b22d6336eecce + md5: cf09e9fc938518e91d0706572cadf17a depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 license: LGPL-2.0-or-later license_family: LGPL - size: 99596 - timestamp: 1755102025473 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_2.conda - sha256: c9b1781fe329e0b77c5addd741e58600f50bef39321cae75eba72f2f381374b7 - md5: 4aa540e9541cc9d6581ab23ff2043f13 + size: 100054 + timestamp: 1780454302233 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.15-hfae3067_0.conda + sha256: 3e529c517a76a1f4497c51eeedeeb927d33f732dcdb48055a020a83eb3e4e95c + md5: 4db044857ab1d09b2e8f0013c65387c1 depends: - libgcc >=14 - libstdcxx >=14 license: LGPL-2.0-or-later license_family: LGPL - size: 102400 - timestamp: 1755102000043 -- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.14-hac47afa_2.conda - sha256: 5f1714b07252f885a62521b625898326ade6ca25fbc20727cfe9a88f68a54bfd - md5: b785694dd3ec77a011ccf0c24725382b + size: 103119 + timestamp: 1780455096710 +- conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda + sha256: 88b6601f8edae59834b59b521e293ff3b58361dc1603240f5a8328c24e6936ad + md5: ff9a9bfe791f56b0227597a7651a6af0 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LGPL-2.0-or-later license_family: LGPL - size: 96336 - timestamp: 1755102441729 -- conda: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.3.2-py312h8285ef7_0.conda - sha256: 03c8d065ef1e07053252412c541b5f1af70bc5fa2f974f129128d90fbdc47fe5 - md5: db6bba1610e5c4256d2892ec2997c425 + size: 97308 + timestamp: 1780454389458 +- conda: https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.5.3-py312h8285ef7_0.conda + sha256: 05737bdd9fb853712cf8eb78254c164ba0532f25b4e7ac1f2dfa316deafd7617 + md5: 314154aa48cbc025e5bb442ff8f25266 depends: - python - - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - python_abi 3.12.* *_cp312 license: MIT license_family: MIT purls: - - pkg:pypi/greenlet?source=hash-mapping - size: 253793 - timestamp: 1771658391409 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.3.2-py312hf55c4e8_0.conda - sha256: 0680f4359f6ae4eecd78f07f460b9bc284789df6859967d64a4eca0c25140b0b - md5: 2af59fcde8a95b7eb9f4f101ec3d3fcd + - pkg:pypi/greenlet?source=compressed-mapping + size: 266770 + timestamp: 1782524633116 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/greenlet-3.5.3-py312hf55c4e8_0.conda + sha256: 11e72ccb751760b79bc089462424de08ff7d8ae50783beb147752d7765e6b0b8 + md5: 3e52ffa31a05f99c1f63fe6c26d2cba9 depends: - python - libgcc >=14 @@ -5436,11 +5364,11 @@ packages: license_family: MIT purls: - pkg:pypi/greenlet?source=hash-mapping - size: 259597 - timestamp: 1771658392329 -- conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.3.2-py312ha1a9051_0.conda - sha256: cbc6f4c63c779f1b5fce7c22bb737c87daa14083134990c9673ef15ed0a85572 - md5: 0f200f3d8424d0ace61b9c2c0cfe99d4 + size: 270807 + timestamp: 1782524634026 +- conda: https://conda.anaconda.org/conda-forge/win-64/greenlet-3.5.3-py312ha1a9051_0.conda + sha256: 806ff227539efccc4209460dbd9c270591ff95c1c94cc052b263fb6e49aa9b7e + md5: ff42a2f2261fe3045335268428eabf86 depends: - python - vc >=14.3,<15 @@ -5451,140 +5379,74 @@ packages: license_family: MIT purls: - pkg:pypi/greenlet?source=hash-mapping - size: 235335 - timestamp: 1771658408666 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_16.conda - sha256: 850c1662b9fdfea118c7632f928adb4b9c4f2f3edce166fbce02bfb9633ead85 - md5: 7acc57b08553cf6f682c9b70e6fe6b8f - depends: - - gcc 15.2.0 h0dff253_16 - - gxx_impl_linux-64 15.2.0 hda75c37_16 - license: BSD-3-Clause - license_family: BSD - size: 28467 - timestamp: 1765257244273 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_18.conda - sha256: 2d0f5eb8b2dce1e799e5bd70e874d6dfc62bed76f3f6aef21eba711db8c1b95b - md5: d2858ce79166e9afc367bd064d73e112 - depends: - - gcc 15.2.0 h6f77f03_18 - - gxx_impl_linux-64 15.2.0 hda75c37_18 - license: BSD-3-Clause - license_family: BSD - size: 28723 - timestamp: 1771378698305 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_16.conda - sha256: 9cc1f68089e1ffd2a38999db424ea41dc25f1c00c09ddd4416a83e80564f2aef - md5: 1fe2507cac92f7b68a77ad8478a4be7a - depends: - - gcc 15.2.0 h24a549f_16 - - gxx_impl_linux-aarch64 15.2.0 h03e2352_16 - license: BSD-3-Clause - license_family: BSD - size: 28544 - timestamp: 1765257509084 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_18.conda - sha256: 98dbcbe55acce3bbd2a3f05d053f4b78530b44dc5595809d97c0c01315dd9df3 - md5: 838a8d3cc9ba3711bfcc831e64a19e1f + size: 247893 + timestamp: 1782524686478 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.2.0-h76987e4_19.conda + sha256: b00817919d7b2d68e3299031c5332855576ae086ac80032aa0a78b7f6f12dae4 + md5: 327876a856b3a45001cfb9a855efa65f depends: - - gcc 15.2.0 h24a549f_18 - - gxx_impl_linux-aarch64 15.2.0 h03e2352_18 + - gcc 15.2.0 h0dff253_19 + - gxx_impl_linux-64 15.2.0 hda75c37_19 license: BSD-3-Clause license_family: BSD - size: 28780 - timestamp: 1771378557194 -- conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_16.conda - sha256: f35ec06b150948f14e759a1b6eff930af02c70122707cd3d4d37f4d31f11098e - md5: 81c3675d46be2233a433eee4471bfbea + size: 28945 + timestamp: 1778269389494 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx-15.2.0-ha384071_19.conda + sha256: 23e75a54b9ff48563a3be38c1d17232cf3d95fcddc938852b33090aea6d22505 + md5: e528c6fa3071fcad03ba0e530217fbe9 depends: - - gcc 15.2.0 hd556455_16 - - gxx_impl_win-64 15.2.0 h22fd5bf_16 + - gcc 15.2.0 h24a549f_19 + - gxx_impl_linux-aarch64 15.2.0 h03e2352_19 license: BSD-3-Clause license_family: BSD - size: 823880 - timestamp: 1765260877461 -- conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_18.conda - sha256: e85f25cee7618096463f426ec4c6ddd7c93058ed71c94d894c17dcb3269d867e - md5: 882c461155d96001e0611b70ab620e9b + size: 29003 + timestamp: 1778269132414 +- conda: https://conda.anaconda.org/conda-forge/win-64/gxx-15.2.0-hf1b5d6d_19.conda + sha256: 53d60a36476fbe46f495f3d12b986a8e80d28367a05caccdb8d517a7309faf7c + md5: c03b67785fe6fd200ffb9caccde2be18 depends: - - gcc 15.2.0 hd556455_18 - - gxx_impl_win-64 15.2.0 h22fd5bf_18 + - gcc 15.2.0 h6123e3b_19 + - gxx_impl_win-64 15.2.0 h22fd5bf_19 license: BSD-3-Clause license_family: BSD - size: 824078 - timestamp: 1771382638258 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_16.conda - sha256: 9ea9ec1595e163adb7d86828f638c70b7ff0b809093e34b1bee858bf0c80589a - md5: 779495181670ef15f80c3e33eea6f61a + size: 824523 + timestamp: 1778273529902 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_19.conda + sha256: 3f5288346b9fe233352443b3c2e31f1fde845e39d3e96475fc05ec2e782af158 + md5: 9d41f3899b512199af0a4bb939b83e21 depends: - - gcc_impl_linux-64 15.2.0 hc5723f1_16 - - libstdcxx-devel_linux-64 15.2.0 hd446a21_116 - - sysroot_linux-64 - - tzdata - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 16357678 - timestamp: 1765257161133 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.2.0-hda75c37_18.conda - sha256: 48946f1f43d699b68123fb39329ef5acf3d9cbf8f96bdb8fb14b6197f5402825 - md5: e39123ab71f2e4cf989aa6aa5fafdaaf - depends: - - gcc_impl_linux-64 15.2.0 he420e7e_18 - - libstdcxx-devel_linux-64 15.2.0 hd446a21_118 + - gcc_impl_linux-64 15.2.0 he0086c7_19 + - libstdcxx-devel_linux-64 15.2.0 hd446a21_119 - sysroot_linux-64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 15587873 - timestamp: 1771378609722 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_16.conda - sha256: 64eb3ff50a4c5a3f85c62aeb289d897a411ef5f5fdd5784dede18f52426155c2 - md5: f1f0e9c2459ee137fd2d0280f08d7e93 - depends: - - gcc_impl_linux-aarch64 15.2.0 habb1d5c_16 - - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_116 + size: 16356816 + timestamp: 1778269332159 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_19.conda + sha256: afb0fc36b93539a8e43a8063c8d3e1b4bace38a5a0c3c9e1978c72792d633c62 + md5: 7214ae8a8aade7b48a2bfd8bbb4d9e79 + depends: + - gcc_impl_linux-aarch64 15.2.0 h3530432_19 + - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_119 - sysroot_linux-aarch64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 14627102 - timestamp: 1765257416069 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/gxx_impl_linux-aarch64-15.2.0-h03e2352_18.conda - sha256: 1f3a0ce17bd6f9549fbbb154f18b06af705d5cb6acc876b21cd9a538e501ff82 - md5: d2b287619afd562f882f2fccfd0be03a - depends: - - gcc_impl_linux-aarch64 15.2.0 hcedddb3_18 - - libstdcxx-devel_linux-aarch64 15.2.0 ha7b1723_118 - - sysroot_linux-aarch64 - - tzdata - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 15371317 - timestamp: 1771378487467 -- conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_16.conda - sha256: c9f210fb9b5d36b874530d050e29dad1b2bbb1c55e1fcc8e48f25a7043cad3a7 - md5: 5bdc82063e89a2158d9ee8cb70d746dd - depends: - - gcc_impl_win-64 15.2.0 h79c4613_16 - - libstdcxx-devel_win-64 15.2.0 h0a72980_116 - - m2w64-sysroot_win-64 - - tzdata - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 14533037 - timestamp: 1765260794852 -- conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_18.conda - sha256: 55a524b1910bf26952d08aeb89b0496d423110378e991b5ff6ef2c662b884760 - md5: 88379befc88f4efb16733dae4b96dac4 - depends: - - gcc_impl_win-64 15.2.0 ha526d7c_18 - - libstdcxx-devel_win-64 15.2.0 h0a72980_118 + size: 14640001 + timestamp: 1778269082840 +- conda: https://conda.anaconda.org/conda-forge/win-64/gxx_impl_win-64-15.2.0-h22fd5bf_19.conda + sha256: 2f3b16794653b12a4aebe9e8073f51dd5f8ff1c82b40585434d1a7f32ff0a558 + md5: 816b9049907b42a6a4ec655aebe67d3c + depends: + - gcc_impl_win-64 15.2.0 h062b9a2_19 + - libstdcxx-devel_win-64 15.2.0 h0a72980_119 - m2w64-sysroot_win-64 - tzdata license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 14533744 - timestamp: 1771382555150 + size: 14813951 + timestamp: 1778273408391 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 @@ -5599,185 +5461,44 @@ packages: - pkg:pypi/h2?source=hash-mapping size: 95967 timestamp: 1756364871835 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.2.0-h15599e2_0.conda - sha256: 6bd8b22beb7d40562b2889dc68232c589ff0d11a5ad3addd41a8570d11f039d9 - md5: b8690f53007e9b5ee2c2178dd4ac778c - depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.7.1,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libglib >=2.86.1,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2411408 - timestamp: 1762372726141 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.3.0-h6083320_0.conda - sha256: eb0ff4632c76d5840ad8f509dc55694f79d9ac9bea5529944640e28e490361b0 - md5: 1ea5ed29aea252072b975a232b195146 - depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.1,<79.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libglib >=2.86.3,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2062122 - timestamp: 1766937132307 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.1.0-h6083320_0.conda - sha256: 08dc098dcc5c3445331a834f46602b927cb65d2768189f3f032a6e4643f15cd9 - md5: 5baf48da05855be929c5a50f4377794d - depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 - - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2615630 - timestamp: 1773217509651 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-12.2.0-he4899c9_0.conda - sha256: 5cfd74a3fbce0921af5beff93a3fe7edc5b1344d9b9668b2de1c1be932b54993 - md5: 1437bf9690976948f90175a65407b65f - depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.7.1,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libglib >=2.86.1,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2156041 - timestamp: 1762376447693 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-12.3.0-h1134a53_0.conda - sha256: c44b58ee4dc453469a1659c5e4c4fe306a0da65d4f7247e6df6de1cf4e607342 - md5: 60d635185d9c39e6c8dbd1771e6c7267 - depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.1,<79.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libgcc >=14 - - libglib >=2.86.3,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2454001 - timestamp: 1766941218362 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-13.1.0-h1134a53_0.conda - sha256: 49074457bdc624c0c0f39bb4b9b7689ec6334127ed7d5312484908f48e9a8e20 - md5: 811bb5384d92870a3492fab4de4ff3f6 - depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 - - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 2346492 - timestamp: 1773222371375 -- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-12.2.0-h5f2951f_0.conda - sha256: db73714c7f7e0c47b3b9db9302a83f2deb6f8d6081716d35710ef3c6756af6c3 - md5: e798ef748fc564e42f381d3d276850f0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.2.1-ha770c72_1.conda + sha256: 853beec89ff91cbbf630f1d305b69153eb28a3cb78af95ddc1fb4d30e524c6f4 + md5: 72e956a71241633d8c80aa198fd08784 depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=75.1,<76.0a0 - - libexpat >=2.7.1,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libglib >=2.86.1,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libharfbuzz-devel 14.2.1 h17a8019_1 license: MIT license_family: MIT - size: 1138900 - timestamp: 1762373626704 -- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-12.3.0-h5a1b470_0.conda - sha256: 158ebfb3ae932162e794da869505761d2d32677a3b80377abef1a3e3499d0c61 - md5: 0eb57e84ceeb62c0189827fe7966bdc5 + size: 11039 + timestamp: 1782800611635 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-14.2.1-h8af1aa0_1.conda + sha256: 57b157674ecee4d16e2873a3624095b4ed1859ce8c574b161e0d9c1723788733 + md5: 41198d1dd71d97c1507e6bd17edd10c7 depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.1,<79.0a0 - - libexpat >=2.7.3,<3.0a0 - - libfreetype >=2.14.1 - - libfreetype6 >=2.14.1 - - libglib >=2.86.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libharfbuzz-devel 14.2.1 h3a99ef3_1 license: MIT license_family: MIT - size: 1143524 - timestamp: 1766937684751 -- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-13.1.0-h5a1b470_0.conda - sha256: 27acd845926048481a831b7321674b3f92accde49869fb95438f0a35ea89419b - md5: b3a4ff5d1e21d58090cd87060eb54c2d + size: 11079 + timestamp: 1782800518091 +- conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h57928b3_1.conda + sha256: c8bf564f2c415b82f056eff98b8967fb75c86821398998f20289397b5acf1ef7 + md5: e706de885f817f9832c56f1c9ad7ce71 depends: - - cairo >=1.18.4,<2.0a0 - - graphite2 >=1.3.14,<2.0a0 - - icu >=78.2,<79.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 - - libglib >=2.86.4,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - libharfbuzz-devel 14.2.1 h03b5201_1 license: MIT license_family: MIT - size: 1285640 - timestamp: 1773217788574 -- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba - md5: 0a802cb9888dd14eeefc611f05c40b6e + size: 11542 + timestamp: 1782801047786 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.2.0-pyhd8ed1ab_0.conda + sha256: fdcea5d7cb314485d3907192ef024c704311548c5b0cbeb390cd1951051e29d2 + md5: b395909221b9bd1df066e5930e18855b depends: - - python >=3.9 + - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/hpack?source=hash-mapping - size: 30731 - timestamp: 1737618390337 + - pkg:pypi/hpack?source=compressed-mapping + size: 32884 + timestamp: 1782283986153 - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyhd8ed1ab_2.conda sha256: 8027e436ad59e2a7392f6036392ef9d6c223798d8a1f4f12d5926362def02367 md5: cf25bfddbd3bc275f3d3f9936cee1dd3 @@ -5802,39 +5523,6 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - sha256: 71e750d509f5fa3421087ba88ef9a7b9be11c53174af3aa4d06aff4c18b38e8e - md5: 8b189310083baabfb622af68fd9d3ae3 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: MIT - license_family: MIT - size: 12129203 - timestamp: 1720853576813 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.1-h33c6efd_0.conda - sha256: 7d6463d0be5092b2ae8f2fad34dc84de83eab8bd44cc0d4be8931881c973c48f - md5: 518e9bbbc3e3486d6a4519192ba690f8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 12722920 - timestamp: 1766299101259 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 - md5: 186a18e3ba246eccfc7cff00cd19a870 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 12728445 - timestamp: 1767969922681 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a md5: c80d8a3b84358cb967fa81e7075fbc8a @@ -5844,39 +5532,8 @@ packages: - libstdcxx >=14 license: MIT license_family: MIT - purls: [] size: 12723451 timestamp: 1773822285671 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-75.1-hf9b3779_0.conda - sha256: 813298f2e54ef087dbfc9cc2e56e08ded41de65cff34c639cc8ba4e27e4540c9 - md5: 268203e8b983fddb6412b36f2024e75c - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: MIT - license_family: MIT - size: 12282786 - timestamp: 1720853454991 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.1-hb1525cb_0.conda - sha256: 550c581d08eefe420f9ed14148f1c1d59a3e33de78806a1b8d610d207d06374c - md5: 5eba836ceb0cccf969d9518ca884de2a - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 12835377 - timestamp: 1766304007889 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - sha256: dcbaa3042084ac58685e3ef4547e4c4be9d37dc52b92ea18581288af95e48b52 - md5: 998ee7d53e32f7ab57fc35707285527e - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 12851689 - timestamp: 1772208964788 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 md5: 546da38c2fa9efacf203e2ad3f987c59 @@ -5888,50 +5545,29 @@ packages: purls: [] size: 12837286 timestamp: 1773822650615 -- conda: https://conda.anaconda.org/conda-forge/win-64/icu-75.1-he0c23c2_0.conda - sha256: 1d04369a1860a1e9e371b9fc82dd0092b616adcf057d6c88371856669280e920 - md5: 8579b6bb8d18be7c0b27fb08adeeeb40 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: MIT - license_family: MIT - size: 14544252 - timestamp: 1720853966338 -- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.1-h637d24d_0.conda - sha256: bee083d5a0f05c380fcec1f30a71ef5518b23563aeb0a21f6b60b792645f9689 - md5: cb8048bed35ef01431184d6a88e46b3e - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - size: 13849749 - timestamp: 1766299627069 -- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.2-h637d24d_0.conda - sha256: 5a41fb28971342e293769fc968b3414253a2f8d9e30ed7c31517a15b4887246a - md5: 0ee3bb487600d5e71ab7d28951b2016a +- conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda + sha256: 1bda728d70a619731b278c859eda364146cb5b4b8c739a64da8128353d81d1c4 + md5: 0097b24800cb696915c3dbd1f5335d3f depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: MIT license_family: MIT - size: 13222158 - timestamp: 1767970128854 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 - md5: 53abe63df7e10a6ba605dc5f9f961d36 + size: 14954024 + timestamp: 1773822508646 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.18-pyhcf101f3_0.conda + sha256: c75632ea624aa450a394f570749420c5a2e0997d0216bc29d5d45b0f39df0426 + md5: 577b04680ae422adb86fc60d7b940659 depends: - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/idna?source=hash-mapping - size: 50721 - timestamp: 1760286526795 + - pkg:pypi/idna?source=compressed-mapping + size: 163869 + timestamp: 1781620148226 - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-2.0.0-pyhd8ed1ab_0.conda sha256: 5a047f9eac290e679b4e6f6f4cbfcc5acdfbf031a4f06824d4ddb590cdbb850b md5: 92617c2ba2847cca7a6ed813b6f4ab79 @@ -5943,20 +5579,9 @@ packages: - pkg:pypi/imagesize?source=hash-mapping size: 15729 timestamp: 1773752188889 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 - md5: 63ccfdc3a3ce25b027b8767eb722fca8 - depends: - - python >=3.9 - - zipp >=3.20 - - python - license: Apache-2.0 - license_family: APACHE - size: 34641 - timestamp: 1747934053147 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 - md5: 080594bf4493e6bae2607e65390c520a +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda + sha256: 43e2a5497cad1598ff88a3e69f69bc88b7b8f141fa63c60eab5db296317318b8 + md5: ffc17e785d64e12fc311af9184221839 depends: - python >=3.10 - zipp >=3.20 @@ -5965,33 +5590,33 @@ packages: license_family: APACHE purls: - pkg:pypi/importlib-metadata?source=compressed-mapping - size: 34387 - timestamp: 1773931568510 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.5.2-pyhd8ed1ab_0.conda - sha256: a99a3dafdfff2bb648d2b10637c704400295cb2ba6dc929e2d814870cf9f6ae5 - md5: e376ea42e9ae40f3278b0f79c9bf9826 + size: 34766 + timestamp: 1779714582554 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-resources-7.1.0-pyhd8ed1ab_0.conda + sha256: 6a2f86ef0965605d742b5b94229bf8b829258d0a9f640e3651901cc72ef9a0a5 + md5: e3bffa82b874f8b9a2631bddb3869529 depends: - - importlib_resources >=6.5.2,<6.5.3.0a0 - - python >=3.9 + - importlib_resources >=7.1.0,<7.1.1.0a0 + - python >=3.10 license: Apache-2.0 license_family: APACHE purls: [] - size: 9724 - timestamp: 1736252443859 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 - md5: c85c76dc67d75619a92f51dfbce06992 + size: 10354 + timestamp: 1776068852701 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-7.1.0-pyhd8ed1ab_0.conda + sha256: a563a51aa522998172838e867e6dedcf630bc45796e8612f5a1f6d73e9c8125a + md5: 0ba6225c279baf7ea9473a62ea0ec9ae depends: - - python >=3.9 + - python >=3.10 - zipp >=3.1.0 constrains: - - importlib-resources >=6.5.2,<6.5.3.0a0 + - importlib-resources >=7.1.0,<7.1.1.0a0 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/importlib-resources?source=hash-mapping - size: 33781 - timestamp: 1736252433366 + size: 34809 + timestamp: 1776068839274 - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda sha256: e1a9e3b1c8fe62dc3932a616c284b5d8cbe3124bbfbedcf4ce5c828cb166ee19 md5: 9614359868482abba1bd15ce465e3c42 @@ -6003,55 +5628,42 @@ packages: - pkg:pypi/iniconfig?source=hash-mapping size: 13387 timestamp: 1760831448842 -- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.9.0-hb700be7_0.conda - sha256: edad668db79c6c4899d46e1cd4a331f5d008f9ed8f7d2e39e1dfe1a2d81acec0 - md5: 26311c5112b5c713f472bdfbb5ec5aa3 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 1009795 - timestamp: 1765886047465 -- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-25.3.4-hecca717_0.conda - sha256: 286679d4c175e8db2d047be766d1629f1ea5828bff9fe7e6aac2e6f0fad2b427 - md5: 7ae2034a0e2e24eb07468f1a50cdf0bb +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-gmmlib-22.10.0-hb700be7_0.conda + sha256: bc231d69eb6663db0e09738fb916c5e5507147cf1ac60f364f964004e0b29bab + md5: 10909406c1b0e4b57f9f4f0eb0999af8 depends: - __glibc >=2.17,<3.0.a0 - - intel-gmmlib >=22.8.1,<23.0a0 - libgcc >=14 - libstdcxx >=14 - - libva >=2.22.0,<3.0a0 license: MIT license_family: MIT - size: 8424610 - timestamp: 1757591682198 -- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.4-hecca717_0.conda - sha256: 425388f6dcddf438d15ea5050656ba854aef9025712e61bafb23ed34aff22e88 - md5: 85e32c66a890d4eb25bbe95ae4747466 + size: 1013714 + timestamp: 1774422680665 +- conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda + sha256: 7cbd7fda22db70c64af64c9173434a4ede58e4f220bda52a044e469aa94c65cb + md5: aaf7c3db8c7c4533deb5449d3ba1c51f depends: - __glibc >=2.17,<3.0.a0 - - intel-gmmlib >=22.9.0,<23.0a0 + - intel-gmmlib >=22.10.0,<23.0a0 - libgcc >=14 - libstdcxx >=14 - libva >=2.23.0,<3.0a0 license: MIT license_family: MIT - size: 8783533 - timestamp: 1773230300873 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyh6dadd2b_1.conda - sha256: 9cdadaeef5abadca4113f92f5589db19f8b7df5e1b81cb0225f7024a3aedefa3 - md5: b3a7d5842f857414d9ae831a799444dd + size: 8782375 + timestamp: 1776080148587 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyh6dadd2b_0.conda + sha256: e3ff0b3d5db5c31830030406f50ac2c9a5c31b86f1c2cef87a6042f0a4c77eb7 + md5: dd5c51d5c42381ba4a2e0ce32e02ba17 depends: - __win - comm >=0.1.1 - debugpy >=1.6.5 - ipython >=7.23.1 - - jupyter_client >=8.8.0 + - jupyter_client >=8.9.0 - jupyter_core >=5.1,!=6.0.* - matplotlib-inline >=0.1 - - nest-asyncio >=1.4 + - nest-asyncio2 >=1.7.0 - packaging >=22 - psutil >=5.7 - python >=3.10 @@ -6065,20 +5677,20 @@ packages: license_family: BSD purls: - pkg:pypi/ipykernel?source=hash-mapping - size: 132382 - timestamp: 1770566174387 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.2.0-pyha191276_1.conda - sha256: b77ed58eb235e5ad80e742b03caeed4bbc2a2ef064cb9a2deee3b75dfae91b2a - md5: 8b267f517b81c13594ed68d646fd5dcb + size: 138046 + timestamp: 1781101760172 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-7.3.0-pyha191276_0.conda + sha256: 305ad9226363ff5f259c404dd9a7508183a2e150739b2adc43db7d817234da66 + md5: 2b47a10e4d98334f8171ff60aea05ff3 depends: - __linux - comm >=0.1.1 - debugpy >=1.6.5 - ipython >=7.23.1 - - jupyter_client >=8.8.0 + - jupyter_client >=8.9.0 - jupyter_core >=5.1,!=6.0.* - matplotlib-inline >=0.1 - - nest-asyncio >=1.4 + - nest-asyncio2 >=1.7.0 - packaging >=22 - psutil >=5.7 - python >=3.10 @@ -6091,53 +5703,57 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/ipykernel?source=hash-mapping - size: 133644 - timestamp: 1770566133040 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhccfa634_0.conda - sha256: a0d3e4c8e4d7b3801377a03de32951f68d77dd1bfe25082c7915f4e6b0aaa463 - md5: 3734e3b6618ea6e04ad08678d8ed7a45 + - pkg:pypi/ipykernel?source=compressed-mapping + size: 138635 + timestamp: 1781101665847 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.15.0-pyh53cf698_0.conda + sha256: d9fa14ec35119901bf702a9a3e8a5570daef2aada7d03878e4c24d9de912302b + md5: 2f4ea7f616b30363d8dde5cc15e7af2e depends: - - __win + - __unix - decorator >=5.1.0 - ipython_pygments_lexers >=1.0.0 - jedi >=0.18.2 - matplotlib-inline >=0.1.6 - prompt-toolkit >=3.0.41,<3.1.0 + - psutil >=7 - pygments >=2.14.0 - - python >=3.12 + - python >=3.11 - stack_data >=0.6.0 - traitlets >=5.13.0 - - colorama >=0.4.4 + - typing_extensions >=4.6 + - pexpect >4.6 - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/ipython?source=compressed-mapping - size: 648954 - timestamp: 1774610078420 -- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.12.0-pyhecfbec7_0.conda - sha256: 932044bd893f7adce6c9b384b96a72fd3804cc381e76789398c2fae900f21df7 - md5: b293210beb192c3024683bf6a998a0b8 + size: 658801 + timestamp: 1782482716877 +- conda: https://conda.anaconda.org/conda-forge/noarch/ipython-9.15.0-pyhe2676ad_0.conda + sha256: c3df12e766572060be653933aae5f6a09ccebfa86cff3b10b9b880ace29088d9 + md5: a4c278221ad4da75ba1637f8d230e658 depends: - - __unix + - __win - decorator >=5.1.0 - ipython_pygments_lexers >=1.0.0 - jedi >=0.18.2 - matplotlib-inline >=0.1.6 - prompt-toolkit >=3.0.41,<3.1.0 + - psutil >=7 - pygments >=2.14.0 - - python >=3.12 + - python >=3.11 - stack_data >=0.6.0 - traitlets >=5.13.0 - - pexpect >4.6 + - typing_extensions >=4.6 + - colorama >=0.4.4 - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/ipython?source=compressed-mapping - size: 649967 - timestamp: 1774609994657 + - pkg:pypi/ipython?source=hash-mapping + size: 657739 + timestamp: 1782482745122 - conda: https://conda.anaconda.org/conda-forge/noarch/ipython_pygments_lexers-1.1.1-pyhd8ed1ab_0.conda sha256: 894682a42a7d659ae12878dbcb274516a7031bbea9104e92f8e88c1f2765a104 md5: bd80ba060603cc228d9d81c257093119 @@ -6150,17 +5766,18 @@ packages: - pkg:pypi/ipython-pygments-lexers?source=hash-mapping size: 13993 timestamp: 1737123723464 -- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda - sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 - md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 +- conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.20.0-pyhcf101f3_0.conda + sha256: 744143551c1c7b528b82533fb641b9d7db20b2203abc4c2635c387fa6c089fc3 + md5: c2b3d37aa1411031126036ee76a8a861 depends: - - parso >=0.8.3,<0.9.0 - - python >=3.9 + - python >=3.10 + - parso >=0.8.6,<0.9.0 + - python license: Apache-2.0 AND MIT purls: - - pkg:pypi/jedi?source=hash-mapping - size: 843646 - timestamp: 1733300981994 + - pkg:pypi/jedi?source=compressed-mapping + size: 2715215 + timestamp: 1782251948616 - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b md5: 04558c96691bed63104678757beb4f8d @@ -6171,7 +5788,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/jinja2?source=compressed-mapping + - pkg:pypi/jinja2?source=hash-mapping size: 120685 timestamp: 1764517220861 - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.26.0-pyhcf101f3_0.conda @@ -6222,9 +5839,9 @@ packages: - pkg:pypi/jupyter-cache?source=hash-mapping size: 31236 timestamp: 1731777189586 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.8.0-pyhcf101f3_0.conda - sha256: e402bd119720862a33229624ec23645916a7d47f30e1711a4af9e005162b84f3 - md5: 8a3d6d0523f66cf004e563a50d9392b3 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.9.1-pyhcf101f3_0.conda + sha256: 48b18974cc93b2c0d2681563237034e521f51d1878f0bbc6a5a67ca31b1608a6 + md5: 49440e66df843bee2273937e8032ec43 depends: - jupyter_core >=5.1 - python >=3.10 @@ -6232,13 +5849,14 @@ packages: - pyzmq >=25.0 - tornado >=6.4.1 - traitlets >=5.3 + - typing_extensions >=4.13.0 - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/jupyter-client?source=compressed-mapping - size: 112785 - timestamp: 1767954655912 + size: 117954 + timestamp: 1781019994076 - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyh6dadd2b_0.conda sha256: ed709a6c25b731e01563521ef338b93986cd14b5bc17f35e9382000864872ccc md5: a8db462b01221e9f5135be466faeb3e0 @@ -6312,50 +5930,88 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 - md5: fb53fb07ce46a575c5d004bbc96032c2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda + sha256: e3488ea4a336f29e57de8f282bf40c0505cfc482e03004615e694b48e7d9c79f + md5: 7397e418cab519b8d789936cf2dde6f6 depends: - - __glibc >=2.17,<3.0.a0 - - keyutils >=1.6.3,<2.0a0 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - libgcc >=14 + - python - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 - license: MIT + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 77363 + timestamp: 1773067048780 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda + sha256: 06e4be177958444f4f047380656611cbc467e36d1e3318add141397ce4cc24ef + md5: cae18ed89f7f6dc0adc0aafe4c47bf3d + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 83264 + timestamp: 1773067330528 +- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda + sha256: 37cbc49fd7255532d09fb3bc9cc699554693e632fa90678a9b3d0ed12557d0d7 + md5: 0508c8dabeab91311e5c59b5e3f6d278 + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + license: BSD-3-Clause + license_family: BSD + size: 73330 + timestamp: 1773067062280 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda + sha256: 9b07046870772f28740e3f6149f09ff222843733087a33c5540b169c6289652d + md5: 54157a1c8c0bb70f62dd0b17fba7e7f2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.7,<4.0a0 + license: MIT license_family: MIT purls: [] - size: 1386730 - timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba - md5: d9ca108bd680ea86a963104b6b3e95ca + size: 1388990 + timestamp: 1781859420533 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda + sha256: b644718416a22b5d57c1194ea7207b7f8d33d6a2b42775763782d76cd7457aea + md5: 5fd2304064ef6199d1f91ec60ee7b820 depends: - keyutils >=1.6.3,<2.0a0 - libedit >=3.1.20250104,<3.2.0a0 - libedit >=3.1.20250104,<4.0a0 - libgcc >=14 - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 license: MIT license_family: MIT purls: [] - size: 1517436 - timestamp: 1769773395215 -- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h0ea6238_0.conda - sha256: eb60f1ad8b597bcf95dee11bc11fe71a8325bc1204cf51d2bb1f2120ffd77761 - md5: 4432f52dc0c8eb6a7a6abc00a037d93c + size: 1518484 + timestamp: 1781859412954 +- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda + sha256: c55745796e762ba9e817ab1fc0f21f1a049e202f90fa762df39578f37923f6c2 + md5: 00335c2c4a98656554771aaf6f1a7400 depends: - - openssl >=3.5.5,<4.0a0 + - openssl >=3.5.7,<4.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: MIT license_family: MIT purls: [] - size: 751055 - timestamp: 1769769688841 + size: 750320 + timestamp: 1781859644591 - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab md5: a8832b479f93521a9e7b5b743803be51 @@ -6385,144 +6041,78 @@ packages: license_family: LGPL size: 570583 timestamp: 1664996824680 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_104.conda - sha256: 9e191baf2426a19507f1d0a17be0fdb7aa155cdf0f61d5a09c808e0a69464312 - md5: a6abd2796fc332536735f68ba23f7901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda + sha256: 112b5b9462572d970f4abd2912f76a25ee7db158b1e7260163d91dd8a630db84 + md5: 8b3ce45e929cd8e8e5f4d18586b56d8b depends: - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 725545 - timestamp: 1764007826689 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda - sha256: 1027bd8aa0d5144e954e426ab6218fd5c14e54a98f571985675468b339c808ca - md5: 3ec0aa5037d39b06554109a01e6fb0c6 + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + size: 251971 + timestamp: 1780211695895 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda + sha256: ed213207bbf11663181941e0931caa9ce748f0544688e8e0fbcf330bca279389 + md5: 9183fda4be2b4ee5760cdb8e540439c8 depends: - - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 730831 - timestamp: 1766513089214 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 - md5: 12bd9a3f089ee6c9266a37dab82afabd + - libgcc >=14 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + license: MIT + license_family: MIT + size: 296564 + timestamp: 1780211834883 +- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda + sha256: 5ed63a32639a130564a870becb679fd52dfb816666a61ed3c023917389010480 + md5: 1df4012c8a2478699d07bc26af66d41e depends: - - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45.1 - license: GPL-3.0-only - license_family: GPL - size: 725507 - timestamp: 1770267139900 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c - md5: 18335a698559cdbcd86150a48bf54ba6 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 523194 + timestamp: 1780211799997 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.46.1-default_hbd61a6d_102.conda + sha256: 27d83f1188cd19bcb7754a078b3fa7f4cfb8527f8eb2fde54dd01fc529d1adec + md5: 449500f2c089da11c40f5c21312e3e07 depends: - __glibc >=2.17,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 constrains: - - binutils_impl_linux-64 2.45.1 + - binutils_impl_linux-64 2.46.1 license: GPL-3.0-only license_family: GPL purls: [] - size: 728002 - timestamp: 1774197446916 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_104.conda - sha256: 7a13072581fa23f658a04f62f62c4677c57d3c9696fbc01cc954a88fc354b44d - md5: 28035705fe0c977ea33963489cd008ad - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-aarch64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 875534 - timestamp: 1764007911054 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda - sha256: 12e7341b89e9ea319a3b4de03d02cd988fa02b8a678f4e46779515009b5e475c - md5: 849c4cbbf8dd1d71e66c13afed1d2f12 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-aarch64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 876257 - timestamp: 1766513180236 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 - md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-aarch64 2.45.1 - license: GPL-3.0-only - license_family: GPL - size: 875924 - timestamp: 1770267209884 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 - md5: a21644fc4a83da26452a718dc9468d5f + size: 745303 + timestamp: 1784214507189 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.46.1-default_h1979696_102.conda + sha256: 2c4901f4227b0850328ed0c69f958b30ad2cd18982f7a31c7c1f911827004d08 + md5: 489444d0acb2a579d2a002d85a08c059 depends: - zstd >=1.5.7,<1.6.0a0 constrains: - - binutils_impl_linux-aarch64 2.45.1 + - binutils_impl_linux-aarch64 2.46.1 license: GPL-3.0-only license_family: GPL purls: [] - size: 875596 - timestamp: 1774197520746 -- conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45-default_hfd38196_104.conda - sha256: 14f0c7487f0567ce4e0af3a4f0c4378597d0db4798b0786d6acc8d9498c8ed5a - md5: 53e0006599159c099d051eaa08316403 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_win-64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 876777 - timestamp: 1764007762541 -- conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45-default_hfd38196_105.conda - sha256: fd7827e813bdb1f255cedf1e9d003c8be431c52f455a74d1455527e688a6b34b - md5: cd7c6627fc038d00421f9d2970587fa9 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_win-64 2.45 - license: GPL-3.0-only - license_family: GPL - size: 876611 - timestamp: 1766513627408 -- conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.45.1-default_hfd38196_101.conda - sha256: 6e0294b26a796436c0e449cc55d45ec518904c6e666ca882a74000407f25aed5 - md5: 6e84306d2deb7e69d0bc90a6b36d5ebb + size: 905305 + timestamp: 1784214534868 +- conda: https://conda.anaconda.org/conda-forge/win-64/ld_impl_win-64-2.46.1-default_hfd38196_102.conda + sha256: e3cb27be096acab3c8d5ed36961e291e3e6e9c2323dd3fd565623a4c093e931c + md5: 179ed4e90a5c9560bebb28292a726f12 depends: - zstd >=1.5.7,<1.6.0a0 constrains: - - binutils_impl_win-64 2.45.1 + - binutils_impl_win-64 2.46.1 license: GPL-3.0-only license_family: GPL - size: 876736 - timestamp: 1770267709635 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda - sha256: 412381a43d5ff9bbed82cd52a0bbca5b90623f62e41007c9c42d3870c60945ff - md5: 9344155d33912347b37f0ae6c410a835 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: Apache - size: 264243 - timestamp: 1745264221534 + size: 896485 + timestamp: 1784214548635 - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.1.0-hdb68285_0.conda sha256: f84cb54782f7e9cea95e810ea8fef186e0652d0fa73d3009914fa2c1262594e1 md5: a752488c68f2e7c456bcbd8f16eec275 @@ -6534,16 +6124,6 @@ packages: license_family: Apache size: 261513 timestamp: 1773113328888 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda - sha256: f01df5bbf97783fac9b89be602b4d02f94353f5221acfd80c424ec1c9a8d276c - md5: 60dceb7e876f4d74a9cbd42bbbc6b9cf - depends: - - libgcc >=13 - - libstdcxx >=13 - license: Apache-2.0 - license_family: Apache - size: 227184 - timestamp: 1745265544057 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.1.0-h52b7260_0.conda sha256: 8957fd460c1c132c8031f65fd5f56ec3807fd71b7cab2c5e2b0937b13404ab36 md5: d13423b06447113a90b5b1366d4da171 @@ -6554,17 +6134,6 @@ packages: license_family: Apache size: 240444 timestamp: 1773114901155 -- conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h6470a55_1.conda - sha256: 868a3dff758cc676fa1286d3f36c3e0101cca56730f7be531ab84dc91ec58e9d - md5: c1b81da6d29a14b542da14a36c9fbf3f - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: Apache-2.0 - license_family: Apache - size: 164701 - timestamp: 1745264384716 - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda sha256: 45df58fca800b552b17c3914cc9ab0d55a82c5172d72b5c44a59c710c06c5473 md5: 54b231d595bc1ff9bff668dd443ee012 @@ -6576,227 +6145,129 @@ packages: license_family: Apache size: 172395 timestamp: 1773113455582 -- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.26.2-hb700be7_0.conda - sha256: 1a756a2b8d58d2789223bc63971ffef714a8d5fadeb565dd82239c2395fbc858 - md5: c0fd9999cacbe6c0156459080635b2d6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 667315 - timestamp: 1765910088541 -- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.26.3-hb700be7_0.conda - sha256: 5dfff8a79f1e6433d84ea924ef71ae472980c2e7248c44e6e171c4eaa4db5c68 - md5: 8dea0df062e53c80274a09150f0c2941 +- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.29.0-hb700be7_0.conda + sha256: d87cfc5eaa08eefff97d891ecb49faa958fcfc32a425767796269c4100d4e516 + md5: f3c3bc77c96af553f761af0e78bc8d9d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT - size: 667437 - timestamp: 1766226025812 -- conda: https://conda.anaconda.org/conda-forge/linux-64/level-zero-1.28.2-hb700be7_0.conda - sha256: 5384380213daffbd7fe4d568b2cf2ab9f2476f7a5f228a3d70280e98333eaf0f - md5: 4323e07abff8366503b97a0f17924b76 + size: 875773 + timestamp: 1780142086148 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260526.0-cxx17_h7b12aa8_1.conda + sha256: 32933de2d4fa6e6ffd949052815b49cb65a0649ad70007155c533ab97ea8cefd + md5: c4393db381bffa0a83a8d9e47b238106 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - license: MIT - license_family: MIT - size: 858387 - timestamp: 1772045965844 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20250512.1-cxx17_hba17884_0.conda - sha256: dcd1429a1782864c452057a6c5bc1860f2b637dc20a2b7e6eacd57395bbceff8 - md5: 83b160d4da3e1e847bf044997621ed63 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 constrains: - - libabseil-static =20250512.1=cxx17* - - abseil-cpp =20250512.1 + - abseil-cpp =20260526.0 + - libabseil-static =20260526.0=cxx17* license: Apache-2.0 license_family: Apache - size: 1310612 - timestamp: 1750194198254 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239 - md5: 6f7b4302263347698fd24565fbf11310 + size: 1437712 + timestamp: 1780524559298 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260526.0-cxx17_h6983b43_1.conda + sha256: 51f53ae6266889f0972a10c2773465da5554fdf55ac15b9dea3e7f77520022d9 + md5: d8637f7cc7143fe4ad2eceac8e8cf033 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 constrains: - - libabseil-static =20260107.1=cxx17* - - abseil-cpp =20260107.1 - license: Apache-2.0 - license_family: Apache - size: 1384817 - timestamp: 1770863194876 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20250512.1-cxx17_h201e9ed_0.conda - sha256: 28bb0a5f3177bb3b45a89d309b93bef65645671d1c97ae7bbcfa74481bf33f3c - md5: 4db30fe7ba05e2ce66595ed646064861 - depends: - - libgcc >=13 - - libstdcxx >=13 - constrains: - - abseil-cpp =20250512.1 - - libabseil-static =20250512.1=cxx17* + - abseil-cpp =20260526.0 + - libabseil-static =20260526.0=cxx17* license: Apache-2.0 license_family: Apache - size: 1327580 - timestamp: 1750194149128 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libabseil-20260107.1-cxx17_h6983b43_0.conda - sha256: 37675140819e10235a8ff342cb09f688f843ac390b64856d8e230700bbd7d5aa - md5: 2a19160c13e688710dd200812fc9a6d3 + size: 1457025 + timestamp: 1780524543286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.5-h434b012_0.conda + sha256: 24d4b59a0267e1c159c3af82df106b42faeefccceba3c489044c93abf113c503 + md5: c1cb4d6e8a6e3f724740dee5346fc8b4 depends: - libgcc >=14 - - libstdcxx >=14 - constrains: - - abseil-cpp =20260107.1 - - libabseil-static =20260107.1=cxx17* - license: Apache-2.0 - license_family: Apache - size: 1401836 - timestamp: 1770863223557 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libass-0.17.4-h96ad9f0_0.conda - sha256: 035eb8b54e03e72e42ef707420f9979c7427776ea99e0f1e3c969f92eb573f19 - md5: d3be7b2870bf7aff45b12ea53165babd - depends: - - libgcc >=13 - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - fribidi >=1.0.10,<2.0a0 - - libiconv >=1.18,<2.0a0 - - fontconfig >=2.15.0,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libzlib >=1.3.2,<2.0a0 + - fribidi >=1.0.16,<2.0a0 + - fontconfig >=2.18.1,<3.0a0 - fonts-conda-ecosystem - - harfbuzz >=11.0.1 + - libiconv >=1.18,<2.0a0 + - harfbuzz >=14.2.1 license: ISC - size: 152179 - timestamp: 1749328931930 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.4-hcfe818d_0.conda - sha256: cb19ad0b8f9cb469c78d26af9c49c790e5f746bb8a348ec10b681a98f05d1dc7 - md5: 8df67d209c9f7e8d40281a4ebf8ffd6d + size: 154964 + timestamp: 1782298715788 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libass-0.17.5-hac26362_0.conda + sha256: e6029ed8232ea197f54ffffb7701b85ae1ee2850d44699d9554fadb95c578bd7 + md5: 00b2bb0ddef69e0fe6d42aff08abeaec depends: - - libgcc >=13 - - libiconv >=1.18,<2.0a0 - - harfbuzz >=11.0.1 - - fontconfig >=2.15.0,<3.0a0 + - libgcc >=14 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - fontconfig >=2.18.1,<3.0a0 - fonts-conda-ecosystem - - fribidi >=1.0.10,<2.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - libzlib >=1.3.1,<2.0a0 + - fribidi >=1.0.16,<2.0a0 + - libiconv >=1.18,<2.0a0 + - harfbuzz >=14.2.1 + - libzlib >=1.3.2,<2.0a0 license: ISC - size: 171287 - timestamp: 1749328949722 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - build_number: 5 - sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c - md5: c160954f7418d7b6e87eaf05a8913fa9 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - liblapack 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18213 - timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - build_number: 6 - sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 - md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e + size: 178938 + timestamp: 1782298717792 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_h4a7cf45_openblas.conda + build_number: 8 + sha256: b2da6bfd72a1c9cb143ccf64bf5b28790cb4eb58bd1cb978f6537b2322f7d48b + md5: 00fc660ab1b2f5ca07e92b4900d10c79 depends: - - libopenblas >=0.3.32,<0.3.33.0a0 - - libopenblas >=0.3.32,<1.0a0 + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas - - mkl <2026 + - blas 2.308 openblas + - mkl <2027 + - libcblas 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18621 - timestamp: 1774503034895 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - build_number: 5 - sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 - md5: 5afcea37a46f76ec1322943b3c4dfdc0 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - size: 18369 - timestamp: 1765818610617 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda - build_number: 6 - sha256: 7374c744c37786bfa4cfd30bbbad13469882e5d9f32ed792922b447b7e369554 - md5: 652bb20bb4618cacd11e17ae070f47ce + size: 18804 + timestamp: 1779859100675 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-8_haddc8a3_openblas.conda + build_number: 8 + sha256: c897399c943168c646f659952f73a9154f9122d7e9b151649dbe075dfdcd484b + md5: 8b44dad125760faa2b3925f5a6e3112d depends: - - libopenblas >=0.3.32,<0.3.33.0a0 - - libopenblas >=0.3.32,<1.0a0 + - libopenblas >=0.3.33,<0.3.34.0a0 + - libopenblas >=0.3.33,<1.0a0 constrains: - - blas 2.306 openblas - - mkl <2026 - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas + - libcblas 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas + - mkl <2027 + - blas 2.308 openblas + - liblapacke 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18682 - timestamp: 1774503047392 -- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-5_hf2e6a31_mkl.conda - build_number: 5 - sha256: f0cb7b2697461a306341f7ff32d5b361bb84f3e94478464c1e27ee01fc8f276b - md5: f9decf88743af85c9c9e05556a4c47c0 - depends: - - mkl >=2025.3.0,<2026.0a0 - constrains: - - liblapack 3.11.0 5*_mkl - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - - liblapacke 3.11.0 5*_mkl - license: BSD-3-Clause - license_family: BSD - size: 67438 - timestamp: 1765819100043 -- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-6_hf2e6a31_mkl.conda - build_number: 6 - sha256: 10c8054f007adca8c780cd8bb9335fa5d990f0494b825158d3157983a25b1ea2 - md5: 95543eec964b4a4a7ca3c4c9be481aa1 + size: 18843 + timestamp: 1779859042591 +- conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda + build_number: 8 + sha256: 43a87b59e6d4c68d80b2e4de487b1b54d66fe1f9a06636909b5a5ab9eae27269 + md5: 4a0ce24b1a946ff77ae9eaa7ef015a33 depends: - - mkl >=2025.3.1,<2026.0a0 + - mkl >=2026.0.0,<2027.0a0 constrains: - - blas 2.306 mkl - - liblapacke 3.11.0 6*_mkl - - liblapack 3.11.0 6*_mkl - - libcblas 3.11.0 6*_mkl + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 68082 - timestamp: 1774503684284 + size: 68103 + timestamp: 1779859688049 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e md5: 72c8fd1af66bd67bf580645b426513ed @@ -6893,135 +6364,135 @@ packages: license_family: MIT size: 252903 timestamp: 1764017901735 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-h3ff7636_0.conda - sha256: 9517cce5193144af0fcbf19b7bd67db0a329c2cc2618f28ffecaa921a1cbe9d3 - md5: 09c264d40c67b82b49a3f3b89037bd2e - depends: - - __glibc >=2.17,<3.0.a0 - - attr >=2.5.2,<2.6.0a0 - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - size: 121429 - timestamp: 1762349484074 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.77-hd0affe5_1.conda - sha256: 37c41b1024d0c75da76822e3c079aabaf121618a32fe05e53a897b35a88008fc - md5: 499cd8e2d4358986dbe3b30e8fe1bf6a +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda + sha256: cc8c9fc6ddf0fbd3d1275b558ae9abad6cda23bced268732e2da21a87bb358cd + md5: f9f17eab7f3df1c6fd4b1a548a2f683a depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 124432 - timestamp: 1774333989027 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-h68e9139_0.conda - sha256: 154eefd8f94010d89ba76a057949b9b1f75c7379bd0d19d4657c952bedcf5904 - md5: 10fe36ec0a9f7b1caae0331c9ba50f61 - depends: - - attr >=2.5.1,<2.6.0a0 - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - size: 108542 - timestamp: 1762350753349 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.77-hf9559e3_1.conda - sha256: e04f0c4287362ea2033421c1b516d7d83c308084bcc9483b2e6038ec7c711e0a - md5: bdda58ab0358b0e9ff45fd2503b38410 + size: 124335 + timestamp: 1775488792584 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda + sha256: 14b6654d942be7a68496d4e52d6aa4e217cf82005a42c20d1880eb473e34eb3a + md5: 1503ce9f8a3df149a33ccd7c300ec1d2 depends: - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 109458 - timestamp: 1774335293336 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - build_number: 5 - sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 - md5: 6636a2b6f1a87572df2970d3ebc87cc0 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapack 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18194 - timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - build_number: 6 - sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 - md5: 36ae340a916635b97ac8a0655ace2a35 + size: 109192 + timestamp: 1775490102029 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_h0358290_openblas.conda + build_number: 8 + sha256: 1a2bc77bb26520255904a3d9b1f40e6bf0bf9d8d3405c7709dd162282820915a + md5: 33a413f1095f8325e5c30fde3b0d2445 depends: - - libblas 3.11.0 6_h4a7cf45_openblas + - libblas 3.11.0 8_h4a7cf45_openblas constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas + - blas 2.308 openblas + - liblapacke 3.11.0 8*_openblas + - liblapack 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18622 - timestamp: 1774503050205 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - build_number: 5 - sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 - md5: 0b2f1143ae2d0aa4c991959d0daaf256 + size: 18778 + timestamp: 1779859107964 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda + build_number: 8 + sha256: 3ba039f0705022939d90e36c1ed2fcbafd7f5bb77563e3702202ae796b32f4d2 + md5: 76242b7ad6e43809afa8671dd609b4ed depends: - - libblas 3.11.0 5_haddc8a3_openblas + - libblas 3.11.0 8_haddc8a3_openblas constrains: - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas + - liblapack 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + - blas 2.308 openblas license: BSD-3-Clause license_family: BSD - size: 18371 - timestamp: 1765818618899 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda - build_number: 6 - sha256: 5dd9e872cf8ebd632f31cd3a5ca6d3cb331f4d3a90bfafbe572093afeb77632b - md5: 939e300b110db241a96a1bed438c315b + purls: [] + size: 18817 + timestamp: 1779859049133 +- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda + build_number: 8 + sha256: 2a5b6555b481df4603e44cba49a6ef727584fd2f3c5235dd4bcb3028fffbdfb5 + md5: 09f1d8e4d2675d34ad2acb115211d10c depends: - - libblas 3.11.0 6_haddc8a3_openblas + - libblas 3.11.0 8_h8455456_mkl constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl + - liblapack 3.11.0 8*_mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 18689 - timestamp: 1774503058069 -- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-5_h2a3cdd5_mkl.conda - build_number: 5 - sha256: 49dc59d8e58360920314b8d276dd80da7866a1484a9abae4ee2760bc68f3e68d - md5: b3fa8e8b55310ba8ef0060103afb02b5 + size: 68443 + timestamp: 1779859701498 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda + sha256: ccb8bd0a8f2d57675b6a60dabb0cc8becb35c2748ac4ec920d7f7625b93c16d8 + md5: 864e6d29ec7378b89ff5b5c9c629099e depends: - - libblas 3.11.0 5_hf2e6a31_mkl - constrains: - - liblapack 3.11.0 5*_mkl - - liblapacke 3.11.0 5*_mkl - - blas 2.305 mkl - license: BSD-3-Clause - license_family: BSD - size: 68079 - timestamp: 1765819124349 -- conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-6_h2a3cdd5_mkl.conda - build_number: 6 - sha256: 02b2a2225f4899c6aaa1dc723e06b3f7a4903d2129988f91fc1527409b07b0a5 - md5: 9e4bf521c07f4d423cba9296b7927e3c + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 24175081 + timestamp: 1782358841320 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda + sha256: 16ff2afd00acf94320dcfacc7124bbb67ae542d48e5c5ac74627e8690df10dfa + md5: 483b80c996ae6e15317459ebd71d7033 depends: - - libblas 3.11.0 6_hf2e6a31_mkl - constrains: - - blas 2.306 mkl - - liblapacke 3.11.0 6*_mkl - - liblapack 3.11.0 6*_mkl - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 68221 - timestamp: 1774503722413 + - libstdcxx >=14 + - libgcc >=14 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 24213552 + timestamp: 1782358853037 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda + sha256: b90ed8467a692788477c06bc0359fac52ed5651d801ddef189ba4b7ecf3ce38c + md5: 2a913525f4201f1adab2711fcf6f89b3 + depends: + - libclang-cpp22.1 ==22.1.8 default_h6c227bf_3 + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 14283567 + timestamp: 1782358841320 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda + sha256: ef4c63c93751dd2582c4f72d9558faaec68eb26d149406373d5af8e509008c48 + md5: baa5eb601eacb3cc438aad5b343d9b61 + depends: + - libclang-cpp22.1 ==22.1.8 default_h0cc847a_3 + - libstdcxx >=14 + - libgcc >=14 + - libllvm22 >=22.1.8,<22.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 14311328 + timestamp: 1782358853037 +- conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda + sha256: 34a25466769d1233d8f36a78d5f9f40279bae3fc4b70852acbd04b159ac4d183 + md5: c45c5a60b68368f62415941c1d9f0ab7 + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libzlib >=1.3.2,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + size: 34917944 + timestamp: 1782358781159 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.14.1.1-hbc026e6_1.conda sha256: 5fa43e8a8d335fc0c3a6aeb2e7b0debc7d8495b8a60a56ac30f23b0e852ab74a md5: cab1818eada3952ed09c8dcbb7c26af7 @@ -7034,19 +6505,19 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 969845 timestamp: 1761098818759 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.0.66-h85c024f_0.conda - sha256: aa2ce3784f756fabde147be6dc606f93a6e6be5e0a146697b57454e9f4adc264 - md5: f760d9e2103a43d25f930cd3706c0cab +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda + sha256: 72b9c44d6d33c6d384ddaef755e717c781782cbcb32cfba454a8d8084f02ac55 + md5: 434bbefad502f7a9f7eaf7558c645d75 depends: - __glibc >=2.28,<3.0.a0 - cuda-version >=13.3,<13.4.0a0 - libgcc >=14 - libstdcxx >=14 - - rdma-core >=61.0 + - rdma-core >=63.0 license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 1115061 - timestamp: 1779897561291 + size: 1117538 + timestamp: 1782772352403 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.14.1.1-had8bf56_1.conda sha256: fbc1fa6b3ddf946b2999c9820310682739505df71e1e2ac513a72efb951fa3e5 md5: ee136db5a5409dddc78eaf7658fccffe @@ -7060,22 +6531,47 @@ packages: license: LicenseRef-NVIDIA-End-User-License-Agreement size: 909365 timestamp: 1761098964619 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.0.66-h4243460_0.conda - sha256: 46bd414aaac6274db9118965459a173f8339529c6d0fda53d2e167579cee1ce0 - md5: cc1766bf438c27f357c37bf0869686f1 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda + sha256: 71af687b188c5028d0788d7916adb3f80568d766bf3380b71b600f246d1b9021 + md5: 547968e609a6c1f038fd18a318f3268c depends: - __glibc >=2.28,<3.0.a0 - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 - libgcc >=14 - libstdcxx >=14 - - rdma-core >=61.0 + - rdma-core >=63.0 constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement purls: [] - size: 998160 - timestamp: 1779897582676 + size: 997204 + timestamp: 1782772368681 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda + sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c + md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + size: 4518030 + timestamp: 1770902209173 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda + sha256: 41b04f995c9f63af8c4065a35931e46cbc2fdd6b9bf7e4c19f90d53cbb2bc8e5 + md5: 67828c963b17db7dc989fe5d509ef04a + depends: + - krb5 >=1.22.2,<1.23.0a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + license: Apache-2.0 + license_family: Apache + size: 4553739 + timestamp: 1770903929794 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 md5: 6c77a605a7a689d17d4819c0f8ac9a00 @@ -7106,27 +6602,48 @@ packages: license_family: MIT size: 156818 timestamp: 1761979842440 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda - sha256: c076a213bd3676cc1ef22eeff91588826273513ccc6040d9bea68bccdc849501 - md5: 9314bc5a1fe7d1044dc9dfd3ef400535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.4.0-ha23c83e_0.conda + sha256: cea351b57c30d70e288b53ea69a1dcf6b750992f5d7717a7fc364072fa1209e7 + md5: 4377d220f09344452b227d699cacce4f + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + constrains: + - __glibc >=2.17 + license: MIT + size: 404998 + timestamp: 1784281566921 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdovi-3.4.0-hf71c8f5_0.conda + sha256: d12c0db93410085c827587352f05b24ba56ac786285752a4b2aba59309b09832 + md5: 318831d864fbd3a513d71bb0db5ff9e6 + depends: + - libgcc >=14 + constrains: + - __glibc >=2.17 + license: MIT + size: 408693 + timestamp: 1784281571706 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda + sha256: 7d3187c11b7ae66c5595a8afd5a7ce352a490527fdf6614cab129bc7f2c16ba3 + md5: d8d16b9b32a3c5df7e5b3350e2cbe058 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libpciaccess >=0.18,<0.19.0a0 + - libpciaccess >=0.19,<0.20.0a0 license: MIT license_family: MIT - size: 310785 - timestamp: 1757212153962 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.125-he30d5cf_1.conda - sha256: 4e6cdb5dd37db794b88bec714b4418a0435b04d14e9f7afc8cc32f2a3ced12f2 - md5: 2079727b538f6dd16f3fa579d4c3c53f + size: 311505 + timestamp: 1778975798004 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda + sha256: 2a941ffcd6b09380344c2cb5b198d2743ce4fc30ec9a5c8c83e53368d8015aef + md5: 987d35ad350bb552a30f3d314f6c7655 depends: - libgcc >=14 - - libpciaccess >=0.18,<0.19.0a0 + - libpciaccess >=0.19,<0.20.0a0 license: MIT license_family: MIT - size: 344548 - timestamp: 1757212128414 + size: 345283 + timestamp: 1778975814771 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -7152,158 +6669,97 @@ packages: purls: [] size: 148125 timestamp: 1738479808948 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda - sha256: 7fd5408d359d05a969133e47af580183fbf38e2235b562193d427bb9dad79723 - md5: c151d5eb730e9b7480e6d48c0fc44048 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda + sha256: 9a25ea93e8272785405a21d30f84e620befb1d545f6dfaae18f06103b5df0443 + md5: 75e9f795be506c96dd43cb09c7c8d557 depends: - __glibc >=2.17,<3.0.a0 - - libglvnd 1.7.0 ha4b6fd6_2 + - libglvnd 1.7.0 ha4b6fd6_3 license: LicenseRef-libglvnd - size: 44840 - timestamp: 1731330973553 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_2.conda - sha256: 8962abf38a58c235611ce356b9899f6caeb0352a8bce631b0bcc59352fda455e - md5: cf105bce884e4ef8c8ccdca9fe6695e7 + size: 46500 + timestamp: 1779728188901 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda + sha256: b987d3874edfcd9c7ddca86c003cb04ae51160a72c173a24cd46ab9eeb8886ab + md5: ec017f25e5d01ef9dd81e95ff73ff051 depends: - - libglvnd 1.7.0 hd24410f_2 + - libglvnd 1.7.0 hd24410f_3 license: LicenseRef-libglvnd - size: 53551 - timestamp: 1731330990477 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - sha256: 1e1b08f6211629cbc2efe7a5bca5953f8f6b3cae0eeb04ca4dacee1bd4e2db2f - md5: 8b09ae86839581147ef2e5c5e229d164 + size: 54600 + timestamp: 1779728234591 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda + sha256: e4b46919c9bb65930bce238bd2736110ed7b8c30e5cd5394e4e1edb48de54843 + md5: 5bc6d55503483aabe8a90c5e7f49a2a4 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - expat 2.7.3.* - license: MIT - license_family: MIT - size: 76643 - timestamp: 1763549731408 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 - md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 + - libegl 1.7.0 ha4b6fd6_3 + - libgl-devel 1.7.0 ha4b6fd6_3 + - xorg-libx11 + license: LicenseRef-libglvnd + size: 31718 + timestamp: 1779728222280 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda + sha256: 2b5ae66aa91215e915df3c520fed85a17231a067339b54f0594d93689b684c86 + md5: 8ebac3af4a69a9a41c16442a65bf3ac4 + depends: + - libegl 1.7.0 hd24410f_3 + - libgl-devel 1.7.0 hd24410f_3 + - xorg-libx11 + license: LicenseRef-libglvnd + size: 31552 + timestamp: 1779728260736 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda + sha256: 16feffd9ddbbe5b718515d38ee376c685ba95491cd901244e24671d20b952a77 + md5: b24d3c612f71e7aa74158d92106318b2 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - expat 2.7.4.* + - expat 2.8.1.* license: MIT license_family: MIT - size: 76798 - timestamp: 1771259418166 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c - md5: 49f570f3bc4c874a06ea69b7225753af + purls: [] + size: 77856 + timestamp: 1781203599810 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda + sha256: 20a5726bc8705d91437c9e6ef83b30da64a1719b869656d20a1ee818333ea5ac + md5: fac3b65a605cd253037fdf3daf2de8d9 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - expat 2.7.5.* + - expat 2.8.1.* license: MIT license_family: MIT purls: [] - size: 76624 - timestamp: 1774719175983 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - sha256: cc2581a78315418cc2e0bb2a273d37363203e79cefe78ba6d282fed546262239 - md5: b414e36fbb7ca122030276c75fa9c34a + size: 77649 + timestamp: 1781203572523 +- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda + sha256: 1a54d874addda73b6f7164d5f3905821277a1831bcc05edd74b3085391688571 + md5: ccc490c81ffe14181861beac0e8f3169 depends: - - libgcc >=14 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 constrains: - - expat 2.7.3.* + - expat 2.8.1.* license: MIT license_family: MIT - size: 76201 - timestamp: 1763549910086 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 - md5: 57f3b3da02a50a1be2a6fe847515417d + purls: [] + size: 71631 + timestamp: 1781203724164 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=14 - constrains: - - expat 2.7.4.* license: MIT license_family: MIT - size: 76564 - timestamp: 1771259530958 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - sha256: 6d438fc0bfdb263c24654fe49c09b31f06ec78eb709eb386392d2499af105f85 - md5: 05d1e0b30acd816a192c03dc6e164f4d - depends: - - libgcc >=14 - constrains: - - expat 2.7.5.* - license: MIT - license_family: MIT - purls: [] - size: 76523 - timestamp: 1774719129371 -- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda - sha256: 844ab708594bdfbd7b35e1a67c379861bcd180d6efe57b654f482ae2f7f5c21e - md5: 8c9e4f1a0e688eef2e95711178061a0f - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - expat 2.7.3.* - license: MIT - license_family: MIT - size: 70137 - timestamp: 1763550049107 -- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.4-hac47afa_0.conda - sha256: b31f6fb629c4e17885aaf2082fb30384156d16b48b264e454de4a06a313b533d - md5: 1c1ced969021592407f16ada4573586d - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT - size: 70323 - timestamp: 1771259521393 -- conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.5-hac47afa_0.conda - sha256: 6850c3a4d5dc215b86f58518cfb8752998533d6569b08da8df1da72e7c68e571 - md5: bfb43f52f13b7c56e7677aa7a8efdf0c - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - expat 2.7.5.* - license: MIT - license_family: MIT - purls: [] - size: 70609 - timestamp: 1774719377850 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 - md5: a360c33a5abe61c07959e449fa1453eb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 58592 - timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h9ec8514_0.conda - sha256: 25cbdfa65580cfab1b8d15ee90b4c9f1e0d72128f1661449c9a999d341377d54 - md5: 35f29eec58405aaf55e01cb470d8c26a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - size: 57821 - timestamp: 1760295480630 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 - md5: 2f364feefb6a7c00423e80dcb12db62a + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 + md5: 2f364feefb6a7c00423e80dcb12db62a depends: - libgcc >=14 license: MIT @@ -7311,15 +6767,6 @@ packages: purls: [] size: 55952 timestamp: 1769456078358 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-hd65408f_0.conda - sha256: 6c3332e78a975e092e54f87771611db81dcb5515a3847a3641021621de76caea - md5: 0c5ad486dcfb188885e3cf8ba209b97b - depends: - - libgcc >=14 - license: MIT - license_family: MIT - size: 55586 - timestamp: 1760295405021 - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda sha256: 59d01f2dfa8b77491b5888a5ab88ff4e1574c9359f7e229da254cdfe27ddc190 md5: 720b39f5ec0610457b725eb3f396219a @@ -7332,17 +6779,6 @@ packages: purls: [] size: 45831 timestamp: 1769456418774 -- conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda - sha256: ddff25aaa4f0aa535413f5d831b04073789522890a4d8626366e43ecde1534a3 - md5: ba4ad812d2afc22b9a34ce8327a0930f - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - size: 44866 - timestamp: 1760295760649 - conda: https://conda.anaconda.org/conda-forge/linux-64/libflac-1.5.0-he200343_1.conda sha256: e755e234236bdda3d265ae82e5b0581d259a9279e3e5b31d745dc43251ad64fb md5: 47595b9d53054907a00d95e4d47af1d6 @@ -7368,406 +6804,185 @@ packages: license_family: BSD size: 397272 timestamp: 1764526699497 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda - sha256: 4641d37faeb97cf8a121efafd6afd040904d4bca8c46798122f417c31d5dfbec - md5: f4084e4e6577797150f9b04a4560ceb0 - depends: - - libfreetype6 >=2.14.1 - license: GPL-2.0-only OR FTL - size: 7664 - timestamp: 1757945417134 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.2-ha770c72_0.conda - sha256: 2e1bfe1e856eb707d258f669ef6851af583ceaffab5e64821b503b0f7cd09e9e - md5: 26c746d14402a3b6c684d045b23b9437 - depends: - - libfreetype6 >=2.14.2 - license: GPL-2.0-only OR FTL - size: 8035 - timestamp: 1772757210108 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.1-h8af1aa0_0.conda - sha256: 342c07e4be3d09d04b531c889182a11a488e7e9ba4b75f642040e4681c1e9b98 - md5: 1e61fb236ccd3d6ccaf9e91cb2d7e12d - depends: - - libfreetype6 >=2.14.1 - license: GPL-2.0-only OR FTL - size: 7753 - timestamp: 1757945484817 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.2-h8af1aa0_0.conda - sha256: 23cdb94528bb4328b6f7550906dee5080952354445d8bd96241fa7d059c4af95 - md5: 93bce8dee6a0a4906331db294ec250fe - depends: - - libfreetype6 >=2.14.2 - license: GPL-2.0-only OR FTL - size: 8108 - timestamp: 1772756012710 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.1-h57928b3_0.conda - sha256: 2029702ec55e968ce18ec38cc8cf29f4c8c4989a0d51797164dab4f794349a64 - md5: 3235024fe48d4087721797ebd6c9d28c +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda + sha256: 38f014a7129e644636e46064ecd6b1945e729c2140e21d75bb476af39e692db2 + md5: e289f3d17880e44b633ba911d57a321b depends: - - libfreetype6 >=2.14.1 + - libfreetype6 >=2.14.3 license: GPL-2.0-only OR FTL - size: 8109 - timestamp: 1757946135015 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.2-h57928b3_0.conda - sha256: 427c3072b311e65bd3eae3fcb78f6847b15b2dbb173a8546424de56550b2abfb - md5: 153d52fd0e4ba2a5bd5bb4f4afa41417 + size: 8049 + timestamp: 1774298163029 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.14.3-h8af1aa0_1.conda + sha256: db75d0fc080992dc67db8e24d7bb2a2f2a0b25bfce8870fa45a82a4b5f6111a2 + md5: a13e600f9d18488b1fd1257344dbfdaa depends: - - libfreetype6 >=2.14.2 + - libfreetype6 >=2.14.3 license: GPL-2.0-only OR FTL - size: 8404 - timestamp: 1772756167212 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda - sha256: 4a7af818a3179fafb6c91111752954e29d3a2a950259c14a2fc7ba40a8b03652 - md5: 8e7251989bca326a28f4a5ffbd74557a + size: 8381 + timestamp: 1780933505754 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda + sha256: 035d0c67bf9f7a16f4a1764f420c120f1a995d071bb265fcc66ef688ef709d7b + md5: e45b52fb9a81c9e2708465a706e05952 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - freetype >=2.14.1 + - libfreetype6 >=2.14.3 license: GPL-2.0-only OR FTL - size: 386739 - timestamp: 1757945416744 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.2-h73754d4_0.conda - sha256: aba65b94bdbed52de17ec3d0c6f2ebac2ef77071ad22d6900d1614d0dd702a0c - md5: 8eaba3d1a4d7525c6814e861614457fd + size: 8711 + timestamp: 1780934891782 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.conda + sha256: 16f020f96da79db1863fcdd8f2b8f4f7d52f177dd4c58601e38e9182e91adf1d + md5: fb16b4b69e3f1dcfe79d80db8fd0c55d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libpng >=1.6.55,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - freetype >=2.14.2 + - freetype >=2.14.3 license: GPL-2.0-only OR FTL - size: 386316 - timestamp: 1772757193822 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.1-hdae7a39_0.conda - sha256: cedc83d9733363aca353872c3bfed2e188aa7caf57b57842ba0c6d2765652b7c - md5: 9c2f56b6e011c6d8010ff43b796aab2f + size: 384575 + timestamp: 1774298162622 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.3-hdae7a39_1.conda + sha256: 34fe8276befd6c42956c4acd969caeddbdc7ea8e6ed054b8388709b6c3e94ba4 + md5: 426cc33f8745ce11a73baf73db3954a7 depends: - libgcc >=14 - - libpng >=1.6.50,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - freetype >=2.14.1 - license: GPL-2.0-only OR FTL - size: 423210 - timestamp: 1757945484108 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.14.2-hdae7a39_0.conda - sha256: a2e9efb033f7519bbc0a54558d7c9bb96252adc22c6e09df2daee7615265fbb1 - md5: 69d1cdfdabb66464cbde17890e8be3b9 - depends: - - libgcc >=14 - - libpng >=1.6.55,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - freetype >=2.14.2 + - freetype >=2.14.3 license: GPL-2.0-only OR FTL - size: 423372 - timestamp: 1772756012086 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.1-hdbac1cb_0.conda - sha256: 223710600b1a5567163f7d66545817f2f144e4ef8f84e99e90f6b8a4e19cb7ad - md5: 6e7c5c5ab485057b5d07fd8188ba5c28 + size: 424236 + timestamp: 1780933505195 +- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda + sha256: 0bbd19c9f7c4d0232b31892e6a4d1f82b8d19d1b84d89725f1f491b336447758 + md5: 4e4d54f9f98383d977ba56ef39ebf46d depends: - - libpng >=1.6.50,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - freetype >=2.14.1 + - freetype >=2.14.3 license: GPL-2.0-only OR FTL - size: 340264 - timestamp: 1757946133889 -- conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.2-hdbac1cb_0.conda - sha256: 1e80e01e5662bd3a0c0e094fbeaec449dbb2288949ca55ca80345e7812904e67 - md5: c21a474a38982cdb56b3454cf4f78389 - depends: - - libpng >=1.6.55,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - freetype >=2.14.2 - license: GPL-2.0-only OR FTL - size: 340155 - timestamp: 1772756166648 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_15.conda - sha256: 37f2edde2f8281672987c63f13c85a57d04d889dc929ce38204426d5eb2059cc - md5: a5d86b0496174a412d531eac03af9174 + size: 340411 + timestamp: 1780934813224 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_19.conda + sha256: 8e0a3b5e41272e5678499b5dfc4cddb673f9e935de01eb0767ce857001229f46 + md5: 57736f29cc2b0ec0b6c2952d3f101b6a depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgomp 15.2.0 he0feb66_15 - - libgcc-ng ==15.2.0=*_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 1041379 - timestamp: 1764836112865 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - sha256: 6eed58051c2e12b804d53ceff5994a350c61baf117ec83f5f10c953a3f311451 - md5: 6d0363467e6ed84f11435eb309f2ff06 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_16 - - libgomp 15.2.0 he0feb66_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 1042798 - timestamp: 1765256792743 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 - md5: 0aa00f03f9e39fb9876085dee11a85d4 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 he0feb66_18 + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 he0feb66_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1041788 - timestamp: 1771378212382 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_15.conda - sha256: ff184dbe54493b663eab2d62fa0b5a689eb84bec6401fcaeb44265c7f31ae4c6 - md5: cfdf8700e69902a113f2611e3cc09b55 - depends: - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_15 - - libgomp 15.2.0 h8acb6b2_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 621200 - timestamp: 1764836146613 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - sha256: 44bfc6fe16236babb271e0c693fe7fd978f336542e23c9c30e700483796ed30b - md5: cf9cd6739a3b694dcf551d898e112331 - depends: - - _openmp_mutex >=4.5 - constrains: - - libgomp 15.2.0 h8acb6b2_16 - - libgcc-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 620637 - timestamp: 1765256938043 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 - md5: 552567ea2b61e3a3035759b2fdb3f9a6 + size: 1041084 + timestamp: 1778269013026 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_19.conda + sha256: 4592b096e553f67799ae70d4b6167eeda3ec74587d68c7aecbf4e7b1df136681 + md5: f35b3f52d0a2ec4ffe3c89ba135cdb9a depends: - _openmp_mutex >=4.5 constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 h8acb6b2_18 + - libgomp 15.2.0 h8acb6b2_19 + - libgcc-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 622900 - timestamp: 1771378128706 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_16.conda - sha256: 24984e1e768440ba73021f08a1da0c1ec957b30d7071b9a89b877a273d17cae8 - md5: 1edb8bd8e093ebd31558008e9cb23b47 + size: 622462 + timestamp: 1778268755949 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda + sha256: 80e80ef5e31b00b12539db3c5aaecde60dab91381abfc1060e323d5c3b016dce + md5: cc5d690fc1c629038f13c68e88e65f44 depends: - _openmp_mutex >=4.5 - libwinpthread >=12.0.0.r4.gg4f2fc60ca constrains: - - libgomp 15.2.0 h8ee18e1_16 - - libgcc-ng ==15.2.0=*_16 - msys2-conda-epoch <0.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 819696 - timestamp: 1765260437409 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_18.conda - sha256: da2c96563c76b8c601746f03e03ac75d2b4640fa2ee017cb23d6c9fc31f1b2c6 - md5: b085746891cca3bd2704a450a7b4b5ce - depends: - - _openmp_mutex >=4.5 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - libgcc-ng ==15.2.0=*_18 - - msys2-conda-epoch <0.0a0 - - libgomp 15.2.0 h8ee18e1_18 + - libgcc-ng ==15.2.0=*_19 + - libgomp 15.2.0 h8ee18e1_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 820022 - timestamp: 1771382190160 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_116.conda - sha256: 48d7d8dded34100d9065d1c0df86a11ab2cd8ddfd1590512b304527ed25b6d93 - md5: e67832fdbf2382757205bb4b38800643 - depends: - - __unix - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 3094906 - timestamp: 1765256682321 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_118.conda - sha256: af69fc5852908d26e5b630b270982ac792506551dd6af1614bf0370dd5ab5746 - md5: 5d3a96d55f1be45fef88ee23155effd9 - depends: - - __unix - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 3085932 - timestamp: 1771378098166 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_116.conda - sha256: 594e4f22a4b6aae1bca5e22ea3a075c070642ca4c27c53e0c0973926ca711e09 - md5: 8ba6e9b5866b6a5429ca5d9fa12bc964 + size: 821854 + timestamp: 1778273037795 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.2.0-hcc6f6b0_119.conda + sha256: 38a557eba305468ac1f90ac85e50d8defd76141cb0b8a43b2fc1aca71dd5d5f2 + md5: 683fcb168e1df9a21fa80d5aa2d9330b depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 2343262 - timestamp: 1765256811670 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_118.conda - sha256: 661e29553769ceb5874eb1ed6c00263fcd36fac9f5fe0fee65d5e5cac3187ff3 - md5: 42284981c315916d916fb3156b8d5b9e + size: 3095909 + timestamp: 1778268932148 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-aarch64-15.2.0-h55c397f_119.conda + sha256: fe600a63a39281e6994e27fe79360cd6bd8e576c3ce1af32ce8673b011f46c21 + md5: 18ad0f0b94071d91fa962a1bf3983a78 depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 2364690 - timestamp: 1771378032404 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_116.conda - sha256: ffffa7c4e12ea0bb70d188eb003809c0579be974c721f0b53345e4e466857fa8 - md5: 83cd21fa27411b91a3ec02ceb9f4d0ca + size: 2353893 + timestamp: 1778268665954 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_119.conda + sha256: 5ea9053e6c903e1ebba35e478df14f9f0fd520ad9dadc944ca5697688d621e97 + md5: 8b4a82e71682c1de2b0839023d6e3133 depends: - m2-conda-epoch license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 2420086 - timestamp: 1765260357692 -- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_win-64-15.2.0-hbb59886_118.conda - sha256: e43ffa48a88a7d77a0dc0d3ccfa3acc55702e9d964e8564e86927f5a389a6c51 - md5: 1e020780767f809769807a442f5d6f6a + size: 2419170 + timestamp: 1778272969212 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda + sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 + md5: 331ee9b72b9dff570d56b1302c5ab37d depends: - - m2-conda-epoch - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 2422242 - timestamp: 1771382108271 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_15.conda - sha256: 497d8cdba0da8fa154613d1c15f585674cadc194964ed1b4fe7c2809938dc41f - md5: 7b742943660c5173bb6a5c823021c9a0 - depends: - - libgcc 15.2.0 he0feb66_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 26834 - timestamp: 1764836127111 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - sha256: 5f07f9317f596a201cc6e095e5fc92621afca64829785e483738d935f8cab361 - md5: 5a68259fac2da8f2ee6f7bfe49c9eb8b - depends: - - libgcc 15.2.0 he0feb66_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27256 - timestamp: 1765256804124 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 - md5: d5e96b1ed75ca01906b3d2469b4ce493 - depends: - - libgcc 15.2.0 he0feb66_18 + - libgcc 15.2.0 he0feb66_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27526 - timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_15.conda - sha256: 80e6135b5b0083ad6f0f00b8368d666fb148923fe2d3ab7d8cdca3eaf575eeff - md5: ad92990dc6f608f412a01540a7c9510e + size: 27694 + timestamp: 1778269016987 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_19.conda + sha256: 1137f93f477f56199ded24117430045a0c02cbe8b10031beac3b9ad2138539d3 + md5: 770cf892e5530f43e63cadc673e85653 depends: - - libgcc 15.2.0 h8acb6b2_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 26927 - timestamp: 1764836155568 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - sha256: 22d7e63a00c880bd14fbbc514ec6f553b9325d705f08582e9076c7e73c93a2e1 - md5: 3e54a6d0f2ff0172903c0acfda9efc0e - depends: - - libgcc 15.2.0 h8acb6b2_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27356 - timestamp: 1765256948637 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f - md5: 4feebd0fbf61075a1a9c2e9b3936c257 - depends: - - libgcc 15.2.0 h8acb6b2_18 + - libgcc 15.2.0 h8acb6b2_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27568 - timestamp: 1771378136019 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - sha256: 8a7b01e1ee1c462ad243524d76099e7174ebdd94ff045fe3e9b1e58db196463b - md5: 40d9b534410403c821ff64f00d0adc22 - depends: - - libgfortran5 15.2.0 h68bc16d_16 - constrains: - - libgfortran-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27215 - timestamp: 1765256845586 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee - md5: 9063115da5bc35fdc3e1002e69b9ef6e + size: 27738 + timestamp: 1778268759211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda + sha256: 561a42758ef25b9ce308c4e2cf56daee4f06138385a17e29a492cd928e00be6f + md5: 42bf7eca1a951735fa06c0e3c0d5c8e6 depends: - - libgfortran5 15.2.0 h68bc16d_18 + - libgfortran5 15.2.0 h68bc16d_19 constrains: - - libgfortran-ng ==15.2.0=*_18 + - libgfortran-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27523 - timestamp: 1771378269450 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - sha256: 02fa489a333ee4bb5483ae6bf221386b67c25d318f2f856237821a7c9333d5be - md5: 776cca322459d09aad229a49761c0654 - depends: - - libgfortran5 15.2.0 h1b7bec0_16 - constrains: - - libgfortran-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27314 - timestamp: 1765256989755 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 - md5: 41f261f5e4e2e8cbd236c2f1f15dae1b + size: 27655 + timestamp: 1778269042954 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_19.conda + sha256: e5ad94be72634233510b33ba792a3339921bd468f0b8bc6961ea05eded251d9b + md5: c7a5b5decf969ead5ecada83654164cf depends: - - libgfortran5 15.2.0 h1b7bec0_18 + - libgfortran5 15.2.0 h1b7bec0_19 constrains: - - libgfortran-ng ==15.2.0=*_18 + - libgfortran-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27587 - timestamp: 1771378169244 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - sha256: d0e974ebc937c67ae37f07a28edace978e01dc0f44ee02f29ab8a16004b8148b - md5: 39183d4e0c05609fd65f130633194e37 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 2480559 - timestamp: 1765256819588 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 - md5: 646855f357199a12f02a87382d429b75 + size: 27728 + timestamp: 1778268784621 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda + sha256: 057978bb69fea29ed715a9b98adf71015c31baecc4aeb2bfc20d4fd5d83579d4 + md5: 85072b0ad177c966294f129b7c04a2d5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15.2.0 @@ -7776,22 +6991,11 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 2482475 - timestamp: 1771378241063 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - sha256: bde541944566254147aab746e66014682e37a259c9a57a0516cf5d05ec343d14 - md5: 87b4ffedaba8b4d675479313af74f612 - depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 1485817 - timestamp: 1765256963205 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 - md5: 574d88ce3348331e962cfa5ed451b247 + size: 2483673 + timestamp: 1778269025089 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_19.conda + sha256: af8e9bdcaa77f133a8ee4c1ef57ef564d9c45aa262abf9f5ef9b50eb99d96407 + md5: 779dbb494de6d3d6477cab52eb34285a depends: - libgcc >=15.2.0 constrains: @@ -7799,214 +7003,167 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1486341 - timestamp: 1771378148102 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda - sha256: dc2752241fa3d9e40ce552c1942d0a4b5eeb93740c9723873f6fcf8d39ef8d2d - md5: 928b8be80851f5d8ffb016f9c81dae7a + size: 1487244 + timestamp: 1778268767295 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda + sha256: ec353b3076ed8e357ed961d0e9ff6997491cade0e603de5bd18a2e301ac78ebd + md5: f25206d7322c0e9648e8b83694d143ab depends: - __glibc >=2.17,<3.0.a0 - - libglvnd 1.7.0 ha4b6fd6_2 - - libglx 1.7.0 ha4b6fd6_2 + - libglvnd 1.7.0 ha4b6fd6_3 + - libglx 1.7.0 ha4b6fd6_3 license: LicenseRef-libglvnd - size: 134712 - timestamp: 1731330998354 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda - sha256: 3e954380f16255d1c8ae5da3bd3044d3576a0e1ac2e3c3ff2fe8f2f1ad2e467a - md5: 0d00176464ebb25af83d40736a2cd3bb - depends: - - libglvnd 1.7.0 hd24410f_2 - - libglx 1.7.0 hd24410f_2 + size: 133469 + timestamp: 1779728207669 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_3.conda + sha256: 05c75a2034bdbca29bab467d02ad770ed5e524e4f0670432258f2d8487c95348 + md5: 6e893c36f31502dd195d3d58f455fdbd + depends: + - libglvnd 1.7.0 hd24410f_3 + - libglx 1.7.0 hd24410f_3 license: LicenseRef-libglvnd - size: 145442 - timestamp: 1731331005019 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.3-h6548e54_0.conda - sha256: 82d6c2ee9f548c84220fb30fb1b231c64a53561d6e485447394f0a0eeeffe0e6 - md5: 034bea55a4feef51c98e8449938e9cee + size: 148112 + timestamp: 1779728248678 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda + sha256: 41d7d864ad1f199bdb06ff6cc3931455c8af62f1d2071a08c6fa08affbcb678f + md5: 63e43d278ee5084813fe3c2edf4834ce depends: - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - constrains: - - glib 2.86.3 *_0 - license: LGPL-2.1-or-later - size: 3946542 - timestamp: 1765221858705 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce - md5: bb26456332b07f68bf3b7622ed71c0da + - libgl 1.7.0 ha4b6fd6_3 + - libglx-devel 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + size: 115664 + timestamp: 1779728218325 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-devel-1.7.0-hd24410f_3.conda + sha256: b7483884e5e8df362f113d7d7694f0a37ecf6409f1acaaa889f312688917c067 + md5: 3a0adce33b3b8a52c76389db1edfec1b + depends: + - libgl 1.7.0 hd24410f_3 + - libglx-devel 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + size: 116084 + timestamp: 1779728257534 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + sha256: 4bee10e62796f01e4fa2b5849135b1cc061337fe9cf5eb9bd79e9664922ae0e4 + md5: 889febc66cd9e4190f80ef9718fa239b depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - constrains: - - glib 2.86.4 *_1 - license: LGPL-2.1-or-later - size: 4398701 - timestamp: 1771863239578 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.3-hf53f6bf_0.conda - sha256: 35f4262131e4d42514787fdc3d45c836e060e18fcb2441abd9dd8ecd386214f4 - md5: f226b9798c6c176d2a94eea1350b3b6b - depends: + - libzlib >=1.3.2,<2.0a0 - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.47,<10.48.0a0 constrains: - - glib 2.86.3 *_0 + - glib >2.66 license: LGPL-2.1-or-later - size: 4041779 - timestamp: 1765221790843 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec - md5: 4ac4372fc4d7f20630a91314cdac8afd + size: 4754220 + timestamp: 1782463895250 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.88.2-h96a7f82_0.conda + sha256: 6a13152a81513117b8d41bf64dea56c731d877bcced5a24fab738e3c0f9ac58c + md5: 31d404d8c0755d0f9062a4459f5a1084 depends: - - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libffi >=3.5.2,<3.6.0a0 - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 constrains: - - glib 2.86.4 *_1 + - glib >2.66 license: LGPL-2.1-or-later - size: 4512186 - timestamp: 1771863220969 -- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.3-h0c9aed9_0.conda - sha256: 84b74fc81fff745f3d21a26c317ace44269a563a42ead3500034c27e407e1021 - md5: c2d5b6b790ef21abac0b5331094ccb56 + size: 4943441 + timestamp: 1782464048865 +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + sha256: 20d4a182b8aa1d71b331579fae281bb3ccb1a199257ce15fadc53786031a7408 + md5: 5be116480ef34a5646894d7f7cd7ae41 depends: - - libffi >=3.5.2,<3.6.0a0 - - libiconv >=1.18,<2.0a0 - - libintl >=0.22.5,<1.0a0 - - libzlib >=1.3.1,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - constrains: - - glib 2.86.3 *_0 - license: LGPL-2.1-or-later - size: 3818991 - timestamp: 1765222145992 -- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.86.4-h0c9aed9_1.conda - sha256: f035fb25f8858f201e0055c719ef91022e9465cd51fe803304b781863286fb10 - md5: 0329a7e92c8c8b61fcaaf7ad44642a96 - depends: - - libffi >=3.5.2,<3.6.0a0 - - libiconv >=1.18,<2.0a0 + - ucrt >=10.0.20348.0 - libintl >=0.22.5,<1.0a0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 - pcre2 >=10.47,<10.48.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - libffi >=3.5.2,<3.6.0a0 constrains: - - glib 2.86.4 *_1 + - glib >2.66 license: LGPL-2.1-or-later - size: 4095369 - timestamp: 1771863229701 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda - sha256: 1175f8a7a0c68b7f81962699751bb6574e6f07db4c9f72825f978e3016f46850 - md5: 434ca7e50e40f4918ab701e3facd59a0 + size: 4518265 + timestamp: 1782463965040 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda + sha256: e019ebe4e3f5cdf23e2f5e58ddf7ade27988c53820115b17b98f218ebcc87748 + md5: eb83f3f8cecc3e9bff9e250817fc69b6 depends: - __glibc >=2.17,<3.0.a0 license: LicenseRef-libglvnd - size: 132463 - timestamp: 1731330968309 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_2.conda - sha256: 57ec3898a923d4bcc064669e90e8abfc4d1d945a13639470ba5f3748bd3090da - md5: 9e115653741810778c9a915a2f8439e7 + size: 133586 + timestamp: 1779728183422 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglvnd-1.7.0-hd24410f_3.conda + sha256: ca124e53765a2b123e0ca6ce809c7caf188bb26e5fe125b69099378276d5e66f + md5: a2ad848c0aab2e326c6af08ea20502f4 license: LicenseRef-libglvnd - size: 152135 - timestamp: 1731330986070 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda - sha256: 2d35a679624a93ce5b3e9dd301fff92343db609b79f0363e6d0ceb3a6478bfa7 - md5: c8013e438185f33b13814c5c488acd5c + size: 146645 + timestamp: 1779728228274 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda + sha256: 2f74713c9ca408ea84e88a30a9028153e7b553e8bb42e06139eac9a753c27da9 + md5: ec3c4350aa0261bf7f87b8ca15c8e80e depends: - __glibc >=2.17,<3.0.a0 - - libglvnd 1.7.0 ha4b6fd6_2 - - xorg-libx11 >=1.8.10,<2.0a0 + - libglvnd 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 license: LicenseRef-libglvnd - size: 75504 - timestamp: 1731330988898 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda - sha256: 6591af640cb05a399fab47646025f8b1e1a06a0d4bbb4d2e320d6629b47a1c61 - md5: 1d4269e233636148696a67e2d30dad2a + size: 76586 + timestamp: 1779728199059 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda + sha256: 2698b415b9f7b692cd64e34db623e1a6e54ed54e78b0b4e5d4ea6762791e9118 + md5: 338faf34b78d053841098c0528699e34 depends: - - libglvnd 1.7.0 hd24410f_2 - - xorg-libx11 >=1.8.9,<2.0a0 + - libglvnd 1.7.0 hd24410f_3 + - xorg-libx11 >=1.8.13,<2.0a0 license: LicenseRef-libglvnd - size: 77736 - timestamp: 1731330998960 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_15.conda - sha256: b3c4e39be7aba6f5a8695d428362c5c918b96a281ce0a7037f1e889dfc340615 - md5: a90d6983da0757f4c09bb8fcfaf34e71 + size: 76704 + timestamp: 1779728242753 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda + sha256: a17ae2d4cb2de04a20882ae14ec3cc1958e868a4dec81e3d7eca30115ee50e94 + md5: 16b6330783ce0d1ae8d22782173b32c9 depends: - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 602978 - timestamp: 1764836011147 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda - sha256: 5b3e5e4e9270ecfcd48f47e3a68f037f5ab0f529ccb223e8e5d5ac75a58fc687 - md5: 26c46f90d0e727e95c6c9498a33a09f3 + - libglx 1.7.0 ha4b6fd6_3 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + size: 27363 + timestamp: 1779728211402 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda + sha256: b30433c4f56bec0a7d9d288e0a456ed280183e32f3f4880ada2189fc12804a52 + md5: 3da9719866b95bddcad86c8aec6a8ba2 depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 603284 - timestamp: 1765256703881 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 - md5: 239c5e9546c38a1e884d69effcf4c882 + - libglx 1.7.0 hd24410f_3 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-xorgproto + license: LicenseRef-libglvnd + size: 27651 + timestamp: 1779728252006 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda + sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b + md5: faac990cb7aedc7f3a2224f2c9b0c26c depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 603262 - timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_15.conda - sha256: d76cbb7e76af310828c74396a78c59a3b305431da25c9337e420bb441d2e8ca0 - md5: 0719da240fd6086c34c4c30080329806 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 587301 - timestamp: 1764836050907 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda - sha256: 0a9d77c920db691eb42b78c734d70c5a1d00b3110c0867cfff18e9dd69bc3c29 - md5: 4d2f224e8186e7881d53e3aead912f6c - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 587924 - timestamp: 1765256821307 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 - md5: 4faa39bf919939602e594253bd673958 + size: 603817 + timestamp: 1778268942614 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda + sha256: 2370ef0ffcbae5bede3c4bf136add4abc257245eb91f724c99bb4a43116c5a83 + md5: c5e8a379c4a2ec2aea4ba22758c001d9 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 588060 - timestamp: 1771378040807 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_16.conda - sha256: 9c86aadc1bd9740f2aca291da8052152c32dd1c617d5d4fd0f334214960649bb - md5: ab8189163748f95d4cb18ea1952943c3 - depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - msys2-conda-epoch <0.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 663567 - timestamp: 1765260367147 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_18.conda - sha256: 94981bc2e42374c737750895c6fdcfc43b7126c4fc788cad0ecc7281745931da - md5: 939fb173e2a4d4e980ef689e99b35223 + size: 587387 + timestamp: 1778268674393 +- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda + sha256: 4dc958ced2fc7f42bc675b07e2c9abe3e150875ffdf62ca551d94fc6facf1fd7 + md5: f1147651e3fdd585e2f442c0c2fc8f2d depends: - libwinpthread >=12.0.0.r4.gg4f2fc60ca constrains: @@ -8014,75 +7171,157 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 663864 - timestamp: 1771382118742 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.1-default_hafda6a7_1003.conda - sha256: b9e6340da35245d5f3b7b044b4070b4980809d340bddf16c942a97a83f146aa4 - md5: 4fe840c6d6b3719b4231ed89d389bb17 + size: 664640 + timestamp: 1778272979661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda + sha256: 821c315f6b5171aa89e735be2ad84e74eb3f898fc7610ee36cfecd95dfa789e8 + md5: fb4669c3990b94ea32fbb81f433e9aa6 depends: - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - license: BSD-3-Clause - license_family: BSD - size: 2449346 - timestamp: 1765089858592 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.12.2-default_hafda6a7_1000.conda - sha256: 2cf160794dda62cf93539adf16d26cfd31092829f2a2757dbdd562984c1b110a - md5: 0ed3aa3e3e6bc85050d38881673a692f + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + size: 1297668 + timestamp: 1782800580119 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda + sha256: ae1d16dd62f626c4dab1240a49f6b04e14e4f30140e5fb26bb835821dba114b6 + md5: 655cedd9626545089b9e9ead153cf619 + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libstdcxx >=14 + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + size: 1334601 + timestamp: 1782800489368 +- conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda + sha256: 634a64cf43f1ce5a4139334bcdbde54d6854ae33d881ae1774377965e21051a5 + md5: 005469a341088900ca235892d3154c24 + depends: + - cairo >=1.18.4,<2.0a0 + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.2,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 1008194 + timestamp: 1782801000396 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-devel-14.2.1-h17a8019_1.conda + sha256: 6d8e793042affd18ca1784b7794fab14d16f54f984777ce6ab86bacaa465ab0d + md5: 99cf21100441e51272f1cd6fe0632a20 depends: - __glibc >=2.17,<3.0.a0 + - cairo >=1.18.4,<2.0a0 + - freetype + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libharfbuzz 14.2.1 h17a8019_1 + - libpng >=1.6.58,<1.7.0a0 - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - license: BSD-3-Clause - license_family: BSD - size: 2449916 - timestamp: 1765103845133 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.1-default_ha470c98_1003.conda - sha256: f0d2fdf4480bac454ac4585fbb8283dde72b8140e6767f9f0009bbf4aedd2db6 - md5: da82e5681665613cd336ee8a7b7b87de + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + size: 1970690 + timestamp: 1782800603897 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-devel-14.2.1-h3a99ef3_1.conda + sha256: 866b0132df7d080a7b2e3c44e4c79723f007db6c035b1e751612d29db698859b + md5: b6762f2c0386ba4606d5b2cba1e41ca8 depends: + - cairo >=1.18.4,<2.0a0 + - freetype + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 + - libglib >=2.88.2,<3.0a0 + - libharfbuzz 14.2.1 h3a99ef3_1 + - libpng >=1.6.58,<1.7.0a0 - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - license: BSD-3-Clause - license_family: BSD - size: 2465783 - timestamp: 1765090029212 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.12.2-default_ha470c98_1000.conda - sha256: e87cf64d87c7706403507df7329f5b597c3b487f4c72ef53ef899e38983ea70e - md5: c8b05c85ae962a993d9b7d6c9d10571e + - libzlib >=1.3.2,<2.0a0 + license: MIT + license_family: MIT + size: 2050496 + timestamp: 1782800511879 +- conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-devel-14.2.1-h03b5201_1.conda + sha256: d04bac65245bf76ae23a18148b941d8215085d38a6d391971966ccda8a996b99 + md5: de077ebf9cbc0c1da6510fdf1bbc6baa depends: + - cairo >=1.18.4,<2.0a0 + - freetype + - glib + - graphite2 >=1.3.15,<2.0a0 + - icu >=78.3,<79.0a0 + - libexpat >=2.8.1,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libglib >=2.88.2,<3.0a0 + - libharfbuzz 14.2.1 h03b5201_1 + - libpng >=1.6.58,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: MIT + license_family: MIT + size: 321750 + timestamp: 1782801035822 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda + sha256: 5041d295813dfb84652557839825880aae296222ab725972285c5abe3b6e4288 + md5: c197985b58bc813d26b42881f0021c82 + depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - libxml2 - libxml2-16 >=2.14.6 license: BSD-3-Clause license_family: BSD - size: 2467105 - timestamp: 1765103804193 -- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.1-default_h4379cf1_1003.conda - sha256: 2d534c09f92966b885acb3f4a838f7055cea043165a03079a539b06c54e20a49 - md5: d1699ce4fe195a9f61264a1c29b87035 + size: 2436378 + timestamp: 1770953868164 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda + sha256: 88888d99e81c93e7331f2eb0fec08b3c4a47a1bfa1c88b3e641f6568569b6261 + md5: 974183f6420938051e2f3208922d057f depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - libgcc >=14 + - libstdcxx >=14 - libxml2 - libxml2-16 >=2.14.6 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD - size: 2412642 - timestamp: 1765090345611 -- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.12.2-default_h4379cf1_1000.conda - sha256: 8cdf11333a81085468d9aa536ebb155abd74adc293576f6013fc0c85a7a90da3 - md5: 3b576f6860f838f950c570f4433b086e + size: 2453519 + timestamp: 1770953713701 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda + sha256: 2ee12e37223dfcd0acd050c80a91150c482b6e2899198521e1800dce66662467 + md5: 6a01c986e30292c715038d2788aa1385 depends: - libwinpthread >=12.0.0.r4.gg4f2fc60ca - libxml2 @@ -8093,37 +7332,37 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 2411241 - timestamp: 1765104337762 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.3.0-h4c17acf_1.conda - sha256: 2bdd1cdd677b119abc5e83069bec2e28fe6bfb21ebaea3cd07acee67f38ea274 - md5: c2a0c1d0120520e979685034e0b79859 + size: 2396128 + timestamp: 1770954127918 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda + sha256: 8b70955d5e9a49d08945d4f8e2eab855b2efa5fce9cb9bc5e75d86764e6f2f38 + md5: 3a9428b74c403c71048104d38437b48c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 license: Apache-2.0 OR BSD-3-Clause - size: 1448617 - timestamp: 1758894401402 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.3.0-h81d0cf9_1.conda - sha256: a6a441692b27606f8ef64ee9e6a0c72c615c2e25b01c282ee080ee8f97861943 - md5: d5b93534e24e7c15792b3f336c52af07 + size: 1435782 + timestamp: 1776989559668 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda + sha256: cff38f9a1df7bc3e5ac7856bc2e5c879151b54c07b55722ec0da1af49d869721 + md5: 61b4e7ef4624c692a3ebd07100795303 depends: - libgcc >=14 - libstdcxx >=14 license: Apache-2.0 OR BSD-3-Clause - size: 1180000 - timestamp: 1758894754411 -- conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.3.0-ha71e874_1.conda - sha256: c722a04f065656b988a46dee87303ff0bf037179c50e2e76704b693def7f9a96 - md5: f4649d4b6bf40d616eda57d6255d2333 + size: 945401 + timestamp: 1776989517303 +- conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda + sha256: 4b45bf59ee46d3c746272c27651da9ce709fda4eee8536c7424acea60d0e2ad0 + md5: aeca1cb6665f19e560c1fbd20b5bcf34 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: Apache-2.0 OR BSD-3-Clause - size: 536186 - timestamp: 1758894243956 + size: 562583 + timestamp: 1776989522919 - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f md5: 915f5995e94f60e9a4826e0b0920ee88 @@ -8160,30 +7399,39 @@ packages: license: LGPL-2.1-or-later size: 95568 timestamp: 1723629479451 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda - sha256: cc9aba923eea0af8e30e0f94f2ad7156e2984d80d1e8e7fe6be5a1f257f0eb32 - md5: 8397539e3a0bbd1695584fb4f927485a +- conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + sha256: be1f3c48bc750bca7e68955d57180dfd826d6f9fa7eb32994f6cb61b813f9a6a + md5: 7537784e9e35399234d4007f45cdb744 + depends: + - libiconv >=1.17,<2.0a0 + - libintl 0.22.5 h5728263_3 + license: LGPL-2.1-or-later + size: 40746 + timestamp: 1723629745649 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.2.0-hb03c661_0.conda + sha256: 716332fd31b3808da7a4235a05212a9e9da05e854864c3def2dea0b5d2bf7610 + md5: 466badda5536d85ddc63ee9404f29735 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib - size: 633710 - timestamp: 1762094827865 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.2-he30d5cf_0.conda - sha256: 84064c7c53a64291a585d7215fe95ec42df74203a5bf7615d33d49a3b0f08bb6 - md5: 5109d7f837a3dfdf5c60f60e311b041f + size: 652868 + timestamp: 1783731886811 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.2.0-he30d5cf_0.conda + sha256: da3e45974c1f23c76264d6358463861236862052ca156e34b502ef3c27e36fb8 + md5: de0780a3690bffe75ac3fa70db84596d depends: - libgcc >=14 constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib - size: 691818 - timestamp: 1762094728337 -- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.2-hfd05255_0.conda - sha256: 795e2d4feb2f7fc4a2c6e921871575feb32b8082b5760726791f080d1e2c2597 - md5: 56a686f92ac0273c0f6af58858a3f013 + size: 714602 + timestamp: 1783731816001 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.2.0-hfd05255_0.conda + sha256: 3d6635efa9497b9c5ba7957df8067c0a980d5cb10a6ea136931809eb410f8a99 + md5: cf219146d5bf2fee5907409ff9f5ac89 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -8191,234 +7439,169 @@ packages: constrains: - jpeg <0.0.0a license: IJG AND BSD-3-Clause AND Zlib - size: 841783 - timestamp: 1762094814336 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-ha09017c_0.conda - sha256: 0c2399cef02953b719afe6591223fb11d287d5a108ef8bb9a02dd509a0f738d7 - md5: 1df8c1b1d6665642107883685db6cf37 + size: 991057 + timestamp: 1783731990693 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.12.0-h174a0a3_1.conda + sha256: 1811d6c6558fbfe89326616c207cc7584032b60bc6f4329d2a76b961e2936a15 + md5: 1fff55640e1f12d7606965915be37bbb depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - - libhwy >=1.3.0,<1.4.0a0 + - libhwy >=1.4.0,<1.5.0a0 - libbrotlienc >=1.2.0,<1.3.0a0 - libbrotlidec >=1.2.0,<1.3.0a0 license: BSD-3-Clause license_family: BSD - size: 1883476 - timestamp: 1770801977654 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-h71be66a_0.conda - sha256: 880d6a176e0fed5f3a8b1db034f6ee59dab1622d0ab03ea1298ddd9d42f6fa5d - md5: 0f640337bf465aa7b663a6ba399d4fc4 + size: 1849836 + timestamp: 1783146019356 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.12.0-hbae46ee_1.conda + sha256: 476f42670da6c1ad30d0cc830a9ef995975c14075d626e261c8dd1dd0db41558 + md5: e89355bfbc02eeeb0798ac4304968d65 depends: - libgcc >=14 - libstdcxx >=14 + - libhwy >=1.4.0,<1.5.0a0 - libbrotlienc >=1.2.0,<1.3.0a0 - libbrotlidec >=1.2.0,<1.3.0a0 - - libhwy >=1.3.0,<1.4.0a0 license: BSD-3-Clause license_family: BSD - size: 1489440 - timestamp: 1770801995062 -- conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.11.2-hf3f85d1_0.conda - sha256: 525c5382eb32a43e7baf45b452079bf23daf8f8bf19fee7c8dafa8c731ada8bd - md5: 869e71fcf2135212c51a96f7f7dbd00d + size: 2176891 + timestamp: 1783146026809 +- conda: https://conda.anaconda.org/conda-forge/win-64/libjxl-0.12.0-h932607e_1.conda + sha256: 141310ec747808be57ba9e7501fcfab75b260803233dd9ba818fb85f6080aad9 + md5: adb20d060513fe9655d28a780bafafaa depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 + - libhwy >=1.4.0,<1.5.0a0 - libbrotlienc >=1.2.0,<1.3.0a0 - libbrotlidec >=1.2.0,<1.3.0a0 - - libhwy >=1.3.0,<1.4.0a0 - license: BSD-3-Clause - license_family: BSD - size: 1317916 - timestamp: 1770801992810 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - build_number: 5 - sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 - md5: b38076eb5c8e40d0106beda6f95d7609 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas license: BSD-3-Clause license_family: BSD - size: 18200 - timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda - build_number: 6 - sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d - md5: 881d801569b201c2e753f03c84b85e15 + size: 1199695 + timestamp: 1783146089449 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h47877c9_openblas.conda + build_number: 8 + sha256: 168e327d737059553e15cc6ec36d76b9bbb3931c2a7721555fd68b4c9348b247 + md5: 809be8ba8712c77bc7d44c2d99390dc4 depends: - - libblas 3.11.0 6_h4a7cf45_openblas + - libblas 3.11.0 8_h4a7cf45_openblas constrains: - - blas 2.306 openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas + - blas 2.308 openblas + - libcblas 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18624 - timestamp: 1774503065378 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - build_number: 5 - sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 - md5: 88d1e4133d1182522b403e9ba7435f04 - depends: - - libblas 3.11.0 5_haddc8a3_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - libcblas 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - size: 18392 - timestamp: 1765818627104 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda - build_number: 6 - sha256: 67472a3cb761ff95527387ea0367883a22f9fbda1283b9880e5ad644fafd0735 - md5: e23a27b52fb320687239e2c5ae4d7540 + size: 18790 + timestamp: 1779859115086 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda + build_number: 8 + sha256: d269a684afa0b2fdb44d6b60167f854f30410cdb5ee49a7275c026f6b10c8d05 + md5: 3af3f2aa755abc5e91351114ae214f55 depends: - - libblas 3.11.0 6_haddc8a3_openblas + - libblas 3.11.0 8_haddc8a3_openblas constrains: - - blas 2.306 openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas + - libcblas 3.11.0 8*_openblas + - liblapacke 3.11.0 8*_openblas + - blas 2.308 openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 18702 - timestamp: 1774503068721 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-5_hf9ab0e9_mkl.conda - build_number: 5 - sha256: a2d33f5cc2b8a9042f2af6981c6733ab1a661463823eaa56595a9c58c0ab77e1 - md5: e62c42a4196dee97d20400612afcb2b1 - depends: - - libblas 3.11.0 5_hf2e6a31_mkl - constrains: - - libcblas 3.11.0 5*_mkl - - blas 2.305 mkl - - liblapacke 3.11.0 5*_mkl - license: BSD-3-Clause - license_family: BSD - size: 80225 - timestamp: 1765819148014 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-6_hf9ab0e9_mkl.conda - build_number: 6 - sha256: 2e6ac39e456ba13ec8f02fc0787b8a22c89780e24bd5556eaf642177463ffb36 - md5: 7e9cdaf6f302142bc363bbab3b5e7074 + size: 18828 + timestamp: 1779859055749 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.11.0-8_hf9ab0e9_mkl.conda + build_number: 8 + sha256: 44999ed04bc0a56de44ee0ac8bd5b3702efd411a8b29491c0e3d3deb8619c94e + md5: d584799b920ecae9b75a2b70743a3de7 depends: - - libblas 3.11.0 6_hf2e6a31_mkl + - libblas 3.11.0 8_h8455456_mkl constrains: - - blas 2.306 mkl - - liblapacke 3.11.0 6*_mkl - - libcblas 3.11.0 6*_mkl + - libcblas 3.11.0 8*_mkl + - liblapacke 3.11.0 8*_mkl + - blas 2.308 mkl license: BSD-3-Clause license_family: BSD purls: [] - size: 80571 - timestamp: 1774503757128 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda - sha256: f2591c0069447bbe28d4d696b7fcb0c5bd0b4ac582769b89addbcf26fb3430d8 - md5: 1a580f7796c7bf6393fddb8bbbde58dc + size: 81027 + timestamp: 1779859714698 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda + sha256: e9b5f301d6b001a9b8ce782157f56b75c92c4fbc9eba95dc6345c1139251d13b + md5: 298bb2483fc7d15396147cf1c1465359 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - xz 5.8.1.* - license: 0BSD - size: 112894 - timestamp: 1749230047870 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb - md5: c7c83eecbb72d88b940c249af56c8b17 + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 44320272 + timestamp: 1781788728739 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda + sha256: dc943f1730a27f5fb36682c9852f7196f671c3a9df4a0a7a8f7ba665637c9151 + md5: 6fc7875f99e39c80dca8fcdc60e6559e + depends: + - libgcc >=14 + - libstdcxx >=14 + - libxml2 + - libxml2-16 >=2.14.6 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + size: 43302008 + timestamp: 1781785783993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda + sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d + md5: b88d90cad08e6bc8ad540cb310a761fb depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 113207 - timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_2.conda - sha256: 498ea4b29155df69d7f20990a7028d75d91dbea24d04b2eb8a3d6ef328806849 - md5: 7d362346a479256857ab338588190da0 - depends: - - libgcc >=13 - constrains: - - xz 5.8.1.* - license: 0BSD - size: 125103 - timestamp: 1749232230009 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 - md5: 96944e3c92386a12755b94619bae0b35 + size: 113478 + timestamp: 1775825492909 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda + sha256: d61962b9cd54c3554361550203c64d5b65b71e3058a285b66e4b04b9769f0a5c + md5: 76298a9e6d71ee6e832a8d0d7373b261 depends: - libgcc >=14 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 125916 - timestamp: 1768754941722 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - sha256: 55764956eb9179b98de7cc0e55696f2eff8f7b83fc3ebff5e696ca358bca28cc - md5: c15148b2e18da456f5108ccb5e411446 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - xz 5.8.1.* - license: 0BSD - size: 104935 - timestamp: 1749230611612 -- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.2-hfd05255_0.conda - sha256: f25bf293f550c8ed2e0c7145eb404324611cfccff37660869d97abf526eb957c - md5: ba0bfd4c3cf73f299ffe46ff0eaeb8e3 + size: 126102 + timestamp: 1775828008518 +- conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda + sha256: d636d1a25234063642f9c531a7bb58d84c1c496411280a36ea000bd122f078f1 + md5: 8f83619ab1588b98dd99c90b0bfc5c6d depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - xz 5.8.2.* + - xz 5.8.3.* license: 0BSD purls: [] - size: 106169 - timestamp: 1768752763559 + size: 106486 + timestamp: 1775825663227 - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 md5: 2c21e66f50753a083cbe6b80f38268fa depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - size: 92400 - timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda - sha256: 3aa92d4074d4063f2a162cd8ecb45dccac93e543e565c01a787e16a43501f7ee - md5: c7e925f37e3b40d893459e625f6a53f1 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: BSD-2-Clause - license_family: BSD - size: 91183 - timestamp: 1748393666725 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-h86ecc28_0.conda - sha256: ef8697f934c80b347bf9d7ed45650928079e303bad01bd064995b0e3166d6e7a - md5: 78cfed3f76d6f3f279736789d319af76 - depends: - - libgcc >=13 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: BSD-2-Clause license_family: BSD - size: 114064 - timestamp: 1748393729243 + size: 92400 + timestamp: 1769482286018 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 md5: 7b9813e885482e3ccb1fa212b86d7fd0 @@ -8428,17 +7611,6 @@ packages: license_family: BSD size: 114056 timestamp: 1769482343003 -- conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda - sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf - md5: 74860100b2029e2523cf480804c76b9b - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: BSD-2-Clause - license_family: BSD - size: 88657 - timestamp: 1723861474602 - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda sha256: 40dcd0b9522a6e0af72a9db0ced619176e7cfdb114855c7a64f278e73f8a7514 md5: e4a9fc2bba3b022dad998c78856afe47 @@ -8492,42 +7664,60 @@ packages: purls: [] size: 34831 timestamp: 1750274211 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.9.82-hecca717_1.conda - sha256: 4404948624cbddb8dd1bf52d259fe0c1ef24f30e3ff8ce887b002b395796acc7 - md5: 2deb1bea8f1d9cd44d0b29390fd33017 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda + sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 + md5: 7c7927b404672409d9917d49bff5f2d6 depends: - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.9,<12.10.0a0 + - libgcc >=13 + license: LGPL-2.1-or-later + size: 33418 + timestamp: 1734670021371 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 + sha256: 0e303d7a8845391bd1634efb65dc9d9b82b5608ebeb32fb77a56d1ed696d2eee + md5: 835c7c4137821de5c309f4266a51ba89 + depends: + - libgcc-ng >=9.3.0 + license: LGPL-2.1-or-later + size: 39449 + timestamp: 1609781865660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-12.9.82-hecca717_2.conda + sha256: e044659e3a7e0a3168951fe8c4d7ad0e3b243211037d326d4e62540c75ce010a + md5: 1812ac6d93b3d1079881ccac0615e273 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12,<12.10.0a0 - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 818615 - timestamp: 1761098926897 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda - sha256: 3de6aed48ca7a705aa22444b54ad7236f0e1f9dc7f41ec3e2273e6cb991be213 - md5: 1f9be211f7ec5c88b1d2d561aee7884d + size: 818431 + timestamp: 1782920268840 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_1.conda + sha256: 2f4f4824d6eb16693fa04aca1f872b64df48445e26e8a357dc538bf9825c25fa + md5: df0f2d96a171e8f843d4f03fa3d8d3d9 depends: - __glibc >=2.17,<3.0.a0 - cuda-version >=13.3,<13.4.0a0 - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 472135 - timestamp: 1779897596590 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-12.9.82-h8f3c8d4_1.conda - sha256: 049ef83fb49c800369a410a9b27287aca2364ebdb6263d553db09f0b45aac3b5 - md5: f7ebe6ae68c9722674d3474110eae245 + purls: [] + size: 470857 + timestamp: 1782920237017 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-12.9.82-h8f3c8d4_2.conda + sha256: 11a041920935c01fce0cc351f5db4157a3154e9a1aa3cfec29a707fb44c9a112 + md5: 230f26daf9cfcf4a4185c0c6f9cbdcb2 depends: - arm-variant * sbsa - - cuda-version >=12.9,<12.10.0a0 + - cuda-version >=12,<12.10.0a0 - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 770989 - timestamp: 1761098866337 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda - sha256: a811726bc62a3e1952672aa0917166f8123e0ff2c182b9346384f8e962184530 - md5: 3ace0e6476f8c17381dc3b391c3c5049 + size: 771344 + timestamp: 1782920321153 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_1.conda + sha256: 5a5f13012bde038ad880d7af1514cc9fb6aa50dbffd69ab57e9b20914a3a5e59 + md5: c27b87f23e6381ebbb7f899bdfbe159c depends: - arm-variant * sbsa - cuda-version >=13.3,<13.4.0a0 @@ -8536,30 +7726,32 @@ packages: constrains: - arm-variant * sbsa license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 459700 - timestamp: 1779897643320 -- conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-12.9.82-hac47afa_1.conda - sha256: 0020038f897ddc83ed2cf5b128239c073e8db15dc661951bd674c4865f295f1b - md5: cd0c30f6b1f93ea0ebac830fad30c100 + purls: [] + size: 458764 + timestamp: 1782920269581 +- conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-12.9.82-hac47afa_2.conda + sha256: 31b31c81575656d967722ca5d795a414b069ce618714422fb2b6890583ad83e2 + md5: 24695ab1ce33e2fda666dab89c1a23f0 depends: - - cuda-version >=12.9,<12.10.0a0 + - cuda-version >=12,<12.10.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 345320 - timestamp: 1761099100395 -- conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_0.conda - sha256: 665c371c11211fb767e9b04e921fd6aed4148072df189039f48d732d28bb9dce - md5: 3391d24d389bc2230da0b534e79c1d69 + size: 345191 + timestamp: 1782920356823 +- conda: https://conda.anaconda.org/conda-forge/win-64/libnvfatbin-13.3.29-hac47afa_1.conda + sha256: 2aef341d28724fbdc03ca41af624304be24ad1fa44ba874d498a4cbff69c227e + md5: 2e2cbaab71b7fe4ae89ddea62e16adbf depends: - cuda-version >=13.3,<13.4.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LicenseRef-NVIDIA-End-User-License-Agreement - size: 361081 - timestamp: 1779897659188 + purls: [] + size: 360699 + timestamp: 1782920315550 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda sha256: 3b1c851f4fc42d347ce1c1606bdd195343a47f121e0fceb7a1f1e5aa1d497da9 md5: 3461b0f2d5cbb7973d361f9e85241d98 @@ -8664,658 +7856,369 @@ packages: license_family: BSD size: 35040 timestamp: 1745826086628 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 - md5: be43915efc66345cccb3c310b6ed0374 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - size: 5927939 - timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 - md5: 89d61bc91d3f39fda0ca10fcd3c68594 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.33-pthreads_h94d23a6_0.conda + sha256: 3d9aa85648e5e18a6d66db98b8c4317cc426721ad7a220aa86330d1ccedc8903 + md5: 2d3278b721e40468295ca755c3b84070 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.32,<0.3.33.0a0 + - openblas >=0.3.33,<0.3.34.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 5928890 - timestamp: 1774471724897 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 - md5: 11d7d57b7bdd01da745bbf2b67020b2e - depends: - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4959359 - timestamp: 1763114173544 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda - sha256: 51fcf5eb1fc43bfeca5bf3aa3f51546e92e5a92047ba47146dcea555142e30f8 - md5: 5d2ce5cf40443d055ec6d33840192265 + size: 5931919 + timestamp: 1776993658641 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-pthreads_h9d3fd7e_0.conda + sha256: b018ecfb05e75a8eea3f21f6b5c5c2a54b5178bdcf19e2e2df2735740214a8c8 + md5: 58a66cd95e9692f08abe89f55a6f3f12 depends: - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.32,<0.3.33.0a0 + - openblas >=0.3.33,<0.3.34.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 5122134 - timestamp: 1774471612323 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2025.2.0-hb617929_1.conda - sha256: 235e7d474c90ad9d8955401b8a91dbe373aa1dc65db3c8232a5e22e4eaf41976 - md5: 1da20cc4ff32dc74424dec68ec087dba + size: 5121336 + timestamp: 1776993423004 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda + sha256: 90777039b48529283df5f16383fc399866024257a8bd93de583f4730db1ab30a + md5: c2bd8055a2e2dce7a7f32cfd02101fb6 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 6244771 - timestamp: 1753211097492 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda - sha256: a396a2d1aa267f21c98717ac097138b32e41e4c40ae501729bded3801476eeb5 - md5: 9f0596e995efe372c470ff45c93131cb + - libglvnd 1.7.0 ha4b6fd6_3 + license: LicenseRef-libglvnd + size: 51767 + timestamp: 1779728204026 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda + sha256: 9b964590b23c0a0357850653e09ab0d3f840ac5d0068ff927a61b5f00d6dbf65 + md5: 86958137ec1885e2da78804996c99d5f + depends: + - libglvnd 1.7.0 hd24410f_3 + license: LicenseRef-libglvnd + size: 58759 + timestamp: 1779728245599 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_1.conda + sha256: 7941fb9ba8c3a5a0a2401dc4120e8fcb561b96d928c43374eb93f545019a2858 + md5: ea41753f926f73966629d81fdf20ec6f depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 6582302 - timestamp: 1772727204779 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.2.0-hcd21e76_1.conda - sha256: f5c7a24d9918b1f637ca11a7c0b5594e14469ccc5b1f3bafcd248df252d2bdfb - md5: 76baf6bb7a63e310210d91595e245d24 - depends: - - libgcc >=14 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 5535917 - timestamp: 1753203182299 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.0.0-h1915271_1.conda - sha256: 6f8558cc4ee4d490db88640e71d3f79fa7552701d91c09ad6f1371dadb9bd3f1 - md5: c8ff442d02723939711a726d9ff71eac + size: 6823841 + timestamp: 1782219077259 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2026.2.1-h9a8427e_1.conda + sha256: b1b0553cfa613bffa8bed04b3a880d651cc08ffe565e07362c3071597069c4d4 + md5: e18fa81e8db0a20a8d5385902c12ce7c depends: - libgcc >=14 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 5742222 - timestamp: 1772721263739 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.2.0-hcd21e76_1.conda - sha256: 018a0ea563bc2e91efee8a07f7b2ff769cd66d03d1c466c8bb7407075023ac85 - md5: 794c3f49774bd710aec2b0602ae38313 - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 9257629 - timestamp: 1753203203327 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.0.0-h1915271_1.conda - sha256: 8fff4375f324bdf8a3fe20c489710b692340007b7af2da1d14f6832990c24891 - md5: ef26404d824453138bf0a12a8bb033df + size: 5984918 + timestamp: 1782213524008 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2026.2.1-h9a8427e_1.conda + sha256: 72d90363b68266a9dc704008032e1f9acb91e080212e89dc189ea8135b199781 + md5: 2641ed1135e1316f5dd6f9512bcd6845 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 10237615 - timestamp: 1772721303162 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2025.2.0-hed573e4_1.conda - sha256: 193f760e828b0dd5168dd1d28580d4bf429c5f14a4eee5e0c02ff4c6d4cf8093 - md5: 94f9d17be1d658213b66b22f63cc6578 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - tbb >=2021.13.0 - size: 114760 - timestamp: 1753211116381 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.0.0-hd85de46_1.conda - sha256: 286de85805dc69ce0bd25367ae2a20c8096ddef35eb2483474eb246dacd5387e - md5: ee41df976413676f794af2785b291b0c + size: 10313623 + timestamp: 1782213543505 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_1.conda + sha256: 3ac14d36fa890840ae8474b8a9f0a094b8542fd8fbc409faf3d465c68f20aff0 + md5: 5698a64698e14e8a2e9e16f8f0de0e2e depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 114431 - timestamp: 1772727230331 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.2.0-h3890994_1.conda - sha256: 59a159c547fca34e8a0c600fcca428793da2ad4ecef0f47b58f1ea16d756c521 - md5: ad9768777a654205fa46aed8a829bd7e - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - - tbb >=2021.13.0 - size: 111599 - timestamp: 1753203233477 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.0.0-h3d5001d_1.conda - sha256: da7926f66318e539c9f20c2f5f3719a5ba663c6b9d5471e5223d290450219748 - md5: 5e984d6405a8f8529d7429f28a7f285e + size: 114628 + timestamp: 1782219097820 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2026.2.1-he6b9e7b_1.conda + sha256: 523247ab847e3e71ae213311491d5cc0bbb26f2c39ad4c71df9179c1b469e39f + md5: 55060a39fb1c4f7b4c6f3c514879790b depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 111064 - timestamp: 1772721336786 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2025.2.0-hed573e4_1.conda - sha256: a6f9f996e64e6d2f295f017a833eda7018ff58b6894503272d72f0002dfd6f33 - md5: 071b3a82342715a411f216d379ab6205 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - tbb >=2021.13.0 - size: 250500 - timestamp: 1753211127339 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.0.0-hd85de46_1.conda - sha256: 9988ed6339a5eb044ae8d079e2b22f5a310c41e49a0cf716057f30b21ef9cec2 - md5: ca025fa5c42ba94453636a2ae333de6b + size: 111073 + timestamp: 1782213572597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_1.conda + sha256: 499a472fc7b598ad3753b8f2afe60eb5a277d48eca9362e8aca094b2862587a7 + md5: 2ce088ef09292930d4cb3262ce7e144d depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 249056 - timestamp: 1772727247597 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2025.2.0-h3890994_1.conda - sha256: 3353f616cf72dad02d974698a74fa89eb5ff1beeaa64cebcdd1f87c52d2a0516 - md5: 4cec7bb2362ece08d0d1799f1ed4fbe7 - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - - tbb >=2021.13.0 - size: 235379 - timestamp: 1753203244808 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.0.0-h3d5001d_1.conda - sha256: 20f1958e160c64f3d207f1dbdb6960cc5642070a472bebffc0d587b2f6429033 - md5: 573b3f5ec3963e0153501a2676660ee4 + size: 250912 + timestamp: 1782219111223 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-plugin-2026.2.1-he6b9e7b_1.conda + sha256: 803cf60b354ba780fffe509d013e2603bee30e2a3496cbb772105cdde60f99b5 + md5: ea0cea8d43d94d3118533f2f89e71cd4 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 236010 - timestamp: 1772721351244 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2025.2.0-hd41364c_1.conda - sha256: f43f9049338ef9735b6815bac3f483d1e3adddecbfdeb13be365bc3f601fe156 - md5: 77c0c7028a8110076d40314dc7b1fa98 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - size: 194815 - timestamp: 1753211138624 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.0.0-hd41364c_1.conda - sha256: c7db498aeda5b0f36b347f4211b93b66ba108faaf54157a08bae8fa3c3af5f81 - md5: 07a23e96db38f63d9763f666b2db66aa + size: 238031 + timestamp: 1782213582645 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-hetero-plugin-2026.2.1-hd41364c_1.conda + sha256: bec24379598a4405de171ad151945e79743c6bd049aceabf190b753c3f7a11da + md5: 02e71250f7ca786c4b183d0a39ef63ab depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE - size: 211582 - timestamp: 1772727264950 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2025.2.0-he07c6df_1.conda - sha256: 97f6a555d73d96efe26521527ce4e4c6ea49e46d5e5fd07a5e535e7de34bb6b5 - md5: 00d0206cb4358182c856700e1c1dae8b - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - size: 187747 - timestamp: 1753203256494 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.0.0-he07c6df_1.conda - sha256: 3778ea3887c9a9300761e3f39ce86976746a35aa1392a4b76e4e4d3ce9e095b4 - md5: 74bd299545a1fe23439bf6e071ed9710 + size: 215488 + timestamp: 1782219123433 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-hetero-plugin-2026.2.1-he07c6df_1.conda + sha256: 5d216b218170b78e5513d6cef1b76aeebb4b517579a8d98af06a2cf4b2de7050 + md5: ba98371ee8a8122294c44381b4a128d9 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE - size: 202574 - timestamp: 1772721365749 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2025.2.0-hb617929_1.conda - sha256: a4a1cd320fa010a45d01f438dc3431b7a60271ee19188a901f884399fe744268 - md5: e4cc6db5bdc8b554c06bf569de57f85f - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 12377488 - timestamp: 1753211149903 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.0.0-hb56ce9e_1.conda - sha256: 01a28c0bd1f205b3800e7759e30bc8e8a75836e0d5a73a745b4da42837bbb174 - md5: b43b96578573ddbcc8d084ae6e44c964 + size: 207050 + timestamp: 1782213592772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-cpu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: eecc040a7838752a2dff9b4435a4c59bbc67b83e0c880457935b968206cb20b5 + md5: 7288f979a74cfe3fd4b32d8a0dc7baa4 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 13173323 - timestamp: 1772727282718 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2025.2.0-hb617929_1.conda - sha256: 03ebf700586775144ca5913f401393a386b9a1d7a7cfcba4494830063ca5eb92 - md5: b846fe6c158ca417e246122172d68d3a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - ocl-icd >=2.3.3,<3.0a0 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 10815480 - timestamp: 1753211182626 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.0.0-hb56ce9e_1.conda - sha256: 720b87e1d5f1a10c577e040d4bf425072a978e925c6dfab8b1551bc848007c94 - md5: 26e8e92c90d1a22af6eac8e9507d9b8f + size: 13637410 + timestamp: 1782219135415 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-gpu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: a47442ce578b022e19a306f963536a108cc79385f4e09d57a14a849b6a864604 + md5: c0a258b12f0c18c476b8344dbd6db8d5 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - - ocl-icd >=2.3.3,<3.0a0 + - ocl-icd >=2.3.4,<3.0a0 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 11402462 - timestamp: 1772727323957 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2025.2.0-hb617929_1.conda - sha256: b6dbc342293d6ce0c7b37c9f29f734b3e1856cff9405a02fb33cedd1b36528e6 - md5: 86fd4c25f6accaf646c86adf0f1382d3 - depends: - - __glibc >=2.17,<3.0.a0 - - level-zero >=1.23.1,<2.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - - tbb >=2021.13.0 - size: 1261488 - timestamp: 1753211212823 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.0.0-hb56ce9e_1.conda - sha256: df7eb2b23a1af38f2cd2281353309f2e2a04da1374ecedc7c6745c2a67ba617c - md5: 01ba8b179ac45b2b37fe2d4225dddcc7 + size: 12367381 + timestamp: 1782219178219 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-intel-npu-plugin-2026.2.1-h1f0fae8_1.conda + sha256: 45a91feb68ccce90ad0fa86520572233ca20be56deae0c920f86133d020ad1e8 + md5: c214b149e108e92672e0ee097ebe16f7 depends: - __glibc >=2.17,<3.0.a0 - - level-zero >=1.28.2,<2.0a0 + - level-zero >=1.29.0,<2.0a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 - - tbb >=2022.3.0 + - tbb >=2023.0.0 license: Apache-2.0 license_family: APACHE - size: 1994640 - timestamp: 1772727360780 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2025.2.0-hd41364c_1.conda - sha256: 334733396d4c9a9b2b2d7d7d850e8ee8deca1f9becd0368d106010076ceb20ca - md5: 75e595d9f2019a60f6dcb500266da615 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - size: 204890 - timestamp: 1753211224567 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.0.0-hd41364c_1.conda - sha256: 8e7356b0b80b3f180615e264694d6811d388b210155d419553ff64e42f78ffa0 - md5: aa002c4d343b01cdcc458c95cd071d1b + size: 2630818 + timestamp: 1782219217519 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-ir-frontend-2026.2.1-hd41364c_1.conda + sha256: ebeba9a3ac9505ee69b556865b7d1b9fbbad01ca1ebe6a4249ff62c3dc677b47 + md5: 2d946aebcf06e9ba438880987050e975 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE - size: 192778 - timestamp: 1772727380069 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2025.2.0-he07c6df_1.conda - sha256: 935341a98e129d3fd792609de5e85b959c3b31661d1a95c2a655771611383a05 - md5: f86c16f077043c9b1e87dbc07bf5ec42 - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - - pugixml >=1.15,<1.16.0a0 - size: 195451 - timestamp: 1753203267888 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.0.0-he07c6df_1.conda - sha256: 5d191b9d29fb2bbaca95bcd7325fbc3329c1049eccda4b84cfd79c64d4b6dc83 - md5: 0946447f9717222c95c24f958d73dba9 + size: 201061 + timestamp: 1782219232657 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-ir-frontend-2026.2.1-he07c6df_1.conda + sha256: 20fe9837f7ef18faca2f6fa0c722fcfd3cf363444b2d0835c7e3a1c8a6a4bbff + md5: 6141a1a2540c990df35ee4c35d6ee4d1 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 - pugixml >=1.15,<1.16.0a0 license: Apache-2.0 license_family: APACHE - size: 185648 - timestamp: 1772721380070 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2025.2.0-h1862bb8_1.conda - sha256: 3937b028e7192ed3805581ac0ea171725843056c8544537754fad45a1791e864 - md5: 68f5ad9d8e3979362bb9dfc9388980aa - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - size: 1724503 - timestamp: 1753211235981 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.0.0-h7a07914_1.conda - sha256: 35a68214201e807bd9a31f94e618cb6a5385198e89eef46dde6c122cff77da58 - md5: 218084544c2e7e78e4b8877ec37b8cdb + size: 196276 + timestamp: 1782213602819 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-onnx-frontend-2026.2.1-h607c73d_1.conda + sha256: 7b105c0102356352d6d9518a112ff6343dab6b8f32c837809117cd26cbf006df + md5: 3bd3599825189418ea14b2c9da3a6d87 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 1860687 - timestamp: 1772727397981 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2025.2.0-h07d5dce_1.conda - sha256: 576c1ba122fb58d1c0ea6540d5480809196a884d3e56c05ab49b97ccc99e2c90 - md5: f8d90a982f95366614c568eac3157a90 - depends: - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - size: 1530030 - timestamp: 1753203281815 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.0.0-h558496d_1.conda - sha256: 9496ef9b24c3dcf3dda58a11360095fdd427d828d33705a1d9b90a4f1a5783c3 - md5: 55e11d3e2f930299df66be96928e432d + size: 1944558 + timestamp: 1782219246849 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-onnx-frontend-2026.2.1-h6fc7987_1.conda + sha256: f4f0ffdc53e266cd66e019525fdcabb5544bd89b043b12cf73d37e7128dd32ec + md5: 284180cfb8d20ce6218531fdff158315 depends: - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 1665115 - timestamp: 1772721394860 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2025.2.0-h1862bb8_1.conda - sha256: c7ac3d4187323ab37ef62ec0896a41c8ca7da426c7f587494c72fe74852269e5 - md5: a032d03468dee9fb5b8eaf635b4571c2 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - size: 744746 - timestamp: 1753211248776 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.0.0-h7a07914_1.conda - sha256: cb37b717480207a66443a93d4342cf88210a74c0820fc0edd70e4fc791a64779 - md5: 74915e5e271ef76a89f711eff5959a75 + size: 1770837 + timestamp: 1782213614201 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-paddle-frontend-2026.2.1-h607c73d_1.conda + sha256: af45c03d41ebe0b48c28b68be31ee919cb801ac5077164808a66db515ad6a316 + md5: 91e198085bff9d8fa02d4d947f026ba8 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 684224 - timestamp: 1772727417276 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2025.2.0-h07d5dce_1.conda - sha256: b080ca352d8d4526b73815bdbdb12ba5caf5de4621c10e9ad41eac73a7a6a713 - md5: 098597aa6f19b2851f295f47c7105658 - depends: - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - size: 674194 - timestamp: 1753203295461 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.0.0-h558496d_1.conda - sha256: 9e04b6c6b370e46bee7306afc9bc76e725042e981102f4c7b6b697b061c7324a - md5: d26f5d445e0545ce674b11f496dba1a0 + size: 690240 + timestamp: 1782219261154 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-paddle-frontend-2026.2.1-h6fc7987_1.conda + sha256: 5ab86f5cad02ff69d87776ddf9bad2c45c84f38579a8cf16464c03436d4c2362 + md5: b45b927c4d1b1128badee6e44146fd62 depends: - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 631754 - timestamp: 1772721411589 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2025.2.0-hecca717_1.conda - sha256: 2d4a680a16509b8dd06ccd7a236655e46cc7c242bb5b6e88b83a834b891658db - md5: cd40cf2d10a3279654c9769f3bc8caf5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - size: 1243134 - timestamp: 1753211260154 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.0.0-hecca717_1.conda - sha256: 086469e5cd8bfde48975fe8641a7d6924e3da00d75dd06c99e03a78df03a0568 - md5: 559ef86008749861a53025f669004f18 + size: 645700 + timestamp: 1782213626352 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-pytorch-frontend-2026.2.1-hecca717_1.conda + sha256: e6353874a36143ffb7db7ec2c3767fd5e3434a8eeff41a569bc46e68259f668f + md5: 152d6694f1d05b53319b8376cdd811e4 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 1185558 - timestamp: 1772727435039 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2025.2.0-hfae3067_1.conda - sha256: 0dddd3e274c156a2b8ced3009444d99c04d75ab50a748968b94d3890b6dfab65 - md5: d00d92fbb31f8f9dc2cfb78f44286925 - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - size: 1123835 - timestamp: 1753203307507 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.0.0-hfae3067_1.conda - sha256: e62d016274d9aeae8033a37cd742162637ca37cd10a5d436934c2709c58240f2 - md5: 0fd361e9e722e741146d818284feca74 + size: 1226625 + timestamp: 1782219274006 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-pytorch-frontend-2026.2.1-hfae3067_1.conda + sha256: 6a45d6ec341451dacbb7fa379de9a4d13e613fba6d15f7597c5e8dd529c73382 + md5: a82793a12b99b1d04ce77ebe0fd62e51 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 1091266 - timestamp: 1772721428223 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2025.2.0-h0767aad_1.conda - sha256: 311ec1118448a28e76f0359c4393c7f7f5e64761c48ac7b169bf928a391eae77 - md5: f71c6b4e342b560cc40687063ef62c50 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - - snappy >=1.2.2,<1.3.0a0 - size: 1325059 - timestamp: 1753211272484 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.0.0-h78e8023_1.conda - sha256: 3a9a404bc9fd39e7395d49f4bd8facb58a01a31aeceabe8723a9d4f8eb5cc381 - md5: fb20f4234bc0e29af1baa13d35e36785 + size: 1129309 + timestamp: 1782213636874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-frontend-2026.2.1-h21c0c73_1.conda + sha256: cffe112815b8eb57528fdfdf8b39f6a0915884291147dab5bc2066d2bf123031 + md5: 89d2455ec2f065786856b0cd2ac1c0c6 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h1f0fae8_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 - snappy >=1.2.2,<1.3.0a0 license: Apache-2.0 license_family: APACHE - size: 1257870 - timestamp: 1772727453738 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2025.2.0-h38473e3_1.conda - sha256: fcdb5623415c9f5d8c8635f579e5706647e2c97b543ebba621b5b31df096de3d - md5: b42a48c1052c5b576170212c2a834614 - depends: - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libprotobuf >=6.31.1,<6.31.2.0a0 - - libstdcxx >=14 - - snappy >=1.2.2,<1.3.0a0 - size: 1224816 - timestamp: 1753203320621 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.0.0-h2cb6e3c_1.conda - sha256: f4ecfddd9583fa475e2e637ac9226b6ae20482abda53bf4339a29407e6c05cb3 - md5: f2c28f19267bfcdf9ec9ed4406a89d0b + size: 1284650 + timestamp: 1782219287644 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-frontend-2026.2.1-h9dfe790_1.conda + sha256: cef784d6f72292993c06acc368c157f2093a48acf8556cdbdb6ecedf268e5b42 + md5: 535057ced1e60c5038e9adc80a0b2103 depends: - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 - - libprotobuf >=6.33.5,<6.33.6.0a0 + - libopenvino 2026.2.1 h9a8427e_1 + - libprotobuf >=7.35.1,<7.35.2.0a0 - libstdcxx >=14 - snappy >=1.2.2,<1.3.0a0 license: Apache-2.0 license_family: APACHE - size: 1184078 - timestamp: 1772721443833 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2025.2.0-hecca717_1.conda - sha256: 581f4951e645e820c4a6ffe40fb0174b56d6e31fb1fefd2d64913fea01f8f69e - md5: fd9dacd7101f80ff1110ea6b76adb95d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libopenvino 2025.2.0 hb617929_1 - - libstdcxx >=14 - size: 497047 - timestamp: 1753211285617 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.0.0-hecca717_1.conda - sha256: e7cee37c92ed0b62c0458c13937b6ad66319f1879f236a31c3a67391a999f429 - md5: 0f0281435478b981f672a44d0029018c + size: 1215232 + timestamp: 1782213648342 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-tensorflow-lite-frontend-2026.2.1-hecca717_1.conda + sha256: 142e7b24173ca8c32dbdb29c60f33a56ffb21a4ed733c9d6ab160c3a213ff52e + md5: c1a50f20847df0a8cb462138153ab46f depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libopenvino 2026.0.0 hb56ce9e_1 + - libopenvino 2026.2.1 h1f0fae8_1 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 456585 - timestamp: 1772727473378 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2025.2.0-hfae3067_1.conda - sha256: cd4651c37e45fe6779a32ebfb3000fb3e9742409cd9bd0ac141c130b2f8f8d56 - md5: 274b11e7ed763c4964a6b6d2130ec1cb - depends: - - libgcc >=14 - - libopenvino 2025.2.0 hcd21e76_1 - - libstdcxx >=14 - size: 456714 - timestamp: 1753203333676 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.0.0-hfae3067_1.conda - sha256: b0f32488fd11cd8ed563ad01934360df383f720a2adecf6d36aa3ea2565baab7 - md5: 0a160f00a4050e3bf4749129750d0303 + size: 501906 + timestamp: 1782219300706 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-tensorflow-lite-frontend-2026.2.1-hfae3067_1.conda + sha256: 656276bd4072859725a47516c5954a91b408dd65a0d2d3f923964634a29d0ded + md5: 04e867fd452233f43885090c1533af28 depends: - libgcc >=14 - - libopenvino 2026.0.0 h1915271_1 + - libopenvino 2026.2.1 h9a8427e_1 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 428895 - timestamp: 1772721459028 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.5.2-hd0c01bc_0.conda - sha256: 786d43678d6d1dc5f88a6bad2d02830cfd5a0184e84a8caa45694049f0e3ea5f - md5: b64523fb87ac6f87f0790f324ad43046 - depends: - - libgcc >=13 - - __glibc >=2.17,<3.0.a0 - license: BSD-3-Clause - license_family: BSD - size: 312472 - timestamp: 1744330953241 + size: 468695 + timestamp: 1782213660401 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopus-1.6.1-h280c20c_0.conda sha256: f1061a26213b9653bbb8372bfa3f291787ca091a9a3060a10df4d5297aad74fd md5: 2446ac1fe030c2aa6141386c1f5a6aed @@ -9326,15 +8229,6 @@ packages: license_family: BSD size: 324993 timestamp: 1768497114401 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.5.2-h86ecc28_0.conda - sha256: c887543068308fb0fd50175183a3513f60cd8eb1defc23adc3c89769fde80d48 - md5: 44b2cfec6e1b94723a960f8a5e6206ae - depends: - - libgcc >=13 - license: BSD-3-Clause - license_family: BSD - size: 357115 - timestamp: 1744331282621 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopus-1.6.1-h80f16a2_0.conda sha256: 059214f037fa5e51080f5aced39466993b2311a01d871086bd6d2a59bfbf59b5 md5: c781f98ca7b987f968369bc768b2cd55 @@ -9344,17 +8238,6 @@ packages: license_family: BSD size: 383586 timestamp: 1768497303687 -- conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6-h6a83c73_0.conda - sha256: 53ead19c11a1182f05d30a15352a05cc1fdf8cbd03e8f57b75ae34b570953d4a - md5: 1ff86b588aaa12462f320cc27e77bc6d - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - license: BSD-3-Clause - license_family: BSD - size: 307249 - timestamp: 1765847775174 - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda sha256: c3678f111866235b44fa65265966abae7d90b6387178f1459afaedcee8b4a997 md5: 0ed21da5b6e3a0393e05762b3cce2878 @@ -9366,300 +8249,251 @@ packages: license_family: BSD size: 307373 timestamp: 1768497136248 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda - sha256: 0bd91de9b447a2991e666f284ae8c722ffb1d84acb594dbd0c031bd656fa32b2 - md5: 70e3400cbbfa03e96dcde7fc13e38c7b +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.19-hb03c661_0.conda + sha256: f41721636a7c2e51bc2c642e1127955ab9c81145470714fdaac44d4d09e4af41 + md5: 33082e13b4769b48cfeb648e15bfe3fc depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 license: MIT license_family: MIT - size: 28424 - timestamp: 1749901812541 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.18-h86ecc28_0.conda - sha256: 7641dfdfe9bda7069ae94379e9924892f0b6604c1a016a3f76b230433bb280f2 - md5: 5044e160c5306968d956c2a0a2a440d6 + size: 29147 + timestamp: 1773533027610 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda + sha256: 5d26d751b7cc4b66e28ed1ae75900956600aaa5c5d874d5a8cf106d3aff834d3 + md5: 462239e256bc180c9c45dd049ba797ee depends: - - libgcc >=13 + - libgcc >=14 license: MIT license_family: MIT - size: 29512 - timestamp: 1749901899881 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.53-h421ea60_0.conda - sha256: 8acdeb9a7e3d2630176ba8e947caf6bf4985a5148dec69b801e5eb797856688b - md5: 00d4e66b1f746cb14944cad23fffb405 + size: 30294 + timestamp: 1773533057559 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda + sha256: 26cbbd3d7b91801826c779c3f7e87d071856d5cbe3d55b22777ca0d984fb02ed + md5: e6324dfe6c02e0736bb9235f8ef3c8a6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement - size: 317748 - timestamp: 1764981060755 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.55-h421ea60_0.conda - sha256: 36ade759122cdf0f16e2a2562a19746d96cf9c863ffaa812f2f5071ebbe9c03c - md5: 5f13ffc7d30ffec87864e678df9957b4 + - libstdcxx >=14 + - libdovi >=3.3.2,<4.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - lcms2 >=2.19,<3.0a0 + - shaderc >=2026.2,<2026.3.0a0 + license: LGPL-2.1-or-later + size: 549348 + timestamp: 1777835950707 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libplacebo-7.360.1-h07e46df_0.conda + sha256: 3af9437023ec7fa8f9bf5e390b7f6ad3df403aa736b0305121d1734af2d0620e + md5: 1909ad87fcdfa8397e3568d01500dc8d depends: + - libstdcxx >=14 - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement - size: 317669 - timestamp: 1770691470744 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.53-h1abf092_0.conda - sha256: 31c2b22aa4cb2b8d1456ad5aa92d1b95a8db234572cd29772c58e0b0c5be8823 - md5: 7591d867dbcba9eb7fb5e88a5f756591 + - lcms2 >=2.19,<3.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libdovi >=3.3.2,<4.0a0 + - shaderc >=2026.2,<2026.3.0a0 + license: LGPL-2.1-or-later + size: 560813 + timestamp: 1777835957369 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda + sha256: 377cfe037f3eeb3b1bf3ad333f724a64d32f315ee1958581fc671891d63d3f89 + md5: eba48a68a1a2b9d3c0d9511548db85db depends: + - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement - size: 340043 - timestamp: 1764981067899 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.55-h1abf092_0.conda - sha256: c7378c6b79de4d571d00ad1caf0a4c19d43c9c94077a761abb6ead44d891f907 - md5: be4088903b94ea297975689b3c3aeb27 + size: 317729 + timestamp: 1776315175087 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda + sha256: 483eaa53da40a6a3e558709d9f7b1ca388735364ae21a1ba58cf942514649c92 + md5: f51503ac45a4888bce71af9027a2ecc9 depends: - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement - size: 340156 - timestamp: 1770691477245 -- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.53-h7351971_0.conda - sha256: e5d061e7bdb2b97227b6955d1aa700a58a5703b5150ab0467cc37de609f277b6 - md5: fb6f43f6f08ca100cb24cff125ab0d9e - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement - size: 383702 - timestamp: 1764981078732 -- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.55-h7351971_0.conda - sha256: db23f281fa80597a0dc0445b18318346862602d7081ed76244df8cc4418d6d68 - md5: 43f47a9151b9b8fc100aeefcf350d1a0 + size: 341202 + timestamp: 1776315188425 +- conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda + sha256: 218913aeee391460bd0e341b834dbd9c6fa6ae0a4276c0c300266cc99a816a28 + md5: 52f1280563f3b48b5f75414cd2d15dd1 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: zlib-acknowledgement - size: 383155 - timestamp: 1770691504832 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_2.conda - sha256: 1679f16c593d769f3dab219adb1117cbaaddb019080c5a59f79393dc9f45b84f - md5: 94cb88daa0892171457d9fdc69f43eca + size: 385227 + timestamp: 1776315248638 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda + sha256: f7232cb79a31f5a5bcd499aea930b469cde8b96d26db9541022493fd274d2a6e + md5: 6c9103e7ea739a3bb3505da49a4708c1 depends: - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4645876 - timestamp: 1760550892361 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.31.1-h49aed37_4.conda - sha256: 0ef142ac31e6fd59b4af89ac800acb6deb3fbd9cc4ccf070c03cc2c784dc7296 - md5: 07479fc04ba3ddd5d9f760ef1635cfa7 + - openldap >=2.6.13,<2.7.0a0 + - openssl >=3.5.7,<4.0a0 + license: PostgreSQL + size: 2709008 + timestamp: 1782580447454 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda + sha256: 8badce81df7b86fde16ad28dea9d5d65ebe318d6eb48865d10fbd4bd296cd152 + md5: aa592f45ebe4bb5a4dd228fdf006b617 depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 + - icu >=78.3,<79.0a0 + - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4372578 - timestamp: 1766316228461 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda - sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 - md5: 11ac478fa72cf12c214199b8a96523f4 + - openldap >=2.6.13,<2.7.0a0 + - openssl >=3.5.7,<4.0a0 + license: PostgreSQL + size: 2911832 + timestamp: 1782580350945 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h2840a7c_2.conda + sha256: b5ac3938186516c1091b96414c34f90255da2a3bbd736a0712b22bbf4b5ebf02 + md5: 729db8acaadb9a5e5bb2dc3d9ac84ae4 depends: - __glibc >=2.17,<3.0.a0 - libabseil * cxx17* - - libabseil >=20260107.0,<20260108.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD - size: 3638698 - timestamp: 1769749419271 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h2cf3c76_2.conda - sha256: e1bfa4ee03ddfa3a5e347d6796757a373878b2f277ed48dbc32412b05e16e776 - md5: 8eb7b485dcbb81166e340a07ccb40e67 + size: 3774596 + timestamp: 1783168720126 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-7.35.1-h30ec8a2_2.conda + sha256: df3cd7057c4a1d229bff2c9060c03425a42fb12d7d7e7fe985f63907c9e88922 + md5: b9c3b50124bf5fd1ff3ed97ee55f6266 depends: - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 + - libabseil >=20260526.0,<20260527.0a0 - libgcc >=14 - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: BSD-3-Clause license_family: BSD - size: 4465754 - timestamp: 1760550264433 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h2cf3c76_4.conda - sha256: 27c496b35b0a40fba1cc0cf836f313e4a302975cce81d7997f76f66894f276d9 - md5: d6e6b7bbbe4f3b5348322afc928ffbeb + size: 3597785 + timestamp: 1783168080031 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda + sha256: 7c9e562842f193f772ef0ba681f238a2d9e5ef637588b6e46eb30cc6aa1940c8 + md5: fa63517815747363c41b439ff9301db1 depends: - - libabseil * cxx17* - - libabseil >=20250512.1,<20250513.0a0 + - __glibc >=2.28,<3.0.a0 - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - size: 4218080 - timestamp: 1766315327959 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.33.5-h1f88751_0.conda - sha256: f68780642c215b93f4991c43d88ab0af8a08e66826e68affc65b8905cc21d86b - md5: 7f4a589ae616399b7e375053e82a3b12 + - libharfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - fribidi >=1.0.16,<2.0a0 + license: MIT + license_family: MIT + size: 29441 + timestamp: 1782807076031 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda + sha256: b287b67ba86d625bdaae919bac0a62ca6f5bc61509f034003df3c6b40f584a92 + md5: bf7fa2b700ba2c7b682aec5db14043c7 depends: - - libabseil * cxx17* - - libabseil >=20260107.0,<20260108.0a0 - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - size: 3465308 - timestamp: 1769748410724 -- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.0-h61e6d4b_0.conda - sha256: 960b137673b2b8293e2a12d194add72967b3bf12fcdf691e7ad8bd5c8318cec3 - md5: 91e6d4d684e237fba31b9815c4b40edf + - __glibc >=2.28,<3.0.a0 + - fribidi >=1.0.16,<2.0a0 + - libharfbuzz >=14.2.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + license: MIT + license_family: MIT + size: 29528 + timestamp: 1782807084739 +- conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda + sha256: 79ca55f7202daa560bffafcf7aef435e48618fe91a5243b8e4a6ed4edfbe63bc + md5: e5ab537cdd3462f26be2803209142913 depends: - - __glibc >=2.17,<3.0.a0 - - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.3,<3.0a0 - - libgcc >=14 - - libglib >=2.86.0,<3.0a0 - - libxml2-16 >=2.14.6 - - pango >=1.56.4,<2.0a0 - constrains: - - __glibc >=2.17 - license: LGPL-2.1-or-later - size: 3421977 - timestamp: 1759327942156 -- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda - sha256: 38b3189cf246f7265e06917f32d046ac375117c88834d045efe73ec48ceacc59 - md5: d62da3d560992bfa2feb611d7be813b8 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libharfbuzz >=14.2.1 + - fribidi >=1.0.16,<2.0a0 + license: MIT + license_family: MIT + size: 29296 + timestamp: 1782807186901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda + sha256: 5571bd8239d71961d4e3ce972f865b3ea95a91ce0b53d5749fe2dd24254ddbda + md5: 492c8d9b1c564c2e948b6cb4ba0f8261 depends: - __glibc >=2.17,<3.0.a0 - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.5,<3.0a0 - - libgcc >=14 - - libglib >=2.86.4,<3.0a0 - - libxml2-16 >=2.14.6 - - pango >=1.56.4,<2.0a0 - constrains: - - __glibc >=2.17 - license: LGPL-2.1-or-later - size: 4011590 - timestamp: 1771399906142 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.0-h8171147_0.conda - sha256: b6cb38e95a447a04e624b6070981899e18c03f71915476fe024dadf384f48f15 - md5: 7e4a8318e73ba685615f90bff926bfe4 - depends: - - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.3,<3.0a0 + - fontconfig >=2.18.0,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 - libgcc >=14 - - libglib >=2.86.0,<3.0a0 + - libglib >=2.88.1,<3.0a0 - libxml2-16 >=2.14.6 - pango >=1.56.4,<2.0a0 constrains: - __glibc >=2.17 license: LGPL-2.1-or-later - size: 2995492 - timestamp: 1759335330016 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.60.2-h8171147_0.conda - sha256: d02d3b23aa58d7767b820289b5b50653e73d70ae32f6ee5b88f63c5c5d96c2de - md5: 1d6f1aff501c8104f7292ab787d65f15 + size: 3476570 + timestamp: 1780450632624 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda + sha256: c95ac70755863d8522c1115b54afca86148ea25366b616aa84c993c2ca54b9ce + md5: 38209cc04b3e3e5624c534bc703e6939 depends: - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.5,<3.0a0 + - fontconfig >=2.18.0,<3.0a0 + - fonts-conda-ecosystem + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 - libgcc >=14 - - libglib >=2.86.4,<3.0a0 + - libglib >=2.88.1,<3.0a0 - libxml2-16 >=2.14.6 - pango >=1.56.4,<2.0a0 constrains: - __glibc >=2.17 license: LGPL-2.1-or-later - size: 4016799 - timestamp: 1771406266442 -- conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_0.conda - sha256: a0e8d89c36e555149f3ba2d58bb96f1b77e8ed7924db8a242ee0b0fb613c588d - md5: 5b38f886aa0548d6f6f5d1a30b3ae0ca + size: 3052373 + timestamp: 1780456154830 +- conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda + sha256: 6f678be6074b79fe754660d16857a6edba73dd197ad92086250dc38c11b179ab + md5: 3fffc63af7b943cde57aa72f5ffe6048 depends: - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.3,<3.0a0 - - libglib >=2.86.0,<3.0a0 + - gdk-pixbuf >=2.44.6,<3.0a0 + - harfbuzz >=14.2.0 + - libglib >=2.88.1,<3.0a0 - libxml2-16 >=2.14.6 - pango >=1.56.4,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - license: LGPL-2.1-or-later - size: 3336793 - timestamp: 1759328441569 -- conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.60.0-hd5e4115_1.conda - sha256: 3d06becb70212a7ed609eea07728b6545ddcff4889844290fed14a5d2fc18cd9 - md5: a105938a4fae24539c89de6e7671d279 - depends: - - cairo >=1.18.4,<2.0a0 - - gdk-pixbuf >=2.44.5,<3.0a0 - - libglib >=2.86.4,<3.0a0 - - libxml2-16 >=2.14.6 - - pango >=1.56.4,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: LGPL-2.1-or-later - size: 2877820 - timestamp: 1771301866036 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_16.conda - sha256: 50d8082749e760454fb1489c2a47c6fa80cbf3893ec1c1a085747d46484ffd7f - md5: 0841a98bda756af037eb07d36cacada5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 - - libstdcxx >=15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 7660762 - timestamp: 1765256861607 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_18.conda - sha256: 0329e23d54a567c259adc962a62172eaa55e6ca33c105ef67b4f3cdb4ef70eaa - md5: ff754fbe790d4e70cf38aea3668c3cb3 + license: LGPL-2.1-or-later + size: 3361405 + timestamp: 1780451179155 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda + sha256: 7a58892a52739ce4c0f7109de9e91b4353104748eb04fc6441d88e8af444ba99 + md5: 67eef12ce33f7ff99900c212d7076fc2 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15.2.0 - libstdcxx >=15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 8095113 - timestamp: 1771378289674 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_16.conda - sha256: 71be6819f928574caf929aa4764a69e3df0429d686a4c5d6a8985b4c2c14b965 - md5: 4e30740acf8527cc06ca6a8d81432536 - depends: - - libgcc >=15.2.0 - - libstdcxx >=15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 7460968 - timestamp: 1765257008136 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_18.conda - sha256: 10c42c4e12972088cf0d5f57393f83e6727ad31bdb38ae46935641861f394698 - md5: 589c6fc3e744df871bbbf703f1e6ce98 + size: 7930689 + timestamp: 1778269054623 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda + sha256: 8115604f113fe2b7be95b2d22183a4dda5779c1cc6db4b826af800581498b4b3 + md5: 95210a1edbd7fc6e12afc9f8276f450a depends: - libgcc >=15.2.0 - libstdcxx >=15.2.0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 7164557 - timestamp: 1771378185265 + size: 7067965 + timestamp: 1778268796086 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda sha256: 57cb5f92110324c04498b96563211a1bca6a74b2918b1e8df578bfed03cc32e4 md5: 067590f061c9f6ea7e61e3b2112ed6b3 @@ -9693,536 +8527,242 @@ packages: license_family: LGPL size: 406978 timestamp: 1765181892661 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda - sha256: 64e5c80cbce4680a2d25179949739a6def695d72c40ca28f010711764e372d97 - md5: 7af961ef4aa2c1136e11dd43ded245ab +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda + sha256: b677bbf1c339d894757c3dcfbb2f88649e499e4991d70ae09a1466da9a6c92d6 + md5: 965e4d531b588b2e42f66fd8e48b056c depends: - - libgcc >=14 - __glibc >=2.17,<3.0.a0 + - libgcc >=14 license: ISC purls: [] - size: 277661 - timestamp: 1772479381288 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda - sha256: d6112f3a7e7ffcd726ce653724f979b528cb8a19675fc06016a5d360ef94e9a4 - md5: 9e1fe4202543fa5b6ab58dbf12d34ced + size: 269272 + timestamp: 1779163468406 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.22-h80f16a2_1.conda + sha256: 36fb7afb28fecb8d678611e05a96b1e135510369b7fe5e353e407308ef1f6796 + md5: 5cb9cebc948d70e6e7c81670f911dab3 depends: - libgcc >=14 license: ISC purls: [] - size: 272649 - timestamp: 1772479384085 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.21-h6a83c73_3.conda - sha256: d915f4fa8ebbf237c7a6e511ed458f2cfdc7c76843a924740318a15d0dd33d6d - md5: da2aa614d16a795b3007b6f4a1318a81 + size: 283426 + timestamp: 1779163468728 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda + sha256: de45b71224da77a1c3a7dd48d8885eb957c9f05455d4f0828463293e7144330f + md5: 7d5abf7ca1bd00b43d273f44d93d05dc depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 license: ISC purls: [] - size: 276860 - timestamp: 1772479407566 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-h0c1763c_0.conda - sha256: 6f0e8a812e8e33a4d8b7a0e595efe28373080d27b78ee4828aa4f6649a088454 - md5: 2e1b84d273b01835256e53fd938de355 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 938979 - timestamp: 1764359444435 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.1-hf4e2dac_1.conda - sha256: d614540c55f22ad555633f75e174089018ddfc65c49f447f7bbdbc3c3013bec1 - md5: b1f35e70f047918b49fb4b181e40300e - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 943451 - timestamp: 1766319676469 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 - md5: fd893f6a3002a635b5e50ceb9dd2c0f4 + size: 280234 + timestamp: 1779164124739 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.3-h0c1763c_0.conda + sha256: 365376f4815e5e80def2b3462a2419708b7c292da0da85278386c2618621fff4 + md5: 4aed8e657e9ff156bdbe849b4df44389 depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 951405 - timestamp: 1772818874251 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.1-h022381a_0.conda - sha256: e394dd772b71dbcd653d078f3aacf6e26e3478bd6736a687ab86e463a2f153a8 - md5: 233efdd411317d2dc5fde72464b3df7a - depends: - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 939207 - timestamp: 1764359457549 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.1-h10b116e_1.conda - sha256: f80893874d5ba5ac754b2d65ec392c46841bfe57bd89499aa0e1965c720babbd - md5: 9fd37e702b4e7c85462fe79baf13974d + size: 962119 + timestamp: 1782519076616 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.53.3-h10b116e_0.conda + sha256: a835400072fb638fb582ee9fc2271169da84cbcad664d28b852610201116027e + md5: 2cd50877f494b34383af22560ced8b04 depends: - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - size: 943924 - timestamp: 1766319577347 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 - md5: 77891484f18eca74b8ad83694da9815e - depends: - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 license: blessing purls: [] - size: 952296 - timestamp: 1772818881550 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_0.conda - sha256: a976c8b455d9023b83878609bd68c3b035b9839d592bd6c7be7552c523773b62 - md5: f92bef2f8e523bb0eabe60099683617a - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: blessing - size: 1291059 - timestamp: 1764359545703 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_1.conda - sha256: d6d86715a1afe11f626b7509935e9d2e14a4946632c0ac474526e20fc6c55f99 - md5: be65be5f758709fc01b01626152e96b0 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: blessing - size: 1292859 - timestamp: 1766319616777 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.52.0-hf5d6505_0.conda - sha256: 5fccf1e4e4062f8b9a554abf4f9735a98e70f82e2865d0bfdb47b9de94887583 - md5: 8830689d537fda55f990620680934bb1 + size: 968420 + timestamp: 1782519054102 +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.3-hf5d6505_0.conda + sha256: 692dfb73a22c873656d5e393b8f1e2b019a3c8a6486c97cb6900552e64e38c25 + md5: 051f1b2228e7517a2ef8cca5146c8967 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: blessing purls: [] - size: 1297302 - timestamp: 1772818899033 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_15.conda - sha256: 2648485aa2dcd5ca385423841a728f262458aec5d814a79da5ab75098e223e3f - md5: fccfb26375ec5e4a2192dee6604b6d02 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_15 - constrains: - - libstdcxx-ng ==15.2.0=*_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 5856371 - timestamp: 1764836166363 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - sha256: 813427918316a00c904723f1dfc3da1bbc1974c5cfe1ed1e704c6f4e0798cbc6 - md5: 68f68355000ec3f1d6f26ea13e8f525f - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_16 - constrains: - - libstdcxx-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 5856456 - timestamp: 1765256838573 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e - md5: 1b08cd684f34175e4514474793d44bcb + size: 1315909 + timestamp: 1782519131898 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda + sha256: dff1058c76ec6b8759e41cefa2508162d00e4a5e6721aa68ec3fd10094e702dc + md5: 5794b3bdc38177caf969dabd3af08549 depends: - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_18 + - libgcc 15.2.0 he0feb66_19 constrains: - - libstdcxx-ng ==15.2.0=*_18 + - libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5852330 - timestamp: 1771378262446 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_15.conda - sha256: f6347ce1d1a8a9ecfa16fc118594b0a5cab9194a8dcc7e79cd02a7497822d1d2 - md5: 2873f805cdabcf33b880b19077cf6180 - depends: - - libgcc 15.2.0 h8acb6b2_15 - constrains: - - libstdcxx-ng ==15.2.0=*_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - size: 5540090 - timestamp: 1764836183565 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - sha256: 4db11a903707068ae37aa6909511c68e9af6a2e97890d1b73b0a8d87cb74aba9 - md5: 52d9df8055af3f1665ba471cce77da48 - depends: - - libgcc 15.2.0 h8acb6b2_16 - constrains: - - libstdcxx-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 5541149 - timestamp: 1765256980783 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 - md5: f56573d05e3b735cb03efeb64a15f388 + size: 5852044 + timestamp: 1778269036376 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_19.conda + sha256: 1dadc45e599f510dd5f97141dddcdbb9844d9f1430c1f3a38075cf1c58f87b4e + md5: 543fbc8d71f2a0baf04cf88ce96cb8bb depends: - - libgcc 15.2.0 h8acb6b2_18 + - libgcc 15.2.0 h8acb6b2_19 constrains: - - libstdcxx-ng ==15.2.0=*_18 + - libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5541411 - timestamp: 1771378162499 -- conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_16.conda - sha256: 6d4b74aa2b668ea3927615055ff7557c50628f073a00a504d3fbedbb6eccca43 - md5: 7ca89b8b412282e8b8b644f55056279e + size: 5546559 + timestamp: 1778268777463 +- conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_19.conda + sha256: 39e3ccf4fa64e24196e57ca34387bdd8f7c749bf3beab1a849244e6923c288d2 + md5: fff457de671788d3df3d5cb246caec3e depends: - - libgcc 15.2.0 h8ee18e1_16 + - libgcc 15.2.0 h8ee18e1_19 - libwinpthread >=12.0.0.r4.gg4f2fc60ca constrains: - - libstdcxx-ng ==15.2.0=*_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 6461950 - timestamp: 1765260469617 -- conda: https://conda.anaconda.org/conda-forge/win-64/libstdcxx-15.2.0-hae5796f_18.conda - sha256: 7134b90a850f0e14f15bd0f0218fd728f19cd5c58420a90c2f561f58272b8519 - md5: 7c09facd8f5aced6b4c146e1c4053e50 - depends: - - libgcc 15.2.0 h8ee18e1_18 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - libstdcxx-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 6462596 - timestamp: 1771382223989 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_116.conda - sha256: cb331c51739cc68257c7d7eef0e29c355b46b2d72f630854506dbc99240057c1 - md5: 2730e07e576ffbd7bf13f8de34835d41 - depends: - - __unix - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 20763949 - timestamp: 1765256724565 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_118.conda - sha256: 138ee40ba770abf4556ee9981879da9e33299f406a450831b48c1c397d7d0833 - md5: a50630d1810916fc252b2152f1dc9d6d - depends: - - __unix + - libstdcxx-ng ==15.2.0=*_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 20669511 - timestamp: 1771378139786 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_116.conda - sha256: 06be0d20cb3784e1d625f316f26962085dd14f74e166bd668ee9c089b5fa3efa - md5: 48cfd02ec4f1308109e5daaccb99aa30 + size: 6461114 + timestamp: 1778273060138 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.2.0-hd446a21_119.conda + sha256: a2385f3611d5cd25378f9cf2367183320731709c067ddd08d43330d3170f15b8 + md5: bcfe7eae40158c3e355d2f9d3ed41230 depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 17639950 - timestamp: 1765256847600 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_118.conda - sha256: 52afca5e24e0bbc840cf9c28b440dea2cebc4500e97084a38cdd27fdc8a3e57c - md5: 99ea26f70c5e380294e760e8bdbaddff + size: 20765069 + timestamp: 1778268963689 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-aarch64-15.2.0-ha7b1723_119.conda + sha256: 6f7ceee16070781b7d642a37a35ffdf09c66796d3df105c919526210ce220443 + md5: 61da34d67f58dd4cf16683f6cdcb06c8 depends: - __unix license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 17628403 - timestamp: 1771378058765 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_116.conda - sha256: 40fce07ecab2b8d4777021e22fbae2f8ab39b5d1713ae3999efae225cd19c5ba - md5: 53a797061ae48ff2bd1956c7abc20776 - depends: - - m2-conda-epoch - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 12310259 - timestamp: 1765260383723 -- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_118.conda - sha256: 0b27331f127c6c10017442cc98c483aa868298102e98aae70ad86b9a5ae0029e - md5: b7a331c07d140e476fee0c70c9696e87 + size: 17627362 + timestamp: 1778268687968 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_win-64-15.2.0-h0a72980_119.conda + sha256: deea115b736d7fe4acbf15c928fc26def84e30211f09a7aac6bed9940862b6e6 + md5: 928d9a3adb00850a4b5a888683c29465 depends: - m2-conda-epoch license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 11729036 - timestamp: 1771382135681 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_15.conda - sha256: 2ffaec42c561f53dcc025277043aa02e2557dc0db62bc009be4c7559a7f19f09 - md5: 20a8584ff8677ac9d724345b9d4eb757 - depends: - - libstdcxx 15.2.0 h934c35e_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 26905 - timestamp: 1764836222826 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - sha256: 81f2f246c7533b41c5e0c274172d607829019621c4a0823b5c0b4a8c7028ee84 - md5: 1b3152694d236cf233b76b8c56bf0eae - depends: - - libstdcxx 15.2.0 h934c35e_16 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27300 - timestamp: 1765256885128 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 - md5: 6235adb93d064ecdf3d44faee6f468de - depends: - - libstdcxx 15.2.0 h934c35e_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 27575 - timestamp: 1771378314494 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_15.conda - sha256: 73d026540bd2ec75186bc82c164fbfa51cbe44c4c27ed64b57bf52b10f6f3d63 - md5: 7a99de7c14096347968d1fd574b46bb2 - depends: - - libstdcxx 15.2.0 hef695bb_15 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 26977 - timestamp: 1764836231696 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda - sha256: dd5c813ae5a4dac6fa946352674e0c21b1847994a717ef67bd6cc77bc15920be - md5: 20b7f96f58ccbe8931c3a20778fb3b32 + size: 11634599 + timestamp: 1778272991364 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda + sha256: 0672b6b6e1791c92e8eccad58081a99d614fcf82bca5841f9dfa3c3e658f83b9 + md5: e5ce228e579726c07255dbf90dc62101 depends: - - libstdcxx 15.2.0 hef695bb_16 + - libstdcxx 15.2.0 h934c35e_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 27376 - timestamp: 1765257033344 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 - md5: 699d294376fe18d80b7ce7876c3a875d + size: 27776 + timestamp: 1778269074600 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_19.conda + sha256: 56b5ec297a988961486694f1c598889c3a697d77a0b42b8cea3faaa12e9bd360 + md5: c82ed61c3ec470c5ec624580e6ba16e4 depends: - - libstdcxx 15.2.0 hef695bb_18 + - libstdcxx 15.2.0 hef695bb_19 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 27645 - timestamp: 1771378204663 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_2.conda - sha256: b30c06f60f03c2cf101afeb3452f48f12a2553b4cb631c9460c8a8ccf0813ae5 - md5: b04e0a2163a72588a40cde1afd6f2d18 - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 491211 - timestamp: 1763011323224 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_3.conda - sha256: b3a7f89462dc95c1bba9f663210d20ff3ac5f7db458684e0f3a7ae5784f8c132 - md5: 70d1de6301b58ed99fea01490a9802a3 - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 491268 - timestamp: 1765552759709 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.10-hd0affe5_4.conda - sha256: f0356bb344a684e7616fc84675cfca6401140320594e8686be30e8ac7547aed2 - md5: 1d4c18d75c51ed9d00092a891a547a7d - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 491953 - timestamp: 1770738638119 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-hd0affe5_0.conda - sha256: c5008b602cb5c819f7b52d418b3ed17e1818cbbf6705b189e7ab36bb70cce3d8 - md5: 8ee3cb7f64be0e8c4787f3a4dbe024e6 + size: 27803 + timestamp: 1778268813278 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda + sha256: 2293884d59cf0436c37fc0a4bad71011a8de2a6913610d1c701a7703377c1f75 + md5: ea0da9c20bbb221b530810c3c68bbe62 depends: - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 + - libcap >=2.78,<2.79.0a0 - libgcc >=14 license: LGPL-2.1-or-later purls: [] - size: 492799 - timestamp: 1773797095649 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_2.conda - sha256: 22e5bc2b72eb4a104927d34d06954573dbbdef1981fd7f73520f2ca82f0b7101 - md5: e7a86e3cdea9c37bf12005778d490148 - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 517490 - timestamp: 1763011526609 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_3.conda - sha256: 57fe7a9f0c289e4f2fdf5200271848adc9f102921056d5904173942628b472cd - md5: 254474a19793a5f06de7cf3e3e2359fb - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 517687 - timestamp: 1765552618501 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.10-hf9559e3_4.conda - sha256: 95bb4c430e8ca666a4c67b7951f03fbee5a5258b1d29c2a26bf56c86fe32c010 - md5: 96e731e9cf876fb2d8882093c0f24630 - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 517911 - timestamp: 1770738680829 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hf9559e3_0.conda - sha256: b38e9777b3231dfda62f2d127aac8091d990b5c45814a2b9d2e382f42f73a895 - md5: ffd5411606e65767354fe153371cc63a + size: 493022 + timestamp: 1780084748140 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsystemd0-257.13-hfcc8634_1.conda + sha256: 7938befc6a09d9f829663ea134b01bea78dabe08d928e9a7caa68e2d726e03c5 + md5: d8981d39a52ab992a033a68927da47e0 depends: - - libcap >=2.77,<2.78.0a0 + - libcap >=2.78,<2.79.0a0 - libgcc >=14 license: LGPL-2.1-or-later purls: [] - size: 516600 - timestamp: 1773797150163 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda - sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 - md5: cd5a90476766d53e901500df9215e927 + size: 515284 + timestamp: 1780084773602 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.2-h9d88235_0.conda + sha256: b31346e1c01ab40a170e91147092ee8fd92b1dee3c66ee47ef025571c879b159 + md5: c1fcb4a88bc15a9f77ad8d27d7af1df9 depends: - __glibc >=2.17,<3.0.a0 - - lerc >=4.0.0,<5.0a0 + - lerc >=4.1.0,<5.0a0 - libdeflate >=1.25,<1.26.0a0 - libgcc >=14 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 - libstdcxx >=14 - libwebp-base >=1.6.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - zstd >=1.5.7,<1.6.0a0 license: HPND - size: 435273 - timestamp: 1762022005702 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.1-hdb009f0_1.conda - sha256: 7ff79470db39e803e21b8185bc8f19c460666d5557b1378d1b1e857d929c6b39 - md5: 8c6fd84f9c87ac00636007c6131e457d + size: 452337 + timestamp: 1783084902636 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.2-hdb009f0_0.conda + sha256: ef1006578ef7e3f7c420e89d87846213ceb3fdcef2626af2558cbede53d36839 + md5: 20166e2297c1cac346b544d5f6197440 depends: - - lerc >=4.0.0,<5.0a0 + - lerc >=4.1.0,<5.0a0 - libdeflate >=1.25,<1.26.0a0 - libgcc >=14 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 - libstdcxx >=14 - libwebp-base >=1.6.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - zstd >=1.5.7,<1.6.0a0 license: HPND - size: 488407 - timestamp: 1762022048105 -- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda - sha256: f1b8cccaaeea38a28b9cd496694b2e3d372bb5be0e9377c9e3d14b330d1cba8a - md5: 549845d5133100142452812feb9ba2e8 + size: 508982 + timestamp: 1783084925965 +- conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.2-h8f73337_0.conda + sha256: ec6d66308a6d6abaf3225f2f185113e6172e77eb0fa8622af982d7a5d6d47a2c + md5: e83f459471905a04ebe15e21d063c49d depends: - - lerc >=4.0.0,<5.0a0 + - lerc >=4.1.0,<5.0a0 - libdeflate >=1.25,<1.26.0a0 - - libjpeg-turbo >=3.1.0,<4.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - zstd >=1.5.7,<1.6.0a0 license: HPND - size: 993166 - timestamp: 1762022118895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_2.conda - sha256: 751cf346f0f56cc9bfa43f7b5c9c30df2fcec8d84d164ac0cd74a27a3af79f30 - md5: 2f6b30acaa0d6e231d01166549108e2c - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 144395 - timestamp: 1763011330153 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_3.conda - sha256: 977e7e4955ea1581e441e429c2c1b498bc915767f1cac77a97b283c469d5298c - md5: 3934f4cf65a06100d526b33395fb9cd2 - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 145023 - timestamp: 1765552781358 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.10-hd0affe5_4.conda - sha256: ed4d2c01fbeb1330f112f7e399408634db277d3dfb2dec1d0395f56feaa24351 - md5: 6c74fba677b61a0842cbf0f63eee683b - depends: - - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 144654 - timestamp: 1770738650966 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-hd0affe5_0.conda - sha256: 1a1e367c04d66030aa93b4d33905f7f6fbb59cfc292e816fe3e9c1e8b3f4d1e2 - md5: 2c2270f93d6f9073cbf72d821dfc7d72 + size: 1014598 + timestamp: 1783085017197 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-257.13-h084b8d7_1.conda + sha256: 287d05680e49eea51b8145fbf34bc213c0618b04f32e450e9da5d715e5134e38 + md5: 89e5671a076d99516a6acd72a35b1640 depends: - __glibc >=2.17,<3.0.a0 - - libcap >=2.77,<2.78.0a0 + - libcap >=2.78,<2.79.0a0 - libgcc >=14 license: LGPL-2.1-or-later purls: [] - size: 145087 - timestamp: 1773797108513 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_2.conda - sha256: dd1ec27fef9f74ebdd0211ad875ba037f924931c81be164e7ff756b5d86ffc72 - md5: 4fc935d5bebd8e6e070a861544a71a34 - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 156835 - timestamp: 1763011535779 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_3.conda - sha256: 39bdad22998d1ef5b366d9c557b5ca8a2ee2bea1f05eab9e1b20fbfef9d6d7a4 - md5: 8da19c1b9138b2f0a57012c31e3ad81d - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 156695 - timestamp: 1765552629955 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.10-hf9559e3_4.conda - sha256: 18098716de78ab49566c862a5bf1f89e0e064a4fc0f31ad08b60b7774cfdb60e - md5: a9bcd3f70036640538e8187e4c594cbf - depends: - - libcap >=2.77,<2.78.0a0 - - libgcc >=14 - license: LGPL-2.1-or-later - size: 157130 - timestamp: 1770738690431 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hf9559e3_0.conda - sha256: 4946526f7723cb0f5a4dc830381ea48f455f9aebd456655cac99df70cd0d9567 - md5: b3a73b94483260f38dcbb489ee20c6d9 + size: 145969 + timestamp: 1780084753104 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libudev1-257.13-hfcc8634_1.conda + sha256: 1963dbd5a5c08390db2321dd2fa5c9df45c0fe68701fce4f9c36141155b4de13 + md5: 67728797901490baae52b3ce8d738d34 depends: - - libcap >=2.77,<2.78.0a0 + - libcap >=2.78,<2.79.0a0 - libgcc >=14 license: LGPL-2.1-or-later purls: [] - size: 156357 - timestamp: 1773797159424 + size: 156922 + timestamp: 1780084778404 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.8.3-h65a8314_0.conda sha256: 71c8b9d5c72473752a0bb6e91b01dd209a03916cb71f36cc6a564e3a2a132d7a md5: e179a69edd30d75c0144d7a380b88f28 @@ -10244,28 +8784,6 @@ packages: license_family: MIT size: 94555 timestamp: 1757032278900 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.12-hb700be7_0.conda - sha256: 880b1f76b24814c9f07b33402e82fa66d5ae14738a35a943c21c4434eef2403d - md5: f0531fc1ebc0902555670e9cb0127758 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 127967 - timestamp: 1756125594973 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.13-hb700be7_0.conda - sha256: 5e4863d8cc9ccba7884f68d5b3c4b4f44a5a836ad7d3b332ac9aaaef0c0b9d45 - md5: 60adb61326a4a0072ed238f460b02029 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 132334 - timestamp: 1765872504784 - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda sha256: 3d17b7aa90610afc65356e9e6149aeac0b2df19deda73a51f0a09cf04fd89286 md5: 56f65185b520e016d29d01657ac02c0d @@ -10277,26 +8795,6 @@ packages: license_family: MIT size: 154203 timestamp: 1770566529700 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.12-hfefdfc9_0.conda - sha256: 43daf21754c0d8618c2fcc1ac1cad8740f9a107358cc31d8619554463f366609 - md5: 63a654dceff75b84fe8ff32ddb66b7fe - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 129619 - timestamp: 1756126369793 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.13-hfefdfc9_0.conda - sha256: 3f4fa6a4972884ee6f09d14fb17773cd936646dc6d9e197f58e45421b2566e5f - md5: 74a5a557d5e8f60afaaa083f717105a8 - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - size: 134026 - timestamp: 1765873930570 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liburing-2.14-hfefdfc9_0.conda sha256: 7584dc478a34e50c5dc0e0ceac4cb9819ff352bc3a5d0cbb001b974dab9a0967 md5: 9d32167817a5a85724e8524436559229 @@ -10339,83 +8837,47 @@ packages: license: LGPL-2.1-or-later size: 118204 timestamp: 1748856290542 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.2-h5347b49_1.conda - sha256: 030447cf827c471abd37092ab9714fde82b8222106f22fde94bc7a64e2704c40 - md5: 41f5c09a211985c3ce642d60721e7c3e +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda + sha256: 9b1bdce27a7e31f7d241aeecff67a1f3101d52a2b1e33ccc2cdf2613072bf81f + md5: 01bb81d12c957de066ea7362007df642 depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-3-Clause - size: 40235 - timestamp: 1764790744114 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee - md5: db409b7c1720428638e7c0d509d3e1b5 - depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - size: 40311 - timestamp: 1766271528534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda - sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829 - md5: 38ffe67b78c9d4de527be8315e5ada2c - depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 40297 - timestamp: 1775052476770 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.2-h1022ec0_1.conda - sha256: 3113c857e36779d94cf9a18236a710ceca0e94230b3bfeba0d134f33ee8c9ecd - md5: 15b2cc72b9b05bcb141810b1bada654f - depends: - - libgcc >=14 - license: BSD-3-Clause - size: 43415 - timestamp: 1764790752623 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 - md5: cf2861212053d05f27ec49c3784ff8bb - depends: - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - size: 43453 - timestamp: 1766271546875 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42-h1022ec0_0.conda - sha256: 7d427edf58c702c337bf62bc90f355b7fc374a65fd9f70ea7a490f13bb76b1b9 - md5: a0b5de740d01c390bdbb46d7503c9fab + size: 40017 + timestamp: 1781625522462 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.42.2-h1022ec0_0.conda + sha256: 7663489f97c104ae3814db10f384932c74b439f3c1fd4247e4fe3599830c090a + md5: 58fa42bc4bc71fc329889497ec15effb depends: - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 43567 - timestamp: 1775052485727 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.23.0-he1eb515_0.conda - sha256: 255c7d00b54e26f19fad9340db080716bced1d8539606e2b8396c57abd40007c - md5: 25813fe38b3e541fc40007592f12bae5 + size: 43248 + timestamp: 1781625528371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libva-2.24.1-he1eb515_0.conda + sha256: 16a76abbb4fd1de4516ac4a3d06cbf1f561bc8049ca72b04dcac395eee74d017 + md5: eb1b7f8bfdea40eef150c4a1d37df09e depends: - __glibc >=2.17,<3.0.a0 - - libdrm >=2.4.125,<2.5.0a0 + - libdrm >=2.4.127,<2.5.0a0 - libegl >=1.7.0,<2.0a0 - libgcc >=14 - libgl >=1.7.0,<2.0a0 - libglx >=1.7.0,<2.0a0 - libxcb >=1.17.0,<2.0a0 - - wayland >=1.24.0,<2.0a0 + - wayland >=1.25.0,<2.0a0 - wayland-protocols - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 - xorg-libxfixes >=6.0.2,<7.0a0 license: MIT license_family: MIT - size: 221308 - timestamp: 1765652453244 + size: 222717 + timestamp: 1783519315031 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h54a6638_2.conda sha256: ca494c99c7e5ecc1b4cd2f72b5584cef3d4ce631d23511184411abcbb90a21a5 md5: b4ecbefe517ed0157c37f8182768271c @@ -10458,20 +8920,6 @@ packages: license_family: BSD size: 243401 timestamp: 1753879416570 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.15.0-h54a6638_1.conda - sha256: bf0010d93f5b154c59bd9d3cc32168698c1d24f2904729f4693917cce5b27a9f - md5: a41a299c157cc6d0eff05e5fc298cc45 - depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - intel-media-driver >=25.3.3,<25.4.0a0 - - libva >=2.22.0,<3.0a0 - license: MIT - license_family: MIT - size: 287944 - timestamp: 1757278954789 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvpl-2.16.0-h54a6638_0.conda sha256: 38850657dd6835613ef16b34895a54bea98bc7639db6a649c886b331635714fc md5: 9f6b0090c3902b2c763a16f7dace7b6e @@ -10506,21 +8954,6 @@ packages: license_family: BSD size: 1296382 timestamp: 1762012332100 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.328.1-h5279c79_0.conda - sha256: bbabc5c48b63ff03f440940a11d4648296f5af81bb7630d98485405cd32ac1ce - md5: 372a62464d47d9e966b630ffae3abe73 - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxrandr >=1.5.4,<2.0a0 - constrains: - - libvulkan-headers 1.4.328.1.* - license: Apache-2.0 - license_family: APACHE - size: 197672 - timestamp: 1759972155030 - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda sha256: a68280d57dfd29e3d53400409a39d67c4b9515097eba733aa6fe00c880620e2b md5: 31ad065eda3c2d88f8215b1289df9c89 @@ -10536,20 +8969,6 @@ packages: license_family: APACHE size: 199795 timestamp: 1770077125520 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.328.1-h8b8848b_0.conda - sha256: f1b32481c65008087c64dec21cc141dec9b80921ff2a3f5571c24c8f531b18ea - md5: e5a3ff3a266b68398bd28ed1d4363e65 - depends: - - libstdcxx >=14 - - libgcc >=14 - - xorg-libxrandr >=1.5.4,<2.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - constrains: - - libvulkan-headers 1.4.328.1.* - license: Apache-2.0 - license_family: APACHE - size: 214593 - timestamp: 1759972148472 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda sha256: 92a92589f4f787201bc5091990001f61515fa794fa4f0fb15f0ca50f3cc330cc md5: 06bb91a87fb97ea09398d2e121e00c39 @@ -10564,22 +8983,6 @@ packages: license_family: APACHE size: 217655 timestamp: 1770077141862 -- conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.328.1-h477610d_0.conda - sha256: 934d676c445c1ea010753dfa98680b36a72f28bec87d15652f013c91a1d8d171 - md5: 4403eae6c81f448d63a7f66c0b330536 - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - constrains: - - libvulkan-headers 1.4.328.1.* - license: Apache-2.0 - license_family: APACHE - size: 280488 - timestamp: 1759972163692 - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda sha256: 0f0965edca8b255187604fc7712c53fe9064b31a1845a7dfb2b63bf660de84a7 md5: 804880b2674119b84277d6c16b01677d @@ -10666,6 +9069,20 @@ packages: license_family: MIT size: 397493 timestamp: 1727280745441 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda + sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 + md5: a69bbf778a462da324489976c84cfc8c + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - pthread-stubs + - ucrt >=10.0.20348.0 + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 1208687 + timestamp: 1727279378819 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c md5: 5aa797f8787fe7a17d1b0821485b5adc @@ -10684,164 +9101,90 @@ packages: purls: [] size: 114269 timestamp: 1702724369203 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda - sha256: d2195b5fbcb0af1ff7b345efdf89290c279b8d1d74f325ae0ac98148c375863c - md5: 2bca1fbb221d9c3c8e3a155784bbc2e9 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - libxcb >=1.17.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - xkeyboard-config - - xorg-libxau >=1.0.12,<2.0a0 - license: MIT/X11 Derivative - license_family: MIT - size: 837922 - timestamp: 1764794163823 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.1-h3c6a4c8_0.conda - sha256: 37e4aa45b71c35095a01835bd42fa37c08218fec44eb2c6bf4b9e2826b0351d4 - md5: 22c1ce28d481e490f3635c1b6a2bb23f - depends: - - libgcc >=14 - - libstdcxx >=14 - - libxcb >=1.17.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - xkeyboard-config - - xorg-libxau >=1.0.12,<2.0a0 - license: MIT/X11 Derivative - license_family: MIT - size: 863646 - timestamp: 1764794352540 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda - sha256: ec0735ae56c3549149eebd7dc22c0bed91fd50c02eaa77ff418613ddda190aa8 - md5: e512be7dc1f84966d50959e900ca121f - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 ha9997c6_0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 45283 - timestamp: 1761015644057 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-he237659_1.conda - sha256: 047be059033c394bd32ae5de66ce389824352120b3a7c0eff980195f7ed80357 - md5: 417955234eccd8f252b86a265ccdab7f - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 hca6bf5a_1 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 45402 - timestamp: 1766327161688 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 - md5: e49238a1609f9a4a844b09d9926f2c3d +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda + sha256: 046f2ff4acebd8729fac03e99c8c307dfb48b6a32894ba8c11576e78f6e76e43 + md5: dc8b067e22b414172bedd8e3f03f3c95 depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 hca6bf5a_0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - size: 45968 - timestamp: 1772704614539 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h788dabe_0.conda - sha256: db0a568e0853ee38b7a4db1cb4ee76e57fe7c32ccb1d5b75f6618a1041d3c6e4 - md5: a0e7779b7625b88e37df9bd73f0638dc - depends: - - icu >=75.1,<76.0a0 - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 h8591a01_0 - - libzlib >=1.3.1,<2.0a0 - license: MIT + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative license_family: MIT - size: 47192 - timestamp: 1761015739999 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.1-h825857f_1.conda - sha256: 9fe997c3e5a8207161d093a5d73f586ae46dc319cb054220086395e150dd1469 - md5: eb4665cdf78fd02d4abc4edf8c15b7b9 + size: 851166 + timestamp: 1780213397575 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda + sha256: 8f44670a714a12589bc82ea179e46ba4a19c4458d5cee765ddd4d5224eccd912 + md5: d6fc9ac66ea61eb662747959d0a68c57 depends: - - icu >=78.1,<79.0a0 - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 h79dcc73_1 - - libzlib >=1.3.1,<2.0a0 - license: MIT + - libstdcxx >=14 + - libxcb >=1.17.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xkeyboard-config + - xorg-libxau >=1.0.12,<2.0a0 + license: MIT/X11 Derivative license_family: MIT - size: 47725 - timestamp: 1766327143205 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.2-h825857f_0.conda - sha256: 3e51e1952cb60c8107094b6b78473d91ff49d428ad4bef6806124b383e8fe29c - md5: 19de96909ee1198e2853acd8aba89f6c + size: 875994 + timestamp: 1780213408784 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda + sha256: 3bc5551720c58591f6ea1146f7d1539c734ed1c40e7b9f5cb8cb7e900c509aba + md5: 995d8c8bad2a3cc8db14675a153dec2b depends: - - icu >=78.2,<79.0a0 + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 h79dcc73_0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 hca6bf5a_0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - size: 47837 - timestamp: 1772704681112 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-h779ef1b_1.conda - sha256: 8b47d5fb00a6ccc0f495d16787ab5f37a434d51965584d6000966252efecf56d - md5: 68dc154b8d415176c07b6995bd3a65d9 + size: 46810 + timestamp: 1776376751152 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda + sha256: e3af6af9df73bd3c7a8e4e6c8cc38df3699e7f588b0705c257a8601e40acfbdf + md5: 2cffef27cb2eb9ed1e315a1e269d4335 depends: - - icu >=78.1,<79.0a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 h3cfd58e_1 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h79dcc73_0 + - libzlib >=1.3.2,<2.0a0 license: MIT license_family: MIT - size: 43387 - timestamp: 1766327259710 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.1-ha29bfb0_0.conda - sha256: fb51b91a01eac9ee5e26c67f4e081f09f970c18a3da5231b8172919a1e1b3b6b - md5: 87116b9de9c1825c3fd4ef92c984877b + size: 48101 + timestamp: 1776376766341 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda + sha256: a4599c6bbbbdd7db570896e520c557eec8e66d94e839a59d17dc1f24a3d5f82b + md5: 95591ca5671d2213f5b2d5aa7818420d depends: - - icu >=75.1,<76.0a0 + - icu >=78.3,<79.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libxml2-16 2.15.1 h06f855e_0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h3cfd58e_0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: MIT license_family: MIT - size: 43042 - timestamp: 1761016261024 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h5d26750_0.conda - sha256: f905eb7046987c336122121759e7f09144729f6898f48cd06df2a945b86998d8 - md5: 1007e1bfe181a2aee214779ee7f13d30 + size: 43684 + timestamp: 1776376992865 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-hbc0d294_0.conda + sha256: da68af9d9d28d65a6916db1bef68f8a25c64c4fdcf759f32a2d2f2f143220adf + md5: e3b5acbb857a12f5d59e8d174bc536c0 depends: - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 h692994f_0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libxml2-16 2.15.3 h692994f_0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 @@ -10850,198 +9193,110 @@ packages: license: MIT license_family: MIT purls: [] - size: 43681 - timestamp: 1772704748950 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.2-h779ef1b_0.conda - sha256: 2131e25d4fb21be66d7ef685e1b2d66f04aa08e70b37322d557824389d0a4c2a - md5: be3843e412c9f9d697958aa68c72d09d - depends: - - icu >=78.2,<79.0a0 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 h3cfd58e_0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - size: 43866 - timestamp: 1772704745691 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda - sha256: 71436e72a286ef8b57d6f4287626ff91991eb03c7bdbe835280521791efd1434 - md5: e7733bc6785ec009e47a224a71917e84 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=75.1,<76.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.1 - license: MIT - license_family: MIT - size: 556302 - timestamp: 1761015637262 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-hca6bf5a_1.conda - sha256: 8331284bf9ae641b70cdc0e5866502dd80055fc3b9350979c74bb1d192e8e09e - md5: 3fdd8d99683da9fe279c2f4cecd1e048 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.1 - license: MIT - license_family: MIT - size: 555747 - timestamp: 1766327145986 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c - md5: f3bc152cb4f86babe30f3a4bf0dbef69 + size: 43916 + timestamp: 1776376994334 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda + sha256: 3d44f737c5ae52d5af32682cc1530df433f401f8e58a7533926536244127572a + md5: e79d2c2f24b027aa8d5ab1b1ba3061e7 depends: - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.2 - license: MIT - license_family: MIT - size: 557492 - timestamp: 1772704601644 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h79dcc73_1.conda - sha256: c76951407554d69dd348151f91cc2dc164efbd679b4f4e77deb2f9aa6eba3c12 - md5: e42758e7b065c34fd1b0e5143752f970 - depends: - - icu >=78.1,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.1 - license: MIT - license_family: MIT - size: 599721 - timestamp: 1766327134458 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.1-h8591a01_0.conda - sha256: 7a13450bce2eeba8f8fb691868b79bf0891377b707493a527bd930d64d9b98af - md5: e7177c6fbbf815da7b215b4cc3e70208 - depends: - - icu >=75.1,<76.0a0 + - icu >=78.3,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - libxml2 2.15.1 + - libxml2 2.15.3 license: MIT license_family: MIT - size: 597078 - timestamp: 1761015734476 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.2-h79dcc73_0.conda - sha256: da6b2ebbcecc158200d90be39514e4e902971628029b35b7f6ad57270659c5d9 - md5: e3ec9079759d35b875097d6a9a69e744 + size: 559775 + timestamp: 1776376739004 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda + sha256: ad048a9ca1bf2cdfedb2b0c231050da416c44ee1436a3d1a83b51d2e2deaa842 + md5: 68866231cfe8789e780347f2482df96d depends: - - icu >=78.2,<79.0a0 + - icu >=78.3,<79.0a0 - libgcc >=14 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - libxml2 2.15.2 + - libxml2 2.15.3 license: MIT license_family: MIT - size: 598438 - timestamp: 1772704671710 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h06f855e_0.conda - sha256: 3f65ea0f04c7738116e74ca87d6e40f8ba55b3df31ef42b8cb4d78dd96645e90 - md5: 4a5ea6ec2055ab0dfd09fd0c498f834a + size: 601948 + timestamp: 1776376758674 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda + sha256: 3b61ee3caba702d2ff432fa3920835db963026e5c99c4e6fdca0c6114f59e7ce + md5: 9e8dd0d90ed830107b2c36801035b7db depends: - - icu >=75.1,<76.0a0 + - icu >=78.3,<79.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - libxml2 2.15.1 + - libxml2 2.15.3 license: MIT license_family: MIT - size: 518616 - timestamp: 1761016240185 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.1-h3cfd58e_1.conda - sha256: a857e941156b7f462063e34e086d212c6ccbc1521ebdf75b9ed66bd90add57dc - md5: 07d73826fde28e7dbaec52a3297d7d26 + size: 519871 + timestamp: 1776376969852 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h692994f_0.conda + sha256: 8038084c60eda2006d0122d05e3364fe8db0a18935ca6ed0168b5ba5aa33f904 + md5: f7d6fcda29570e20851b78d92ea2154e depends: - - icu >=78.1,<79.0a0 - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.1,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - liblzma >=5.8.3,<6.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - libxml2 2.15.1 + - libxml2 2.15.3 + - icu <0.0a0 license: MIT license_family: MIT - size: 518964 - timestamp: 1766327232819 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h3cfd58e_0.conda - sha256: d6d792f8f1d6786b9144adfa62c33a04aeec3d76682351b353ca1224fc1a74f3 - md5: f6dd496a1f2b66951110a3a0817f699b + purls: [] + size: 518869 + timestamp: 1776376971242 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda + sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 + md5: 87e6096ec6d542d1c1f8b33245fe8300 depends: - - icu >=78.2,<79.0a0 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - libxml2 2.15.2 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 license: MIT license_family: MIT - size: 520731 - timestamp: 1772704723763 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.2-h692994f_0.conda - sha256: b8c71b3b609c7cfe17f3f2a47c75394d7b30acfb8b34ad7a049ea8757b4d33df - md5: e365238134188e42ed36ee996159d482 + size: 245434 + timestamp: 1757963724977 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda + sha256: 8a816572a4650149d28c0b8b44e294380de18787735d00c7cf5fad91dba8e286 + md5: 0f31501ccd51a40f0a91381080ae7368 depends: - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 + - libgcc >=14 + - libxml2 + - libxml2-16 >=2.14.6 + license: MIT + license_family: MIT + size: 253367 + timestamp: 1757964660396 +- conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda + sha256: 13da38939c2c20e7112d683ab6c9f304bfaf06230a2c6a7cf00359da1a003ec7 + md5: 46034d9d983edc21e84c0b36f1b4ba61 + depends: + - libxml2 + - libxml2-16 >=2.14.6 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - constrains: - - libxml2 2.15.2 - - icu <0.0a0 license: MIT license_family: MIT - purls: [] - size: 520078 - timestamp: 1772704728534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 60963 - timestamp: 1727963148474 + size: 420223 + timestamp: 1757963935611 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 md5: d87ff7921124eccd67248aa483c23fec @@ -11054,17 +9309,6 @@ packages: purls: [] size: 63629 timestamp: 1774072609062 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 66657 - timestamp: 1727963199518 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f md5: 502006882cf5461adced436e410046d1 @@ -11075,19 +9319,6 @@ packages: purls: [] size: 69833 timestamp: 1774072605429 -- conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda - sha256: ba945c6493449bed0e6e29883c4943817f7c79cbff52b83360f7b341277c6402 - md5: 41fbfac52c601159df6c01f875de31b9 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - size: 55476 - timestamp: 1727963768015 - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda sha256: 88609816e0cc7452bac637aaf65783e5edf4fee8a9f8e22bdc3a75882c536061 md5: dbabbd6234dea34040e631f87676292f @@ -11102,49 +9333,21 @@ packages: purls: [] size: 58347 timestamp: 1774072851498 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-21.1.8-h4fa8253_0.conda - sha256: 145c4370abe870f10987efa9fc15a8383f1dab09abbc9ad4ff15a55d45658f7b - md5: 0d8b425ac862bcf17e4b28802c9351cb - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - intel-openmp <0.0a0 - - openmp 21.1.8|21.1.8.* - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - size: 347566 - timestamp: 1765964942856 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.0-h4fa8253_0.conda - sha256: bb55a3736380759d338f87aac68df4fd7d845ae090b94400525f5d21a55eea31 - md5: e5505e0b7d6ef5c19d5c0c1884a2f494 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - openmp 22.1.0|22.1.0.* - - intel-openmp <0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - size: 347404 - timestamp: 1772025050288 -- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.2-h4fa8253_0.conda - sha256: fa8bd542624507309cbdfc620bdfe546ed823d418e6ba878977d48da7a0f6212 - md5: 29407a30bd93dc8c11c03ca60249a340 +- conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda + sha256: 50c02902bb516eeb56680358f052be38b5bf74b40e78ea4b2a675e84957e7307 + md5: de3551bf6508d45ca46b714639e52823 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: + - openmp 22.1.8|22.1.8.* - intel-openmp <0.0a0 - - openmp 22.1.2|22.1.2.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 348400 - timestamp: 1774733045609 + size: 348002 + timestamp: 1781737042070 - conda: https://conda.anaconda.org/conda-forge/win-64/m2-conda-epoch-20250515-0_x86_64.conda build_number: 0 sha256: 51e9214548f177db9c3fe70424e3774c95bf19cd69e0e56e83abe2e393228ba1 @@ -11200,9 +9403,9 @@ packages: purls: [] size: 2176937 timestamp: 1727802346950 -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e - md5: 5b5203189eb668f042ac2b0826244964 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.2.0-pyhd8ed1ab_0.conda + sha256: 0c4c35376fe920714390d46e4b8d31c876d65f18e1655899e0763ec25f2a902f + md5: 6d03368f2b2b0a5fb6839df53b2eb5e0 depends: - mdurl >=0.1,<1 - python >=3.10 @@ -11210,8 +9413,8 @@ packages: license_family: MIT purls: - pkg:pypi/markdown-it-py?source=hash-mapping - size: 64736 - timestamp: 1754951288511 + size: 69017 + timestamp: 1778169663339 - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py312h8a5da7c_1.conda sha256: 5f3aad1f3a685ed0b591faad335957dbdb1b73abfd6fc731a0d42718e0653b33 md5: 93a4752d42b12943a355b682ee43285b @@ -11225,7 +9428,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=compressed-mapping + - pkg:pypi/markupsafe?source=hash-mapping size: 26057 timestamp: 1772445297924 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_1.conda @@ -11257,24 +9460,148 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/markupsafe?source=compressed-mapping + - pkg:pypi/markupsafe?source=hash-mapping size: 28510 timestamp: 1772445175216 -- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda - sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 - md5: 00e120ce3e40bad7bfc78861ce3c4a25 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda + sha256: bd375b8d5999ebd47d3eecd3ca7d0cb6b13156b83181bb99c9704b758114058d + md5: 23f8baa07d5e4f97b86cde417babf32b + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + size: 14828 + timestamp: 1782829552189 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda + sha256: ad593122795468a83fe01d3ce831faea26e34be6ae3a6c3a0702ccd4194d2dfd + md5: 80af8d8643a2e2f5bf47ecd15a2c30a5 + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + size: 14957 + timestamp: 1782829505062 +- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda + sha256: 280067b6b6dd6cef3125c517933ce4bd442a957fffa3ae0ca518379ba04c0fb6 + md5: 3aef2aea79e121dde8f8432ad8180a77 + depends: + - matplotlib-base >=3.11.0,<3.11.1.0a0 + - pyside6 >=6.7.2 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - tornado >=5 + license: PSF-2.0 + license_family: PSF + size: 15319 + timestamp: 1782829747462 +- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda + sha256: 666a19f61a40c5936bd0f07965b159ced727256fa7e2a4ff9dd5f0146aad86f1 + md5: 5866f3034ce42e8d512e7640f43270fd + depends: + - __glibc >=2.17,<3.0.a0 + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libraqm >=0.10.5,<0.11.0a0 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + size: 9004007 + timestamp: 1782829533688 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda + sha256: 56696ee8bc7dcc4ad5f6c39bdc51c4248f256943c1f8bd2cf5cefcecb77fedf6 + md5: 4055d95e01cd2e79b66f9d7ed1213ede + depends: + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libgcc >=14 + - libraqm >=0.10.5,<0.11.0a0 + - libstdcxx >=14 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: PSF-2.0 + license_family: PSF + size: 8911500 + timestamp: 1782829487715 +- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda + sha256: 94bc6fb3f0dc6337ca3b5dcb3d65da3ede1f24ce14d1e597ed83585bffe59dfc + md5: 99da493a14f3e26e8069e12281ce504f + depends: + - contourpy >=1.0.1 + - cycler >=0.10 + - fonttools >=4.22.0 + - freetype + - kiwisolver >=1.3.1 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libraqm >=0.10.5,<0.11.0a0 + - numpy >=1.23 + - numpy >=1.25,<3 + - packaging >=20.0 + - pillow >=8 + - pyparsing >=2.3.1 + - python >=3.14,<3.15.0a0 + - python-dateutil >=2.7 + - python_abi 3.14.* *_cp314 + - qhull >=2020.2,<2020.3.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: PSF-2.0 + license_family: PSF + size: 8747069 + timestamp: 1782829728451 +- conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.2-pyhd8ed1ab_0.conda + sha256: 35b43d7343f74452307fd018a1cca92b8f68961ff8e2ab6a81ce0a703c9a3764 + md5: 9acc1c385be401d533ff70ef5b50dae6 depends: - python >=3.10 - traitlets license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/matplotlib-inline?source=hash-mapping - size: 15175 - timestamp: 1761214578417 -- conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.5.0-pyhd8ed1ab_0.conda - sha256: 123cc004e2946879708cdb6a9eff24acbbb054990d6131bb94bca7a374ebebfc - md5: 1997a083ef0b4c9331f9191564be275e + - pkg:pypi/matplotlib-inline?source=compressed-mapping + size: 15725 + timestamp: 1778264403247 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.6.1-pyhd8ed1ab_0.conda + sha256: 49db23cbfb1c1d414a14d7540195208b994ebd747beba0f15c903f3a0a2dc446 + md5: ad6821df7a98510117db06e9a833281f depends: - markdown-it-py >=2.0.0,<5.0.0 - python >=3.10 @@ -11282,8 +9609,8 @@ packages: license_family: MIT purls: - pkg:pypi/mdit-py-plugins?source=hash-mapping - size: 43805 - timestamp: 1754946862113 + size: 50460 + timestamp: 1778692223625 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -11338,58 +9665,21 @@ packages: license: MIT AND BSD-3-Clause-Clear size: 123916 timestamp: 1759768539535 -- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_454.conda - sha256: 3c432e77720726c6bd83e9ee37ac8d0e3dd7c4cf9b4c5805e1d384025f9e9ab6 - md5: c83ec81713512467dfe1b496a8292544 - depends: - - llvm-openmp >=21.1.4 - - tbb >=2022.2.0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: LicenseRef-IntelSimplifiedSoftwareOct2022 - license_family: Proprietary - size: 99909095 - timestamp: 1761668703167 -- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.0-hac47afa_455.conda - sha256: b2b4c84b95210760e4d12319416c60ab66e03674ccdcbd14aeb59f82ebb1318d - md5: fd05d1e894497b012d05a804232254ed - depends: - - llvm-openmp >=21.1.8 - - tbb >=2022.3.0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: LicenseRef-IntelSimplifiedSoftwareOct2022 - license_family: Proprietary - size: 100224829 - timestamp: 1767634557029 -- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2025.3.1-hac47afa_11.conda - sha256: f2c2b2a3c2e7d08d78c10bef7c135a4262c80d1d48c85fb5902ca30d61d645f4 - md5: 3fd3009cef89c36e9898a6feeb0f5530 +- conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.1.0-hac47afa_233.conda + sha256: ff355522fb0b6e33841167d9ca749147c8734d8be07b63b2ce25b0db043f42ed + md5: 5afbf28c4ca3e05b5469dbbd78c8e704 depends: - - llvm-openmp >=22.1.1 - - tbb >=2022.3.0 + - llvm-openmp >=22.1.8 + - onemkl-license 2026.1.0 h57928b3_233 + - tbb >=2023.0.0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary purls: [] - size: 99997309 - timestamp: 1774449747739 -- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-11.0.1-pyhcf101f3_0.conda - sha256: af8f30fb9542f48167fedbe1ab14230bfb82245cd4338b70c30dd55729714472 - md5: 6fbedd565de86ec83bc96531ee3ab856 - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/more-itertools?source=compressed-mapping - size: 71354 - timestamp: 1775153285920 + size: 114592547 + timestamp: 1783700769546 - conda: https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.9-hc50e24c_0.conda sha256: 39c4700fb3fbe403a77d8cc27352fa72ba744db487559d5d44bf8411bb4ea200 md5: c7f302fd11eeb0987a6a5e1f3aed6a21 @@ -11411,51 +9701,60 @@ packages: license_family: LGPL size: 558708 timestamp: 1730581372400 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py312hd9148b4_1.conda - sha256: 94068fd39d1a672f8799e3146a18ba4ef553f0fcccefddb3c07fbdabfd73667a - md5: 2e489969e38f0b428c39492619b5e6e5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda + sha256: c9764c77dd7f9c581c1d8a24c3024edf777cacfb5a4180de5badc6638dc8590f + md5: a142257c1b69e37cfefc66dc228a4d93 depends: + - python - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - libstdcxx >=14 - - python >=3.12,<3.13.0a0 + - libgcc >=14 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 102525 - timestamp: 1762504116832 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py312h4f740d2_1.conda - sha256: 54d29951b12731bbcd01b914f101566fc00da060151e11c295b8eb698d219897 - md5: fa2dab79048dfea842cb4f6eac8301fb + - pkg:pypi/msgpack?source=compressed-mapping + size: 112800 + timestamp: 1782460774570 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.2.1-py312hf18b547_1.conda + sha256: dfd1fe17d91863299d7e8673dc11082f3cad5501bbc1c0050765321b6a06f1fd + md5: 4ebf3dfcf27d10f06b247b71fb0aafdf depends: - - libgcc >=14 + - python + - python 3.12.* *_cpython - libstdcxx >=14 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython + - libgcc >=14 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: - pkg:pypi/msgpack?source=hash-mapping - size: 99305 - timestamp: 1762504246142 -- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.1.2-py312hf90b1b7_1.conda - sha256: 0408cc0868e0963922c76940d618266df88518a7b58b5d28da8378911916b998 - md5: 3272249c8d0f9cb7693e189611b9943f + size: 113665 + timestamp: 1782460796476 +- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312h78d62e6_1.conda + sha256: f43cc72ae92759d661187cb4bc4fb4721b97128d150f336b9b0ebf24b8600a27 + md5: 0ac1766b278a8547f22cd0820b8a7e96 depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 + - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 87478 - timestamp: 1762504274037 + - pkg:pypi/msgpack?source=compressed-mapping + size: 89054 + timestamp: 1782460807428 +- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda + sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 + md5: 37293a85a0f4f77bbd9cf7aaefc62609 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: Apache + size: 15851 + timestamp: 1749895533014 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -11489,14 +9788,14 @@ packages: - pkg:pypi/myst-nb?source=hash-mapping size: 68766 timestamp: 1772587444587 -- conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.0.0-pyhd8ed1ab_0.conda - sha256: f352d594d968acd31052c5f894ae70718be56481ffa9c304fdfcbe78ddf66eb1 - md5: a65e2c3c764766f0b28a3ac5052502a6 +- conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-5.1.0-pyhd8ed1ab_0.conda + sha256: 94235bc1f769cf35029942ecb2ca796f18e730c1bf5aeef95e72680ebcfacfef + md5: 580615e59fc7c07741e4d2ab052cfc8b depends: - docutils >=0.20,<0.23 - jinja2 - - markdown-it-py >=4.0.0,<4.1.0 - - mdit-py-plugins >=0.5,<0.6 + - markdown-it-py >=4.2.0,<4.3.0 + - mdit-py-plugins >=0.6.1,<0.7 - python >=3.11 - pyyaml - sphinx >=8,<10 @@ -11504,8 +9803,8 @@ packages: license_family: MIT purls: - pkg:pypi/myst-parser?source=hash-mapping - size: 73535 - timestamp: 1768942892170 + size: 74888 + timestamp: 1778696564508 - conda: https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhcf101f3_2.conda sha256: aeb1548eb72e4f198e72f19d242fb695b35add2ac7b2c00e0d83687052867680 md5: e941e85e273121222580723010bd4fa2 @@ -11518,21 +9817,21 @@ packages: - pkg:pypi/natsort?source=hash-mapping size: 39262 timestamp: 1770905275632 -- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.4-pyhd8ed1ab_0.conda - sha256: 1b66960ee06874ddceeebe375d5f17fb5f393d025a09e15b830ad0c4fffb585b - md5: 00f5b8dafa842e0c27c1cd7296aa4875 +- conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.11.0-pyhd8ed1ab_0.conda + sha256: eceb424236fbbb9b337a857fe5448307b57a2a3fb2db389ae37e7a8b8cdca2ab + md5: cf01a81d7960ad9c829bf2e794fcee9a depends: - - jupyter_client >=6.1.12 - - jupyter_core >=4.12,!=5.0.* - - nbformat >=5.1 - - python >=3.8 - - traitlets >=5.4 + - jupyter_client >=7.0.0 + - jupyter_core >=5.4 + - nbformat >=5.2.0 + - python >=3.10 + - traitlets >=5.13 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/nbclient?source=compressed-mapping - size: 28473 - timestamp: 1766485646962 + size: 29138 + timestamp: 1780661039538 - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_1.conda sha256: 7a5bd30a2e7ddd7b85031a5e2e14f290898098dc85bea5b3a5bf147c25122838 md5: bbe1963f1e47f594070ffe87cdf612ea @@ -11548,263 +9847,149 @@ packages: - pkg:pypi/nbformat?source=hash-mapping size: 100945 timestamp: 1733402844974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 - md5: 47e340acb35de30501a76c7c799c41d7 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda + sha256: fc89f74bbe362fb29fa3c037697a89bec140b346a2469a90f7936d1d7ea4d8a3 + md5: fc21868a1a5aacc937e7a18747acb8a5 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 + - libgcc >=14 license: X11 AND BSD-3-Clause purls: [] - size: 891641 - timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 - md5: 182afabe009dc78d8b73100255ee6868 + size: 918956 + timestamp: 1777422145199 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda + sha256: 369db85c5cd8d99dde364ce70725d76511d9c8199e5b820c740414091bf5bcca + md5: b2a43456aa56fe80c2477a5094899eff depends: - - libgcc >=13 + - libgcc >=14 license: X11 AND BSD-3-Clause purls: [] - size: 926034 - timestamp: 1738196018799 -- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_1.conda - sha256: bb7b21d7fd0445ddc0631f64e66d91a179de4ba920b8381f29b9d006a42788c0 - md5: 598fd7d4d0de2455fb74f56063969a97 - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/nest-asyncio?source=hash-mapping - size: 11543 - timestamp: 1733325673691 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.3.5-py314h2b28147_0.conda - sha256: 4fa3b8b80dd848a70f679b31d74d6fb28f9c4de9cd81086aa8e10256e9de20d1 - md5: 6d2cff81447b8fe424645d7dd3bde8bf - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 8983459 - timestamp: 1763350996398 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.0-py314h2b28147_0.conda - sha256: 8a27bba4c9015dd116761480fa7ff193747dfc13fd6748ac69fdb162fcc223dc - md5: 1052857fc9d80253d2e47025cb2fab0a + size: 960036 + timestamp: 1777422174534 +- conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio2-1.7.2-pyhcf101f3_0.conda + sha256: e6768ceef038f4d7e083de7e393f5dd7d672b937e2bda570b740f6399b686689 + md5: fcd832bfd4749e9b246112b6894f97fc depends: + - python >=3.10 - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libcblas >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - liblapack >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause + license: BSD-2-Clause license_family: BSD - size: 8917806 - timestamp: 1766373894725 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py314h2b28147_1.conda - sha256: 1d8377c8001c15ed12c2713b723213474b435706ab9d34ede69795d64af9e94d - md5: 4ea6b620fdf24a1a0bc4f1c7134dfafb + purls: + - pkg:pypi/nest-asyncio2?source=hash-mapping + size: 15903 + timestamp: 1770973502283 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py312h33ff503_0.conda + sha256: 2941c4a5fee88fe1c91c0d95b65e3a292d078f6655b53ff60f4813a44349c83e + md5: 3b7525d598ec0d0365ebd2378160a02f depends: - python - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 8926994 - timestamp: 1770098474394 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py312h33ff503_0.conda - sha256: 1aab7ba963affa572956b1bd8d239df52a9c7bc799c560f98bc658ab70224e10 - md5: 5930ee8a175a242b4f001b1e9e72024f - depends: - - python - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 + - python_abi 3.12.* *_cp312 - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 - - libcblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/numpy?source=compressed-mapping - size: 8757569 - timestamp: 1773839284329 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.3.5-py314haac167e_0.conda - sha256: e7015a79fb2d8d0573ae1b55db71792292285a86111ccf2683872db848734db8 - md5: ea4652f80053fb52748bc10e0b401b2f + size: 8929128 + timestamp: 1783206200235 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.1-py314h2b28147_0.conda + sha256: fb665b7e30f9472c58098983f614598cfcf34e7a26b6c419648803095c390aa7 + md5: 59044905d27ba41bfb280ed4692c15e2 depends: - python - libgcc >=14 - - python 3.14.* *_cp314 + - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - - libgcc >=14 - - python_abi 3.14.* *_cp314 - - liblapack >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 7815328 - timestamp: 1763351321550 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.0-py314haac167e_0.conda - sha256: ce4e1758c8c5130fc0041dc3a128963927b73d90032baf4c87d4260c2b6dae07 - md5: 52129e44a0e5a8e1b388ce5cb03e8027 - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - python 3.14.* *_cp314 - liblapack >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - python_abi 3.14.* *_cp314 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 8001251 - timestamp: 1766373967611 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py314haac167e_1.conda - sha256: 1e1366e700156cbddc4daae0fec34a72b74105ba45f9c144f777120552924747 - md5: 98ef547c85356475adb2197965c716b6 - depends: - - python - - python 3.14.* *_cp314 - - libstdcxx >=14 - - libgcc >=14 - libcblas >=3.9.0,<4.0a0 - - python_abi 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 8006259 - timestamp: 1770098510476 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py312h6615c27_0.conda - sha256: 9e30d173e3a16714c009957aa69f2ec982b603585be6adabdedc51a213f8c308 - md5: c5b98ed4e80a53e18cd67f7cbbb2e091 + size: 9089255 + timestamp: 1783206203765 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py312hce9e0af_0.conda + sha256: 3116431b4ad9ac1d88ef3d78555fabe1ef6def58bc1d0159e31dbe221cf5ee2b + md5: de1fdf9d91f160b6ff3744ce003c488d depends: - python - libstdcxx >=14 - libgcc >=14 - - python 3.12.* *_cpython + - python_abi 3.12.* *_cp312 - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 7841597 - timestamp: 1773839274579 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.3.5-py314h06c3c77_0.conda - sha256: e64d4c049c9c69ef02d924ac1750b32e08f57732cbc6a3fe11794f3169b59d14 - md5: ddc6687a8f402695bd22229aaf69fb26 + - pkg:pypi/numpy?source=hash-mapping + size: 8009002 + timestamp: 1783206217130 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.5.1-py314he1698a1_0.conda + sha256: 52e06fd450082b07045ce244e801d46dc7b3154cdbdde62be1db6cfccf199f07 + md5: e127193f9cd2605201f1d4bb8c9f91ba depends: - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - libgcc >=14 - python_abi 3.14.* *_cp314 - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 7588219 - timestamp: 1763350950306 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.0-py314h06c3c77_0.conda - sha256: 07394e53e529c52fddc80a46f16cdad12eb9df4b3b7af1a47b5b2e7d6a7b7905 - md5: 59127d48b291f13c06a53dd335876b62 + size: 8172990 + timestamp: 1783206215507 +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py312ha3f287d_0.conda + sha256: e9df7b016c6910a9d4b1894e53499de79a871292e2f88f338070f0fa0080fcaa + md5: 8ae08a63662c4b2d46af3f2917e749b4 depends: - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - size: 7301600 - timestamp: 1766373809921 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.2-py314h06c3c77_1.conda - sha256: 34fc25b81cfa987e1825586ddb1a4ac76a246fdef343c9171109017674ad6503 - md5: 2fccd2c4e9feb4e4c2a90043015525d6 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 + - python_abi 3.12.* *_cp312 - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 7309134 - timestamp: 1770098414535 -- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.3-py312ha3f287d_0.conda - sha256: f0b92b9f58406ce21c7d0f037e58cb62380daffb9232c7cb31ab5edc217527e6 - md5: 6169671e14dc7c36eebfd9870446f11c + purls: + - pkg:pypi/numpy?source=compressed-mapping + size: 7301536 + timestamp: 1783206237609 +- conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.5.1-py314h02f10f6_0.conda + sha256: 0f9f97b529480d17f7054783f7cdc163d0cdd537fabbb6b5bbae5c9439462c2f + md5: a67eeb19ff253ed3c4e094056e8fbb4c depends: - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 - - python_abi 3.12.* *_cp312 + - python_abi 3.14.* *_cp314 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 7166412 - timestamp: 1773839142889 + size: 7452096 + timestamp: 1783206236616 - conda: https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.10.0-pyhcf101f3_0.conda sha256: 482d94fce136c4352b18c6397b9faf0a3149bfb12499ab1ffebad8db0cb6678f md5: 3aa4b625f20f55cf68e92df5e5bf3c39 @@ -11827,119 +10012,162 @@ packages: - sphinx>=7.1 - pydata-sphinx-theme>=0.15 requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.3-hb9d3cd8_0.conda - sha256: 2254dae821b286fb57c61895f2b40e3571a070910fdab79a948ff703e1ea807b - md5: 56f8947aa9d5cf37b0b3d43b83f34192 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ocl-icd-2.3.4-hb03c661_1.conda + sha256: 75f3bf733523a338f73d6c276c4a26634877cd970edb558f2769d9fa52b100a9 + md5: c2871ba95727fd1382c05db66048b64c depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - opencl-headers >=2024.10.24 + - libgcc >=14 + - opencl-headers >=2025.6.13 license: BSD-2-Clause license_family: BSD - size: 106742 - timestamp: 1743700382939 -- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-h5888daf_0.conda - sha256: 2b6ce54174ec19110e1b3c37455f7cd138d0e228a75727a9bba443427da30a36 - md5: 45c3d2c224002d6d0d7769142b29f986 + size: 109598 + timestamp: 1780362789611 +- conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.1.0-h57928b3_233.conda + sha256: 96dec1c878d6e6f835be8ed57152a37be9a5104ac79c2425815d71c64cf13ee4 + md5: 1566e2ce8c3bc23a2feb866c4d9e91e3 + license: LicenseRef-IntelSimplifiedSoftwareOct2022 + license_family: Proprietary + purls: [] + size: 53362 + timestamp: 1783700628723 +- conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda + sha256: 8de2f0cd8a659b01abf86e7fbb8cea4f28ada62fd288429a2bbc040db1b98dd0 + md5: c930c8052d780caa41216af7de472226 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 55357 - timestamp: 1749853464518 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - sha256: 3f231f2747a37a58471c82a9a8a80d92b7fece9f3fce10901a5ac888ce00b747 - md5: b28cf020fd2dead0ca6d113608683842 + size: 55754 + timestamp: 1773844383536 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-h65dd3cf_1.conda + sha256: 5317c5c23762f3fe1c8510565a2bb94c645e1470ff73b386315656404f7eb58a + md5: 69894a95220a17a66272daa701c387bc depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 license: BSD-2-Clause license_family: BSD - size: 731471 - timestamp: 1739400677213 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - sha256: 3b7a519e3b7d7721a0536f6cba7f1909b878c71962ee67f02242958314748341 - md5: 0abed5d78c07a64e85c54f705ba14d30 + size: 726478 + timestamp: 1782685945856 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h663e864_1.conda + sha256: c90d20ddcf28537ea6c1bd1c26a7abcba6baf9d7cdec493daa04bf0a968d1264 + md5: 0d86d4becd3cd1ce48011f71099211be depends: - - libgcc >=13 - - libstdcxx >=13 + - libgcc >=14 + - libstdcxx >=14 license: BSD-2-Clause license_family: BSD - size: 774512 - timestamp: 1739400731652 -- conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda - sha256: 914702d9a64325ff3afb072c8bc0f8cbea3f19955a8395a8c190e45604f83c76 - md5: ad4cac6ceb9e4c8e01802e3f15e87bb2 + size: 795565 + timestamp: 1782685979198 +- conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-h1eab103_1.conda + sha256: 8d7e4a2dcd68afcc87c1e875a19600d980ca8f792f00105a622efd5faed6b05a + md5: 91c186a483e5491170156399b2850804 depends: - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 license: BSD-2-Clause license_family: BSD - size: 411269 - timestamp: 1739401120354 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda - sha256: a47271202f4518a484956968335b2521409c8173e123ab381e775c358c67fe6d - md5: 9ee58d5c534af06558933af3c845a780 + size: 422904 + timestamp: 1782686043511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda + sha256: 3900f9f2dbbf4129cf3ad6acf4e4b6f7101390b53843591c53b00f034343bc4d + md5: 11b3379b191f63139e29c0d19dee24cd depends: - __glibc >=2.17,<3.0.a0 - - ca-certificates - libgcc >=14 - license: Apache-2.0 - license_family: Apache - size: 3165399 - timestamp: 1762839186699 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c - md5: f61eb8cd60ff9057122a3d338b99c00f + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + size: 355400 + timestamp: 1758489294972 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda + sha256: bd1bc8bdde5e6c5cbac42d462b939694e40b59be6d0698f668515908640c77b8 + md5: cea962410e327262346d48d01f05936c + depends: + - libgcc >=14 + - libpng >=1.6.50,<1.7.0a0 + - libstdcxx >=14 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-2-Clause + license_family: BSD + size: 392636 + timestamp: 1758489353577 +- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda + sha256: 24342dee891a49a9ba92e2018ec0bde56cc07fdaec95275f7a55b96f03ea4252 + md5: e723ab7cc2794c954e1b22fde51c16e4 + depends: + - libpng >=1.6.55,<1.7.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: BSD-2-Clause + license_family: BSD + size: 245594 + timestamp: 1772624841727 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda + sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 + md5: 680608784722880fbfe1745067570b00 depends: - __glibc >=2.17,<3.0.a0 - - ca-certificates + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3164551 - timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.0-h8e36d6e_0.conda - sha256: 8dd3b4c31fe176a3e51c5729b2c7f4c836a2ce3bd5c82082dc2a503ba9ee0af3 - md5: 7624c6e01aecba942e9115e0f5a2af9d + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + size: 786149 + timestamp: 1775741359582 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda + sha256: 08fab1d144a9790763f30bd44ac4a2f288703ad668d8c31d339ddea23e981147 + md5: 67eea19865a3463f75ca0d3a1d096350 depends: - - ca-certificates + - cyrus-sasl >=2.1.28,<3.0a0 + - krb5 >=1.22.2,<1.23.0a0 - libgcc >=14 - license: Apache-2.0 - license_family: Apache - size: 3705625 - timestamp: 1762841024958 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f - md5: 25f5885f11e8b1f075bccf4a2da91c60 + - libstdcxx >=14 + - openssl >=3.5.6,<4.0a0 + license: OLDAP-2.8 + license_family: BSD + size: 911524 + timestamp: 1775741371965 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda + sha256: d48f5c22b9897c01e4dff3680f1f57ceb02711ab9c62f74339b080419dfad34b + md5: 79dd2074b5cd5c5c6b2930514a11e22d depends: + - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=14 license: Apache-2.0 license_family: Apache purls: [] - size: 3692030 - timestamp: 1769557678657 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda - sha256: 6d72d6f766293d4f2aa60c28c244c8efed6946c430814175f959ffe8cab899b3 - md5: 84f8fb4afd1157f59098f618cd2437e4 + size: 3159683 + timestamp: 1781069855778 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda + sha256: da4a5df42614166b69c2f6d8602fc1425f7aaa699f77c3bafb5c7fe69b3d9fb7 + md5: fa6260b3e6eababf6ca85a7eb3336383 depends: - ca-certificates - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 + - libgcc >=14 license: Apache-2.0 license_family: Apache - size: 9440812 - timestamp: 1762841722179 -- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.1-hf411b9b_1.conda - sha256: 53a5ad2e5553b8157a91bb8aa375f78c5958f77cb80e9d2ce59471ea8e5c0bd6 - md5: eb585509b815415bc964b2c7e11c7eb3 + purls: [] + size: 3704664 + timestamp: 1781069675555 +- conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda + sha256: cb6e7ba0d010ee0d3249ce9886de3d7613d26d9965d4c95666fa66b9c4c31001 + md5: e99f95734a326c0fd4d02bbd995150d4 depends: - ca-certificates - ucrt >=10.0.20348.0 @@ -11948,93 +10176,83 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 9343023 - timestamp: 1769557547888 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda - sha256: 289861ed0c13a15d7bbb408796af4de72c2fe67e2bcb0de98f4c3fce259d7991 - md5: 58335b26c38bf4a20f399384c33cbcf9 - depends: - - python >=3.8 - - python - license: Apache-2.0 - license_family: APACHE - size: 62477 - timestamp: 1745345660407 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 - md5: b76541e68fea4d511b1ac46a28dcd2c6 + size: 9414790 + timestamp: 1781071745579 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda + sha256: 3906abfb6511a3bb309e39b9b1b7bc38f50a723971de2395489fd1f379255890 + md5: 4c06a92e74452cfa53623a81592e8934 depends: - python >=3.8 - python license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/packaging?source=compressed-mapping - size: 72010 - timestamp: 1769093650580 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hadf4263_0.conda - sha256: 3613774ad27e48503a3a6a9d72017087ea70f1426f6e5541dbdb59a3b626eaaf - md5: 79f71230c069a287efe3a8614069ddf1 + - pkg:pypi/packaging?source=hash-mapping + size: 91574 + timestamp: 1777103621679 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.56.4-hda50119_1.conda + sha256: 315b52bfa6d1a820f4806f6490d472581438a28e21df175290477caec18972b0 + md5: d53ffc0edc8eabf4253508008493c5bc depends: - __glibc >=2.17,<3.0.a0 - cairo >=1.18.4,<2.0a0 - - fontconfig >=2.15.0,<3.0a0 + - fontconfig >=2.17.1,<3.0a0 - fonts-conda-ecosystem - - fribidi >=1.0.10,<2.0a0 - - harfbuzz >=11.0.1 - - libexpat >=2.7.0,<3.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - libgcc >=13 - - libglib >=2.84.2,<3.0a0 - - libpng >=1.6.49,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 license: LGPL-2.1-or-later - size: 455420 - timestamp: 1751292466873 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-he55ef5b_0.conda - sha256: dd36cd5b6bc1c2988291a6db9fa4eb8acade9b487f6f1da4eaa65a1eebb0a12d - md5: a22cc88bf6059c9bcc158c94c9aab5b8 + size: 458036 + timestamp: 1774281947855 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pango-1.56.4-h8547ced_1.conda + sha256: d209c8b0d53c441ee0bc0d8fce0fcae8e7e05755e51b13b6b9da02c7aa032f98 + md5: 3fc7cc25bba3381e77b753578058e3b0 depends: - cairo >=1.18.4,<2.0a0 - - fontconfig >=2.15.0,<3.0a0 + - fontconfig >=2.17.1,<3.0a0 - fonts-conda-ecosystem - - fribidi >=1.0.10,<2.0a0 - - harfbuzz >=11.0.1 - - libexpat >=2.7.0,<3.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - libgcc >=13 - - libglib >=2.84.2,<3.0a0 - - libpng >=1.6.49,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.0 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libgcc >=14 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 license: LGPL-2.1-or-later - size: 468811 - timestamp: 1751293869070 -- conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h03d888a_0.conda - sha256: dcda7e9bedc1c87f51ceef7632a5901e26081a1f74a89799a3e50dbdc801c0bd - md5: 452d6d3b409edead3bd90fc6317cd6d4 + size: 470441 + timestamp: 1774284032397 +- conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda + sha256: 3d4e6e541e633f6fd22fc2c1d79ad5ec39503dea3ba04fc3e01d5be904ec7cea + md5: 1f1cf3772ba7d4eef989e4679ddf97f7 depends: - cairo >=1.18.4,<2.0a0 - - fontconfig >=2.15.0,<3.0a0 + - fontconfig >=2.17.1,<3.0a0 - fonts-conda-ecosystem - - fribidi >=1.0.10,<2.0a0 - - harfbuzz >=11.0.1 - - libexpat >=2.7.0,<3.0a0 - - libfreetype >=2.13.3 - - libfreetype6 >=2.13.3 - - libglib >=2.84.2,<3.0a0 - - libpng >=1.6.49,<1.7.0a0 - - libzlib >=1.3.1,<2.0a0 + - fribidi >=1.0.16,<2.0a0 + - harfbuzz >=13.2.1 + - libexpat >=2.7.4,<3.0a0 + - libfreetype >=2.14.2 + - libfreetype6 >=2.14.2 + - libglib >=2.86.4,<3.0a0 + - libpng >=1.6.55,<1.7.0a0 + - libzlib >=1.3.2,<2.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-or-later - size: 454854 - timestamp: 1751292618315 -- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.6-pyhcf101f3_0.conda - sha256: 42b2d77ccea60752f3aa929a6413a7835aaacdbbde679f2f5870a744fa836b94 - md5: 97c1ce2fffa1209e7afb432810ec6e12 + size: 454919 + timestamp: 1774282149607 +- conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.7-pyhcf101f3_0.conda + sha256: 611882f7944b467281c46644ffde6c5145d1a7730388bcde26e7e86819b0998e + md5: 39894c952938276405a1bd30e4ce2caf depends: - python >=3.10 - python @@ -12042,8 +10260,8 @@ packages: license_family: MIT purls: - pkg:pypi/parso?source=hash-mapping - size: 82287 - timestamp: 1770676243987 + size: 82472 + timestamp: 1777722955579 - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff md5: 7a3bff861a6583f1889021facefc08b1 @@ -12091,9 +10309,73 @@ packages: - pkg:pypi/pexpect?source=hash-mapping size: 53561 timestamp: 1733302019362 -- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - sha256: 8e1497814a9997654ed7990a79c054ea5a42545679407acbc6f7e809c73c9120 - md5: 67bdec43082fd8a9cffb9484420b39a2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-12.3.0-py314h8ec4b1a_0.conda + sha256: bcab128df8980514061a78b9c67f5004954048f584da20df8c5a78de9e3f5abb + md5: 233e62a8eb894b79b5c93f4f8dec4dcd + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - python_abi 3.14.* *_cp314 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - lcms2 >=2.19.1,<3.0a0 + - tk >=8.6.13,<8.7.0a0 + license: HPND + size: 1108174 + timestamp: 1782912080163 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-12.3.0-py314hac3e5ec_0.conda + sha256: 8d8c5f524a17e9e441cd25210daddb7a3c97d9316dea8493b2150a496b80ea77 + md5: ec3c5434d1b98093c53fa5a0c559b842 + depends: + - python + - python 3.14.* *_cp314 + - libgcc >=14 + - tk >=8.6.13,<8.7.0a0 + - python_abi 3.14.* *_cp314 + - openjpeg >=2.5.4,<3.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libxcb >=1.17.0,<2.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - lcms2 >=2.19.1,<3.0a0 + license: HPND + size: 1077965 + timestamp: 1782912107475 +- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda + sha256: c9dc3212ed0021974541072ee3765a5097a0721191c34ee485d7d7e94449648f + md5: 09b8e6ac8f4a257b59e5d3025f3c9c1d + depends: + - python + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libwebp-base >=1.6.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - openjpeg >=2.5.4,<3.0a0 + - lcms2 >=2.19.1,<3.0a0 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - tk >=8.6.13,<8.7.0a0 + - zlib-ng >=2.3.3,<2.4.0a0 + license: HPND + size: 989058 + timestamp: 1782912129930 +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.1.2-pyh8b19718_0.conda + sha256: 29b7d75bf81ad11645a8e320b369abdc90a92b93f2a9178e853d9dddf82e5106 + md5: 511fbc2c63d2c73650ad1755e4d357ba depends: - python >=3.10,<3.13.0a0 - setuptools @@ -12102,48 +10384,40 @@ packages: license_family: MIT purls: - pkg:pypi/pip?source=compressed-mapping - size: 1181790 - timestamp: 1770270305795 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a - md5: c01af13bdc553d1a8fbfff6e8db075f0 + size: 1203173 + timestamp: 1780262795392 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_2.conda + sha256: 9e5b5be056820ade8b09ef73cf9f4bea037eb9887145d0297ac99e0add88878d + md5: 7cd77fef4da3e1ca9484394616cb71f1 depends: - - libgcc >=14 - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 license: MIT - license_family: MIT - size: 450960 - timestamp: 1754665235234 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda - sha256: e6b0846a998f2263629cfeac7bca73565c35af13251969f45d385db537a514e4 - md5: 1587081d537bd4ae77d1c0635d465ba5 + size: 376220 + timestamp: 1784286827180 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_2.conda + sha256: 414acad3e460cfcf6bf3a764c4b4837359bda9fdc350a85b560e344a9e2306a5 + md5: af8ab93369e53542b135dab29eca49e8 depends: - - libgcc >=14 - libstdcxx >=14 - libgcc >=14 license: MIT - license_family: MIT - size: 357913 - timestamp: 1754665583353 -- conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda - sha256: 246fce4706b3f8b247a7d6142ba8d732c95263d3c96e212b9d63d6a4ab4aff35 - md5: 08c8fa3b419df480d985e304f7884d35 + size: 304146 + timestamp: 1784286832656 +- conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_2.conda + sha256: f37fb21952bd4297f8c7d78e2f256647da2b4ad4e1df097d49ebff8a40275cab + md5: df8da7fe89bdc91b880df69a8eb1c37b depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 license: MIT - license_family: MIT - size: 542795 - timestamp: 1754665193489 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 - md5: 82c1787f2a65c0155ef9652466ee98d6 + size: 257105 + timestamp: 1784286884376 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.10.0-pyhcf101f3_0.conda + sha256: 9e5e1fd3506ccfc4d444fc4d2d39b0ed097d5d0e3bd3d4bdf6bcc81aaf66860d + md5: 2c5ef45db85d34799771629bd5860fd7 depends: - python >=3.10 - python @@ -12151,8 +10425,8 @@ packages: license_family: MIT purls: - pkg:pypi/platformdirs?source=compressed-mapping - size: 25646 - timestamp: 1773199142345 + size: 26308 + timestamp: 1779972894916 - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda sha256: e14aafa63efa0528ca99ba568eaf506eb55a0371d12e6250aaaa61718d2eb62e md5: d7585b6550ad04c8c5e21097ada2888e @@ -12190,7 +10464,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/psutil?source=compressed-mapping + - pkg:pypi/psutil?source=hash-mapping size: 225545 timestamp: 1769678155334 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/psutil-7.2.2-py312hd41f8a7_0.conda @@ -12241,6 +10515,17 @@ packages: license_family: MIT size: 8342 timestamp: 1726803319942 +- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda + sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b + md5: 3c8f2573569bb816483e5cf57efbbe29 + depends: + - libgcc >=13 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + size: 9389 + timestamp: 1726802555076 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 md5: 7d9daffbb8d8e0af0f769dbbcd173a54 @@ -12327,21 +10612,9 @@ packages: license_family: MIT size: 25766 timestamp: 1733236452235 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyclibrary-0.2.2-pyhd8ed1ab_1.conda - sha256: 210a7beee6dce5e57d4d4166b6fd93693ede3e213510efa7373103f10c18d057 - md5: 0cda5dbfd261b08292fcf16429662b0a - depends: - - pyparsing >=2.3.1,<4 - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyclibrary?source=hash-mapping - size: 437505 - timestamp: 1734953615203 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.17.0-pyhcf101f3_0.conda - sha256: 03ae7063dd18f070cf28a441dd86ea476c20ff7fc174d8365a476a650a6ae20f - md5: c09bb5f9960ff1cd334c5573b5ad79c2 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.19.0-pyhcf101f3_0.conda + sha256: 6deac8ece8b8e243634c13837967b253b8c9b09ef39beaaff494584ee05465c7 + md5: 87921f66a4dc56ce92e4ff13be5f63dc depends: - accessible-pygments - babel @@ -12349,46 +10622,26 @@ packages: - docutils !=0.17.0 - pygments >=2.7 - python >=3.10 - - sphinx >=7.0 + - sphinx >=8.0 - typing_extensions - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pydata-sphinx-theme?source=hash-mapping - size: 1655347 - timestamp: 1775308781489 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.11-pyhd8ed1ab_0.conda - sha256: 471cc2e244e5ffdd909d4c46219d59b3ba1e7fe9bd7e99c6c64382d4939f63a3 - md5: 1cf39bf57f0b038b12dffce5a4b27e14 - depends: - - ffmpeg >=4.0.0 - - freetype - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - size: 724353 - timestamp: 1762495207513 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.13-pyhd8ed1ab_0.conda - sha256: 638d74a3a5f62f0c2deca8edb796835c1a5f14f0f1771aad63e3b3b7f65993b4 - md5: 98c2b80f5741f63f6ca5b6119c56eeaf + - pkg:pypi/pydata-sphinx-theme?source=compressed-mapping + size: 1312203 + timestamp: 1781528227244 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.15-pyhd8ed1ab_0.conda + sha256: 8ca25ae8d49e85e76b0f86e265cb0298874cb7c2e65b2620defaa80ad49560dd + md5: d46ece489f2dcce81d7af736025a9e42 depends: - ffmpeg >=4.0.0 - - freetype - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - size: 725938 - timestamp: 1770169149613 -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a - md5: 6b6ece66ebcae2d5f326c77ef2c5a066 - depends: - - python >=3.9 - license: BSD-2-Clause + - freetype + - python >=3.10 + license: BSD-3-Clause license_family: BSD - size: 889287 - timestamp: 1750615908735 + size: 729762 + timestamp: 1782670710304 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda sha256: cf70b2f5ad9ae472b71235e5c8a736c9316df3705746de419b59d442e8348e86 md5: 16c18772b340887160c79a6acc022db0 @@ -12397,7 +10650,7 @@ packages: license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/pygments?source=compressed-mapping + - pkg:pypi/pygments?source=hash-mapping size: 893031 timestamp: 1774796815820 - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda @@ -12408,10 +10661,73 @@ packages: - python license: MIT license_family: MIT - purls: - - pkg:pypi/pyparsing?source=hash-mapping size: 110893 timestamp: 1769003998136 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda + sha256: e410d0d4151f418dc75ea2dc38dfb0e7a136090b6874e5ca1c699fa840b4994d + md5: 5d2051f0630a568926943fc53c0aaa4c + depends: + - python + - qt6-main 6.11.1.* + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - libopengl >=1.7.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - python_abi 3.14.* *_cp314 + - qt6-main >=6.11.1,<6.12.0a0 + - libclang13 >=22.1.5 + - libxml2 + - libxml2-16 >=2.14.6 + license: LGPL-3.0-only + license_family: LGPL + size: 13821776 + timestamp: 1778933872780 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda + sha256: 773bb42e09bfe13469b3d1db0dd79821146131210bec9eb1b69e761d0b5e9c26 + md5: 48e83c1e5552d2bf7f5c8d7d8bd9fc85 + depends: + - python + - qt6-main 6.11.1.* + - libgcc >=14 + - libstdcxx >=14 + - libopengl >=1.7.0,<2.0a0 + - libxslt >=1.1.43,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - python_abi 3.14.* *_cp314 + - libegl >=1.7.0,<2.0a0 + - qt6-main >=6.11.1,<6.12.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - libgl >=1.7.0,<2.0a0 + - libclang13 >=22.1.5 + license: LGPL-3.0-only + license_family: LGPL + size: 12361659 + timestamp: 1778933881635 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda + sha256: 070802d5e1e1c1feb24d481efbd90b300fb0ecc1ce4312a3bbcbaae4393c05f9 + md5: 638be6b8674e7acf7a84132903cf4c8e + depends: + - python + - qt6-main 6.11.1.* + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - libxslt >=1.1.43,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - qt6-main >=6.11.1,<6.12.0a0 + - python_abi 3.14.* *_cp314 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libclang13 >=22.1.5 + license: LGPL-3.0-only + license_family: LGPL + size: 11579652 + timestamp: 1778933912020 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -12437,17 +10753,17 @@ packages: - pkg:pypi/pysocks?source=hash-mapping size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.0.2-pyhcf101f3_0.conda - sha256: 9e749fb465a8bedf0184d8b8996992a38de351f7c64e967031944978de03a520 - md5: 2b694bad8a50dc2f712f5368de866480 +- conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda + sha256: 430051d80765207a7d782b2b188230ba1489d35c6e75fd9903f76cb9fda4af16 + md5: 64c98a12c4e23eb238bf66bbecafdf3c depends: + - colorama - pygments >=2.7.2 - python >=3.10 - iniconfig >=1.0.1 - packaging >=22 - pluggy >=1.5,<2 - tomli >=1 - - colorama >=0.4 - exceptiongroup >=1 - python constrains: @@ -12455,9 +10771,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pytest?source=hash-mapping - size: 299581 - timestamp: 1765062031645 + - pkg:pypi/pytest?source=compressed-mapping + size: 306724 + timestamp: 1782127176429 - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-benchmark-5.2.3-pyhd8ed1ab_0.conda sha256: 2f2229415a6e5387c1faaedf442ea8c07471cb2bf5ad1007b9cfb83ea85ca29a md5: 0e7294ed4af8b833fcd2c101d647c3da @@ -12517,86 +10833,32 @@ packages: purls: [] size: 31608571 timestamp: 1772730708989 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.1-h32b2ec7_100_cp314.conda - build_number: 100 - sha256: 30d9c0997cec58298b4de04b44b4acc2bd16860ecbb8f6e623256c71820918ed - md5: b6e8431a0badd5f3e9426d0258b32e81 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libuuid >=2.41.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 36768932 - timestamp: 1764758363259 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.2-h32b2ec7_100_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda build_number: 100 - sha256: a120fb2da4e4d51dd32918c149b04a08815fd2bd52099dad1334647984bb07f1 - md5: 1cef1236a05c3a98f68c33ae9425f656 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libuuid >=2.41.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 36790521 - timestamp: 1765021515427 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.3-h32b2ec7_101_cp314.conda - build_number: 101 - sha256: cb0628c5f1732f889f53a877484da98f5a0e0f47326622671396fb4f2b0cd6bd - md5: c014ad06e60441661737121d3eae8a60 + sha256: 6d28ac2b061179deb434d3d57afa98ffd20ec3c5d44ab8048a1ca33424b22d38 + md5: 0b9b2f83b5b600e1ac38becde8d0dd44 depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.8.1,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 + - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 - size: 36702440 - timestamp: 1770675584356 + size: 36717183 + timestamp: 1781255094700 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.13-h91f4b29_0_cpython.conda sha256: 61933478813f5fd96c89a00dd964201b0266d71d2e3bc4dd5679354056e46948 @@ -12624,83 +10886,31 @@ packages: purls: [] size: 13757191 timestamp: 1772728951853 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.1-hb06a95a_100_cp314.conda - build_number: 100 - sha256: 482bc557d2a5b13a854a2fb8abdcfcef527640720fabdccb9421fa109e4cb4b8 - md5: 440084d3af1aab4e196a4198988d3c24 - depends: - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libuuid >=2.41.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 37149339 - timestamp: 1764757159033 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.2-hb06a95a_100_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda build_number: 100 - sha256: 41adf6ee7a953ef4f35551a4a910a196b0a75e1ded458df5e73ef321863cb3f2 - md5: 432459e6961a5bc4cfe7cd080aee721a - depends: - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libuuid >=2.41.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 37217543 - timestamp: 1765020325291 - python_site_packages_path: lib/python3.14/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.3-hb06a95a_101_cp314.conda - build_number: 101 - sha256: 87e9dff5646aba87cecfbc08789634c855871a7325169299d749040b0923a356 - md5: 205011b36899ff0edf41b3db0eda5a44 + sha256: dd56fd95db3cb49a69fbe41df80afc8bd5214daa829bcd3930de80f0408ba5eb + md5: 416c74941d13d9f2b9e68b1a900f7f50 depends: - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.8.1,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 + - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libuuid >=2.42.1,<3.0a0 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - openssl >=3.5.7,<4.0a0 - python_abi 3.14.* *_cp314 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 - size: 37305578 - timestamp: 1770674395875 + size: 34900936 + timestamp: 1781254861576 python_site_packages_path: lib/python3.14/site-packages - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.13-h0159041_0_cpython.conda sha256: a02b446d8b7b167b61733a3de3be5de1342250403e72a63b18dac89e99e6180e @@ -12724,67 +10934,19 @@ packages: purls: [] size: 15840187 timestamp: 1772728877265 -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.1-h4b44e0e_100_cp314.conda - build_number: 100 - sha256: 21feeb6ee92abd17bf73e063dbcfe0b00ccb5e67f291379dee7183294413a01f - md5: 3d23736b5ad17ea24fcd4d6f23663f0d - depends: - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 16934169 - timestamp: 1764756783162 - python_site_packages_path: Lib/site-packages -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.2-h4b44e0e_100_cp314.conda +- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda build_number: 100 - sha256: 6857d7c97cc71fe9ba298dcb1d3b66cc7df425132ab801babd655faa3df48f32 - md5: c3c73414d5ae3f543c531c978d9cc8b8 - depends: - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.1,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.1,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.4,<4.0a0 - - python_abi 3.14.* *_cp314 - - tk >=8.6.13,<8.7.0a0 - - tzdata - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - zstd >=1.5.7,<1.6.0a0 - license: Python-2.0 - size: 16833248 - timestamp: 1765020224759 - python_site_packages_path: Lib/site-packages -- conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.3-h4b44e0e_101_cp314.conda - build_number: 101 - sha256: 3f99d83bfd95b9bdae64a42a1e4bf5131dc20b724be5ac8a9a7e1ac2c0f006d7 - md5: 7ec2be7eaf59f83f3e5617665f3fbb2e + sha256: f1acb89cb1a6bec9a94ae9f8e7411839de009cd64d3ac6a6aec4f3d8a481099a + md5: 8333e3ca6f8d1ebcd30b678dd53f0a25 depends: - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 + - libexpat >=2.8.1,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 + - liblzma >=5.8.3,<6.0a0 - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libzlib >=1.3.2,<2.0a0 + - openssl >=3.5.7,<4.0a0 - python_abi 3.14.* *_cp314 - tk >=8.6.13,<8.7.0a0 - tzdata @@ -12793,8 +10955,8 @@ packages: - vc14_runtime >=14.44.35208 - zstd >=1.5.7,<1.6.0a0 license: Python-2.0 - size: 18273230 - timestamp: 1770675442998 + size: 18481352 + timestamp: 1781256034828 python_site_packages_path: Lib/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 @@ -12852,24 +11014,21 @@ packages: license_family: BSD size: 6989 timestamp: 1752805904792 -- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda - sha256: a7505522048dad63940d06623f07eb357b9b65510a8d23ff32b99add05aac3a1 - md5: 64cbe4ecbebe185a2261d3f298a60cde +- conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-312-py312h829343e_0.conda + sha256: e4560c30234075bf17c641cb651279ff6c6f2bad581dfc37ed780f159909b2d3 + md5: 47f425e058b0a4b66712784a0d24b45d depends: - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - python_abi 3.12.* *_cp312 license: PSF-2.0 license_family: PSF purls: - - pkg:pypi/pywin32?source=hash-mapping - size: 6684490 - timestamp: 1756487136116 + - pkg:pypi/pywin32?source=compressed-mapping + size: 4459779 + timestamp: 1781362887119 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py312h8a5da7c_1.conda sha256: cb142bfd92f6e55749365ddc244294fa7b64db6d08c45b018ff1c658907bfcbf md5: 15878599a87992e44c059731771591cb @@ -12916,32 +11075,32 @@ packages: - pkg:pypi/pyyaml?source=hash-mapping size: 179738 timestamp: 1770223468771 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_3.conda noarch: python - sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 - md5: 082985717303dab433c976986c674b35 + sha256: 970b2a1d12983d8d1cc05d914ad88a0b6ef1fa14038c9649aa834dd6ebee65d7 + md5: acd216255e1370e9aeab5351b831f07c depends: - python - libgcc >=14 - libstdcxx >=14 - __glibc >=2.17,<3.0.a0 - - zeromq >=4.3.5,<4.4.0a0 - _python_abi3_support 1.* - cpython >=3.12 + - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pyzmq?source=hash-mapping - size: 211567 - timestamp: 1771716961404 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + size: 210896 + timestamp: 1779483879367 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_3.conda noarch: python - sha256: afdff66cb54e22d0d2c682731e08bb8f319dfd93f3cdcff4a4640cb5a8ae2460 - md5: 130d781798bb24a0b86290e65acd50d8 + sha256: 0bf98beaccc17a101d8e8496b88708f938e098a2606f6cc802379dc716572614 + md5: acc7f0e3fc38e949267bc9a4f09ded15 depends: - python - - libstdcxx >=14 - libgcc >=14 + - libstdcxx >=14 - zeromq >=4.3.5,<4.4.0a0 - _python_abi3_support 1.* - cpython >=3.12 @@ -12949,87 +11108,272 @@ packages: license_family: BSD purls: - pkg:pypi/pyzmq?source=hash-mapping - size: 212585 - timestamp: 1771716963309 -- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_2.conda + size: 212016 + timestamp: 1779483886884 +- conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-27.1.0-py312h343a6d4_3.conda noarch: python - sha256: d84bcc19a945ca03d1fd794be3e9896ab6afc9f691d58d9c2da514abe584d4df - md5: eb1ec67a70b4d479f7dd76e6c8fe7575 + sha256: d7e65c44ea8a92f80cc0e424b4b7dbe63b8a9ec04ea774b7d4f7aed4c34cce4c + md5: ebbda9a4e5161d6e1f98146ad057dc10 depends: - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - zeromq >=4.3.5,<4.3.6.0a0 - _python_abi3_support 1.* - cpython >=3.12 + - zeromq >=4.3.5,<4.3.6.0a0 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/pyzmq?source=hash-mapping - size: 183235 - timestamp: 1771716967192 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda - sha256: 8e0b7962cf8bec9a016cd91a6c6dc1f9ebc8e7e316b1d572f7b9047d0de54717 - md5: d487d93d170e332ab39803e05912a762 + size: 182831 + timestamp: 1779483925948 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc + md5: 353823361b1d27eb3960efb076dfcaf6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + size: 552937 + timestamp: 1720813982144 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda + sha256: 49f777bdf3c5e030a8c7b24c58cdfe9486b51d6ae0001841079a3228bdf9fb51 + md5: bb138086d938e2b64f5f364945793ebf + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LicenseRef-Qhull + size: 554571 + timestamp: 1720813941183 +- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 + md5: 854fbdff64b572b5c0b470f334d34c11 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: LicenseRef-Qhull + size: 1377020 + timestamp: 1720814433486 +- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda + sha256: aefbc43bde188ff4027d480da99c7fa9e8e6341e9762e065190239cb9b99bb1c + md5: 331d660aef48fec733a878dd1f8f4206 + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgl-devel + - libegl-devel + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libsqlite >=3.53.2,<4.0a0 + - libpq >=18.4,<19.0a0 + - xorg-libice >=1.1.2,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - wayland >=1.25.0,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - libpng >=1.6.58,<1.7.0a0 + - harfbuzz >=14.2.1 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libxcb >=1.17.0,<2.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - zstd >=1.5.7,<1.6.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - icu >=78.3,<79.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - alsa-lib >=1.2.16,<1.3.0a0 + - openssl >=3.5.6,<4.0a0 + - libglib >=2.88.1,<3.0a0 + - libgl >=1.7.0,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - dbus >=1.16.2,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + size: 60185421 + timestamp: 1780593127053 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda + sha256: 2ccded6ae260724733b80c1fb1c627068fd9cc8752ad425a3ea827fd4675ec23 + md5: bff3e4e7be46f5800da83261c2cec35b + depends: + - libxcb + - xcb-util + - xcb-util-wm + - xcb-util-keysyms + - xcb-util-image + - xcb-util-renderutil + - xcb-util-cursor + - libgl-devel + - libegl-devel + - libstdcxx >=14 + - libgcc >=14 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - xorg-libice >=1.1.2,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - openssl >=3.5.6,<4.0a0 + - zstd >=1.5.7,<1.6.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libxml2 + - libxml2-16 >=2.14.6 + - xcb-util-cursor >=0.1.6,<0.2.0a0 + - pcre2 >=10.47,<10.48.0a0 + - xorg-libxcomposite >=0.4.7,<1.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - xcb-util-keysyms >=0.4.1,<0.5.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxxf86vm >=1.1.7,<2.0a0 + - libpng >=1.6.58,<1.7.0a0 + - dbus >=1.16.2,<2.0a0 + - libxcb >=1.17.0,<2.0a0 + - libglib >=2.88.1,<3.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - harfbuzz >=14.2.1 + - libwebp-base >=1.6.0,<2.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + - xorg-libxdamage >=1.1.6,<2.0a0 + - libegl >=1.7.0,<2.0a0 + - wayland >=1.25.0,<2.0a0 + - xorg-libxrandr >=1.5.5,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - icu >=78.3,<79.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - alsa-lib >=1.2.16,<1.3.0a0 + - xcb-util-wm >=0.4.2,<0.5.0a0 + - libsqlite >=3.53.2,<4.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - libpq >=18.4,<19.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 + - xorg-libsm >=1.2.6,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - fontconfig >=2.18.1,<3.0a0 + - fonts-conda-ecosystem + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + size: 63087962 + timestamp: 1780593135478 +- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda + sha256: c0f0552a879e18282799431c7d2769b269839ac3b3735082e754df3c6fa0728d + md5: a8d735f3faf356a24acf9eea0a940a0f + depends: + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - krb5 >=1.22.2,<1.23.0a0 + - libglib >=2.88.1,<3.0a0 + - libpng >=1.6.58,<1.7.0a0 + - double-conversion >=3.4.0,<3.5.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - libwebp-base >=1.6.0,<2.0a0 + - openssl >=3.5.6,<4.0a0 + - icu >=78.3,<79.0a0 + - libjpeg-turbo >=3.1.4.1,<4.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - libtiff >=4.7.1,<4.8.0a0 + - libsqlite >=3.53.1,<4.0a0 + - harfbuzz >=14.2.0 + constrains: + - qt ==6.11.1 + license: LGPL-3.0-only + license_family: LGPL + size: 89576886 + timestamp: 1780400596481 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda + sha256: f0931894c751b22be09d7c976343a2957a14a59cfe0db04d916d1b93bd66ffcf + md5: da47d3251c0f0d16b2801afe5a77b532 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libnl >=3.11.0,<4.0a0 - libstdcxx >=14 - - libsystemd0 >=257.10 - - libudev1 >=257.10 + - libsystemd0 >=257.13 + - libudev1 >=257.13 license: Linux-OpenIB license_family: BSD purls: [] - size: 1268666 - timestamp: 1769154883613 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-61.0-h1f0f388_0.conda - sha256: 1c69fab2e833080d48f24d5ac06ea6745c470a8ef779d526bd1edd846184da7e - md5: 58f1eb9b507e3e098091840c6f1f9c11 + size: 1281605 + timestamp: 1778528449130 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda + sha256: 89dc4066bf0a2ee8e0cdeb6b6e8884c2c36c9a82855a438a0720ee59297fae3e + md5: 94e99208cc8828d5953fac098814a0e9 depends: - libgcc >=14 - libnl >=3.11.0,<4.0a0 - libstdcxx >=14 - - libsystemd0 >=257.10 - - libudev1 >=257.10 + - libsystemd0 >=257.13 + - libudev1 >=257.13 license: Linux-OpenIB license_family: BSD purls: [] - size: 1341616 - timestamp: 1769154919140 -- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda - sha256: 2d6d0c026902561ed77cd646b5021aef2d4db22e57a5b0178dfc669231e06d2c - md5: 283b96675859b20a825f8fa30f311446 - depends: - - libgcc >=13 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - size: 282480 - timestamp: 1740379431762 + size: 1351719 + timestamp: 1778528506759 - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 345073 - timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda - sha256: 54bed3a3041befaa9f5acde4a37b1a02f44705b7796689574bcf9d7beaad2959 - md5: c0f08fc2737967edde1a272d4bf41ed9 - depends: - - libgcc >=13 + - libgcc >=14 - ncurses >=6.5,<7.0a0 license: GPL-3.0-only license_family: GPL - size: 291806 - timestamp: 1740380591358 + purls: [] + size: 345073 + timestamp: 1765813471974 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 md5: 3d49cad61f829f4f0e0611547a9cda12 @@ -13056,9 +11400,9 @@ packages: - pkg:pypi/referencing?source=hash-mapping size: 51788 timestamp: 1760379115194 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.1-pyhcf101f3_0.conda - sha256: c0249bc4bf4c0e8e06d0e7b4d117a5d593cc4ab2144d5006d6d47c83cb0af18e - md5: 10afbb4dbf06ff959ad25a92ccee6e59 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.34.2-pyhcf101f3_0.conda + sha256: 1715246b19c9f85ee022933b4845f2fc14ac9184981b7b7d9b728bec8e9588da + md5: 4a85203c1d80c1059086ae860836ffb9 depends: - python >=3.10 - certifi >=2023.5.7 @@ -13067,32 +11411,32 @@ packages: - urllib3 >=1.26,<3 - python constrains: - - chardet >=3.0.2,<6 + - chardet >=3.0.2,<8 license: Apache-2.0 license_family: APACHE purls: - pkg:pypi/requests?source=compressed-mapping - size: 63712 - timestamp: 1774894783063 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.30.0-py312h868fb18_0.conda - sha256: 62f46e85caaba30b459da7dfcf3e5488ca24fd11675c33ce4367163ab191a42c - md5: 3ffc5a3572db8751c2f15bacf6a0e937 + size: 68709 + timestamp: 1778851103479 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.6.3-py312h192e038_0.conda + sha256: 4a190c74b5f3b441820a3142b03a489987c724b65237882ebe87d75892345d17 + md5: 40984fba15f43a366ea4c6dea2b4c8bd depends: - python - - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 - python_abi 3.12.* *_cp312 constrains: - __glibc >=2.17 license: MIT license_family: MIT purls: - - pkg:pypi/rpds-py?source=hash-mapping - size: 383750 - timestamp: 1764543174231 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-0.30.0-py312h75d7d99_0.conda - sha256: 51e7d33b71b30ac5ceab09cc35521eccdaf4e3897ca4c6eda1059fb82a91b285 - md5: 85212b0e327723285cc36efddd25e03d + - pkg:pypi/rpds-py?source=compressed-mapping + size: 300259 + timestamp: 1782831325201 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rpds-py-2026.6.3-py312h00f41f5_0.conda + sha256: 0f80e0149ea885b378cbcbc5c01b7b3b32fb0918775d3898e97b69999fe3b78b + md5: 9d4967f1582f83435b649a7998e7f942 depends: - python - libgcc >=14 @@ -13103,11 +11447,11 @@ packages: license_family: MIT purls: - pkg:pypi/rpds-py?source=hash-mapping - size: 380599 - timestamp: 1764543504405 -- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.30.0-py312hdabe01f_0.conda - sha256: faad05e6df2fc15e3ae06fdd71a36e17ff25364777aa4c40f2ec588740d64091 - md5: 2c51baeda0a355b0a5e7b6acb28cf02d + size: 295235 + timestamp: 1782831257757 +- conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.6.3-py312hd944d65_0.conda + sha256: 8df011d21a56a4fb9aa0d5b27c2d0138058a4d82af532723e1002a643c02dead + md5: 4a097aa0b62666ceb97a5ed5b9345131 depends: - python - vc >=14.3,<15 @@ -13117,9 +11461,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/rpds-py?source=hash-mapping - size: 243577 - timestamp: 1764543069837 + - pkg:pypi/rpds-py?source=compressed-mapping + size: 217956 + timestamp: 1782831653430 - conda: https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda sha256: b48bebe297a63ae60f52e50be328262e880702db4d9b4e86731473ada459c2a1 md5: 06ad944772941d5dae1e0d09848d8e49 @@ -13176,9 +11520,9 @@ packages: - pkg:pypi/ruamel-yaml-clib?source=hash-mapping size: 105961 timestamp: 1766159551536 -- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_0.conda - sha256: e3ad577361d67f6c078a6a7a3898bf0617b937d44dc4ccd57aa3336f2b5778dd - md5: 3e38daeb1fb05a95656ff5af089d2e4c +- conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.18.0-py312h54fa4ab_0.conda + sha256: c304dfb0bbf0d824d3706623f6437237d7bfc83941bb7b18f80e05abb10ec79e + md5: f8d242c552b0f7f682451ce95879af5e depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -13190,18 +11534,18 @@ packages: - libstdcxx >=14 - numpy <2.7 - numpy >=1.23,<3 - - numpy >=1.25.2 + - numpy >=2.0.0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=compressed-mapping - size: 17109648 - timestamp: 1771880675810 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/scipy-1.17.1-py312he5b0e10_0.conda - sha256: 24e608c0c94865f40df5201175b921068a297663bcc56e538970003ddf964b59 - md5: bc10849473fe9b8c95f1a07a396baf26 + size: 17104066 + timestamp: 1781912972195 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/scipy-1.18.0-py312ha7f05e0_0.conda + sha256: 79343875bcc5cce28a54001844b221395b883a3d28fd8d9125dd38a4afab825b + md5: c957cde07f79a2cf5c7e9cdab39fa90b depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -13212,26 +11556,25 @@ packages: - libstdcxx >=14 - numpy <2.7 - numpy >=1.23,<3 - - numpy >=1.25.2 + - numpy >=2.0.0 - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/scipy?source=hash-mapping - size: 16675045 - timestamp: 1771881005471 -- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py312h9b3c559_0.conda - sha256: bdb2437aa5db3a00c5e69808f9d1a695bbe74b4758ffdf2e79777c8e11680443 - md5: bf4d70d225c530053128bae8d2531516 + size: 17170333 + timestamp: 1781912658149 +- conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py312h9b3c559_0.conda + sha256: 68e7c49be1e409ed2ac44f2977581d58a9a4d12e6724a4a5c5470348e5e40f34 + md5: e1fee578f6c533ff532693143919afde depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 - numpy <2.7 - numpy >=1.23,<3 - - numpy >=1.25.2 + - numpy >=2.0.0 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 - ucrt >=10.0.20348.0 @@ -13239,10 +11582,9 @@ packages: - vc14_runtime >=14.44.35208 license: BSD-3-Clause license_family: BSD - purls: - - pkg:pypi/scipy?source=hash-mapping - size: 15009886 - timestamp: 1771881635432 + purls: [] + size: 15077907 + timestamp: 1781914327034 - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda sha256: 987ad072939fdd51c92ea8d3544b286bb240aefda329f9b03a51d9b7e777f9de md5: cdd138897d94dc07d99afe7113a07bec @@ -13282,194 +11624,66 @@ packages: license: Zlib size: 572101 timestamp: 1757842925694 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.28-h3b84278_0.conda - sha256: 654c8a0b37f4b235cdabdd8f9ac201a73daffcda1280e0f23b53d6f9accff34b - md5: 19960bb44796feb66363ad9597242237 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.12-hdeec2a5_0.conda + sha256: 2607340a7adbf7b7ec902892bce00c9fd35ccdb7f1e8d4ef1efd51641ad36a3c + md5: 1c36b749acf532314ad381f6c1663647 depends: - - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - libgcc >=14 - - dbus >=1.16.2,<2.0a0 - - libgl >=1.7.0,<2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - pulseaudio-client >=17.0,<17.1.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - __glibc >=2.17,<3.0.a0 + - liburing >=2.14,<2.15.0a0 - xorg-libxfixes >=6.0.2,<7.0a0 - - wayland >=1.24.0,<2.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - liburing >=2.12,<2.13.0a0 - - libudev1 >=257.10 - - libunwind >=1.8.3,<1.9.0a0 - libusb >=1.0.29,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - libxkbcommon >=1.13.0,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - libgl >=1.7.0,<2.0a0 + - dbus >=1.16.2,<2.0a0 + - libdrm >=2.4.127,<2.5.0a0 + - pulseaudio-client >=17.0,<17.1.0a0 + - xorg-libxi >=1.8.3,<2.0a0 + - wayland >=1.25.0,<2.0a0 - libegl >=1.7.0,<2.0a0 + - libxkbcommon >=1.13.2,<2.0a0 + - libudev1 >=257.13 + - libunwind >=1.8.3,<1.9.0a0 + - xorg-libxscrnsaver >=1.2.4,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 + - xorg-libxcursor >=1.2.3,<2.0a0 + - xorg-libxtst >=1.2.5,<2.0a0 license: Zlib - size: 1939082 - timestamp: 1764713273386 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.2.30-h3b84278_0.conda - sha256: baff0dc170b83d2633093e25878d51db65a5d68200f1242db894fcd64e73a9f6 - md5: e275a47f63cca221ba9da6441c976ae2 + size: 2156114 + timestamp: 1782948044627 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.12-had2c13b_0.conda + sha256: 20b512f72fe12bdd07c917f20c437f318a8e1b1fb658278e8da0ba26c6ff6826 + md5: 7d71ee12487f73cf9628f2a6e6081ed5 depends: - libgcc >=14 - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - libudev1 >=257.10 - - xorg-libxext >=1.3.6,<2.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - wayland >=1.24.0,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - dbus >=1.16.2,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - - libunwind >=1.8.3,<1.9.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - libdrm >=2.4.125,<2.5.0a0 - pulseaudio-client >=17.0,<17.1.0a0 - - xorg-libxscrnsaver >=1.2.4,<2.0a0 - - liburing >=2.13,<2.14.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - libgl >=1.7.0,<2.0a0 - - libusb >=1.0.29,<2.0a0 - license: Zlib - size: 1938719 - timestamp: 1767236277588 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.2-hdeec2a5_0.conda - sha256: 64b982664550e01c25f8f09333c0ee54d4764a80fe8636b8aaf881fe6e8a0dbe - md5: 88a69db027a8ff59dab972a09d69a1ab - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - xorg-libxscrnsaver >=1.2.4,<2.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - - libudev1 >=257.10 - - pulseaudio-client >=17.0,<17.1.0a0 - - xorg-libxtst >=1.2.5,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 + - wayland >=1.25.0,<2.0a0 - liburing >=2.14,<2.15.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - libunwind >=1.8.3,<1.9.0a0 + - libxkbcommon >=1.13.2,<2.0a0 - libusb >=1.0.29,<2.0a0 - - dbus >=1.16.2,<2.0a0 - xorg-libxext >=1.3.7,<2.0a0 - - libgl >=1.7.0,<2.0a0 - - xorg-libxi >=1.8.2,<2.0a0 - - wayland >=1.24.0,<2.0a0 - license: Zlib - size: 2138749 - timestamp: 1771668185803 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.2.28-h3d544e7_0.conda - sha256: 0074820265c6210833bad8d1961f78286e0d614eb0965d70f91094209ad3e8ad - md5: 2ceab22e66c471475aa8f04af986d55a - depends: - - libstdcxx >=14 - - libgcc >=14 - - libxkbcommon >=1.13.0,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - libudev1 >=257.10 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - - dbus >=1.16.2,<2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - libgl >=1.7.0,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - libusb >=1.0.29,<2.0a0 - - wayland >=1.24.0,<2.0a0 - - liburing >=2.12,<2.13.0a0 - - libunwind >=1.8.3,<1.9.0a0 - - pulseaudio-client >=17.0,<17.1.0a0 - license: Zlib - size: 1929093 - timestamp: 1764713313724 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.2.30-h3d544e7_0.conda - sha256: 64011fb1b88a16bb36bc520acdcf408a8c94a3a6ebf1b3efed16a8f173027e92 - md5: a9dec18b073d69a966793c1b8e39127c - depends: - - libstdcxx >=14 - - libgcc >=14 - - libvulkan-loader >=1.4.328.1,<2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - libusb >=1.0.29,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 + - libvulkan-loader >=1.4.341.0,<2.0a0 - libunwind >=1.8.3,<1.9.0a0 - - pulseaudio-client >=17.0,<17.1.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - wayland >=1.24.0,<2.0a0 - dbus >=1.16.2,<2.0a0 - - liburing >=2.13,<2.14.0a0 - - libudev1 >=257.10 - - libgl >=1.7.0,<2.0a0 - - xorg-libx11 >=1.8.12,<2.0a0 - license: Zlib - size: 1928569 - timestamp: 1767236340915 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.2-had2c13b_0.conda - sha256: 17aad2e3439d6d778bf995134f37e442a8420adc740457f43d647d4dbf0b10fe - md5: c667298eebd2296ace8cb07dbbba95c0 - depends: - - libgcc >=14 - - libstdcxx >=14 - - xorg-libxi >=1.8.2,<2.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libxkbcommon >=1.13.1,<2.0a0 - - wayland >=1.24.0,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 - libegl >=1.7.0,<2.0a0 - - xorg-libxext >=1.3.7,<2.0a0 - - libgl >=1.7.0,<2.0a0 + - xorg-libxi >=1.8.3,<2.0a0 - xorg-libxtst >=1.2.5,<2.0a0 - - libudev1 >=257.10 - - pulseaudio-client >=17.0,<17.1.0a0 - - libusb >=1.0.29,<2.0a0 - xorg-libxcursor >=1.2.3,<2.0a0 - - libdrm >=2.4.125,<2.5.0a0 - - xorg-libxscrnsaver >=1.2.4,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - - libunwind >=1.8.3,<1.9.0a0 - - liburing >=2.14,<2.15.0a0 - - dbus >=1.16.2,<2.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - license: Zlib - size: 2136476 - timestamp: 1771668207211 -- conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.2.28-h5112557_0.conda - sha256: d4e0d53652a8087d2aa2607491c6ed8689b0fb72e1e66e1c012ef8e01f579e64 - md5: 713c8c89953e4a3a17e751746e372032 - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libusb >=1.0.29,<2.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 - license: Zlib - size: 1520902 - timestamp: 1764713305315 -- conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.2.30-h5112557_0.conda - sha256: 6b02bf3f1924bcf3d984a0535528e0b39ba99c5edc758f0d167b39cd33545479 - md5: 79242ec5d52eee72a224c252c294db62 - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libusb >=1.0.29,<2.0a0 - - libvulkan-loader >=1.4.328.1,<2.0a0 + - libudev1 >=257.13 + - libdrm >=2.4.127,<2.5.0a0 license: Zlib - size: 1521101 - timestamp: 1767236315915 -- conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.2-h5112557_0.conda - sha256: a4677774a9d542c6f4bac8779a2d7105748d38d8b7d56c8d02f36d14fba471b9 - md5: a0256884d35489e520360267e67ce3fc + size: 2153567 + timestamp: 1782948073672 +- conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.12-h5112557_0.conda + sha256: cd70a95559fdcaa9809d7c697b1d2e283c2d61eb184f91f7b03f8c2291e206a8 + md5: 5f80121d90de6623ae8e0eee34da16ff depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 @@ -13477,44 +11691,22 @@ packages: - libvulkan-loader >=1.4.341.0,<2.0a0 - libusb >=1.0.29,<2.0a0 license: Zlib - size: 1669623 - timestamp: 1771668231217 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda - sha256: 972560fcf9657058e3e1f97186cc94389144b46dbdf58c807ce62e83f977e863 - md5: 4de79c071274a53dcaf2a8c749d1499e - depends: - - python >=3.9 - license: MIT - license_family: MIT - size: 748788 - timestamp: 1748804951958 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 - md5: 8e194e7b992f99a5015edbd4ebd38efd + size: 1680362 + timestamp: 1782948074728 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda + sha256: 48a9f96016505debadfc67f06de7ac548decbc38d327409b24b0432ef6f16335 + md5: 6bf6acbab2499830180ec88c3aff2fa4 depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/setuptools?source=hash-mapping - size: 639697 - timestamp: 1773074868565 -- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h3e344bc_0.conda - sha256: fd4d20f8b74c473e3579f181c40687697777be7ac617ee62866a2fe3199745d9 - md5: 6455b7f6e2c8caeb87b83cab7163bcb8 - depends: - - __glibc >=2.17,<3.0.a0 - - glslang >=16,<17.0a0 - - libgcc >=14 - - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 - license: Apache-2.0 - license_family: Apache - size: 113361 - timestamp: 1764287965059 -- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2025.5-h718be3e_1.conda - sha256: 0c2d6f24ee2b614ee1da4d7d99cc9944ea1ace65455a47d48d8c1f726317168a - md5: 8dc8dda113c4c568256bdd486b6e842e + - pkg:pypi/setuptools?source=compressed-mapping + size: 642081 + timestamp: 1783619174976 +- conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda + sha256: c6e3280867e54c97996a4fedda0ab72c92d48d1d69258bddf910130df72c169d + md5: 6438976979721e2f60ec47327d8d38df depends: - __glibc >=2.17,<3.0.a0 - glslang >=16,<17.0a0 @@ -13523,23 +11715,11 @@ packages: - spirv-tools >=2026,<2027.0a0 license: Apache-2.0 license_family: Apache - size: 113513 - timestamp: 1770208767759 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-h8c88b8f_0.conda - sha256: a8d6b35ecae1d9605e7944b6b5562b5d857355cc7be493b13fee550f7169fb40 - md5: 3a720e8647ebfff1322d81beb8a8be95 - depends: - - glslang >=16,<17.0a0 - - libgcc >=14 - - libstdcxx >=14 - - spirv-tools >=2025,<2026.0a0 - license: Apache-2.0 - license_family: Apache - size: 115395 - timestamp: 1764287938541 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda - sha256: bf3f47847832e33acbcb7a1aba948f3b574979ad2a91f2ebdc9fc685c09433db - md5: 8268bdcd82d8f9abcb7f0fd6a9568ba4 + size: 113684 + timestamp: 1777360595361 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2026.2-hfeb5c2c_0.conda + sha256: 487c021f4f10ae963e9192c9bbc0d3bba8f11cb3a2bb91fd351e4ea3e1ebc109 + md5: 9a389f225e6d2a8cc1e425c128caffe8 depends: - glslang >=16,<17.0a0 - libgcc >=14 @@ -13547,11 +11727,11 @@ packages: - spirv-tools >=2026,<2027.0a0 license: Apache-2.0 license_family: Apache - size: 115498 - timestamp: 1770208786806 -- conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-h8fa7867_1.conda - sha256: b2f6e199df47ca314294ad393818d6b499fd544703abcede0f19007b8f8f10e4 - md5: 04d62bc008ee442843e2f24f603ea1a6 + size: 115991 + timestamp: 1777360628740 +- conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda + sha256: 3a4edc274c947d34258af01886d9ca301098fe037dacd91ccd5f5291dda5ca0b + md5: dd6d0d119b1ca747af3ba964eaa3c565 depends: - glslang >=16,<17.0a0 - spirv-tools >=2026,<2027.0a0 @@ -13560,21 +11740,8 @@ packages: - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: Apache - size: 1558909 - timestamp: 1770208850155 -- conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2025.5-haa9a63f_0.conda - sha256: ed369ab2775ed7ff0476cedf8926a326d8d93068ee9c3e5f0e8836393390d5b0 - md5: c7159a672b77c38a0e8f88491ca9e9b2 - depends: - - glslang >=16,<17.0a0 - - spirv-tools >=2025,<2026.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache - size: 1516952 - timestamp: 1764288127996 + size: 1559352 + timestamp: 1777360694042 - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d md5: 3339e3b65d58accf4ca4fb8748ab16b3 @@ -13610,28 +11777,28 @@ packages: license_family: BSD size: 47096 timestamp: 1762948094646 -- conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.0.1-pyhd8ed1ab_0.conda - sha256: 17007a4cfbc564dc3e7310dcbe4932c6ecb21593d4fec3c68610720f19e73fb2 - md5: 755cf22df8693aa0d1aec1c123fa5863 +- conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-3.1.1-pyhd8ed1ab_0.conda + sha256: ad89284ea94821c20ff87e64b948e4afc690cf5202d14c009355b0594cf23aea + md5: 46b6abe31482f6bca064b965696ae807 depends: - - python >=3.9 + - python >=3.10 license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/snowballstemmer?source=hash-mapping - size: 73009 - timestamp: 1747749529809 -- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.3-pyhd8ed1ab_0.conda - sha256: 23b71ecf089967d2900126920e7f9ff18cdcef82dbff3e2f54ffa360243a17ac - md5: 18de09b20462742fe093ba39185d9bac + size: 74456 + timestamp: 1780468201547 +- conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.8.4-pyhd8ed1ab_0.conda + sha256: 2afa5fe9331c09b4c4689ddf6ace8fc16c837eae547c57dab325b844072fdd77 + md5: 9e21f087f087f805debe877d88e00a14 depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/soupsieve?source=hash-mapping - size: 38187 - timestamp: 1769034509657 + - pkg:pypi/soupsieve?source=compressed-mapping + size: 38802 + timestamp: 1779635534390 - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-8.1.3-pyhd8ed1ab_1.conda sha256: 3228eb332ce159f031d4b7d2e08117df973b0ba3ddcb8f5dbb7f429f71d27ea1 md5: 1a3281a0dc355c02b5506d87db2d78ac @@ -13812,97 +11979,59 @@ packages: - pkg:pypi/sphinxcontrib-qthelp?source=hash-mapping size: 26959 timestamp: 1733753505008 -- conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_1.conda - sha256: 64d89ecc0264347486971a94487cb8d7c65bfc0176750cf7502b8a272f4ab557 - md5: 3bc61f7161d28137797e038263c04c54 +- conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-2.0.0-pyhd8ed1ab_0.conda + sha256: 20b49741065fd7d3fabf98caf6d19b6436badb06b6d41f66b58f1fc2b52f37a1 + md5: f77df1fcf9af03b7287342638befca77 depends: - - python >=3.9 + - python >=3.10 - sphinx >=5 license: BSD-2-Clause license_family: BSD purls: - - pkg:pypi/sphinxcontrib-serializinghtml?source=hash-mapping - size: 28669 - timestamp: 1733750596111 -- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2025.4-hb700be7_0.conda - sha256: aa0f0fc41646ef5a825d5725a2d06659df1c1084f15155936319e1909ac9cd16 - md5: aace50912e0f7361d0d223e7f7cfa6e5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - constrains: - - spirv-headers >=1.4.328.0,<1.4.328.1.0a0 - license: Apache-2.0 - license_family: APACHE - size: 2248062 - timestamp: 1759805790709 -- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.1-hb700be7_0.conda - sha256: 003180b3a2e0c6490b1f3461cf9e0ed740b1bbf88ee4b73ee177b94bea0dc95d - md5: 8809e0bd5ec279bfe4bb6651c3ed2730 + - pkg:pypi/sphinxcontrib-serializinghtml?source=compressed-mapping + size: 30640 + timestamp: 1781260357443 +- conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda + sha256: 309d1a3317e91a03611bc960fc807cf2c0c5baacbfddea0f5636438a76c52256 + md5: 0c2b1d811632f1f4aa923450a002ff4f depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 constrains: - - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 - license: Apache-2.0 - license_family: APACHE - size: 2296977 - timestamp: 1770089626195 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2025.4-hfefdfc9_0.conda - sha256: 8132f3e06572896a4d9f672c5cb989c08bda2855e45eac95eed7012cfc5e5428 - md5: 6cbec31663722c23b6b4b217f6846e3c - depends: - - libgcc >=14 - - libstdcxx >=14 - constrains: - - spirv-headers >=1.4.328.0,<1.4.328.1.0a0 + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 license: Apache-2.0 license_family: APACHE - size: 2511309 - timestamp: 1759805874123 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.1-hfefdfc9_0.conda - sha256: 841a7df4b73a13a148410e677b1bf07ed81bd181cc686278d64d65e033f4a06a - md5: ad8208c6618a543687d754dc57876091 + size: 2392190 + timestamp: 1780139567779 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda + sha256: fcd1bb3c246ffc0beee0c66d1f240610288c81286041190b42402435408b5cc5 + md5: c82bb7d70fffe04afe74d55542af1d41 depends: - libgcc >=14 - libstdcxx >=14 constrains: - - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 - license: Apache-2.0 - license_family: APACHE - size: 2255599 - timestamp: 1770089690097 -- conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2025.4-h49e36cd_0.conda - sha256: 952a88cb050d8b21c020c03181af4ae8d89dd586631438cefbe66be6c15d6b92 - md5: 6e7df59eec517187e48699b298e750a2 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - constrains: - - spirv-headers >=1.4.328.0,<1.4.328.1.0a0 + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 license: Apache-2.0 license_family: APACHE - size: 14158518 - timestamp: 1759806206089 -- conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.1-h49e36cd_0.conda - sha256: 9976eeaf650d43833c110447ba264a72f470928d8a8fa5d1cfbadcd2a276184c - md5: bf5a4eb05c8b38dbc4e32ce17ab36389 + size: 2290233 + timestamp: 1780139661664 +- conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda + sha256: 256818df74531014639af4cd0791a2a2d238bef74b593db92baeb3c881d89ef2 + md5: 64190192873306d90833d53a820311b8 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 constrains: - - spirv-headers >=1.4.341.0,<1.4.341.1.0a0 + - spirv-headers >=1.4.350.0,<1.4.350.1.0a0 license: Apache-2.0 license_family: APACHE - size: 13881533 - timestamp: 1770089875437 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.49-py312h5253ce2_0.conda - sha256: ab3445a03e1fe99093cac00a4f923c25e1f438cc7f7b64d254b7e4f06e52693e - md5: 0662f9f9ffb7ae91f2c095c77f18b9a5 + size: 14305012 + timestamp: 1780140089597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py312h5253ce2_0.conda + sha256: f0ef18298e6fc437006ffb607dbbefa313091576b6e86bdcfdc4f54128249116 + md5: 80530f530854c51df16c11ad2b0cb517 depends: - python - greenlet !=0.4.17 @@ -13913,12 +12042,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/sqlalchemy?source=compressed-mapping - size: 3707065 - timestamp: 1775241332871 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.49-py312h2fc9c67_0.conda - sha256: ded6744a827bef2644547ebb30453dfb367e76b9b38d70be5934cee586aad5a0 - md5: a4bfb5442cfc73af95ff3b61ee5a880d + - pkg:pypi/sqlalchemy?source=hash-mapping + size: 3709760 + timestamp: 1781547880247 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sqlalchemy-2.0.51-py312h2fc9c67_0.conda + sha256: 8f68decf4ef77055a92f04ab2a18fd6322ac8cd5e0e6827f9415a296474dc17a + md5: 1e90e5b2a0242fbd388bddd1d25b793e depends: - python - greenlet !=0.4.17 @@ -13928,12 +12057,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/sqlalchemy?source=compressed-mapping - size: 3711633 - timestamp: 1775241583240 -- conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.49-py312he5662c2_0.conda - sha256: ee7289c97b4892fac2752d71fc773603210bf3b671c886499c7dbacad9b4c08a - md5: d42e4d5316b68fc70bdf09e5fccf3eb0 + - pkg:pypi/sqlalchemy?source=hash-mapping + size: 3717722 + timestamp: 1781548189281 +- conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py312he5662c2_0.conda + sha256: 04591df0e1ff82662f65d5cfb2d643063d1c90f5c962792ccc00db4ca3f22d22 + md5: e1c72593933d9d16f603f67cc1cadf29 depends: - python - greenlet !=0.4.17 @@ -13945,9 +12074,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/sqlalchemy?source=compressed-mapping - size: 3665426 - timestamp: 1775241406935 + - pkg:pypi/sqlalchemy?source=hash-mapping + size: 3668574 + timestamp: 1781547906603 - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 md5: b1b505328da7a6b246787df4b5a49fbc @@ -13962,59 +12091,27 @@ packages: - pkg:pypi/stack-data?source=hash-mapping size: 26988 timestamp: 1733569565672 -- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-3.1.2-hecca717_0.conda - sha256: 34e2e9c505cd25dba0a9311eb332381b15147cf599d972322a7c197aedfc8ce2 - md5: 9859766c658e78fec9afa4a54891d920 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: BSD-2-Clause - license_family: BSD - size: 2741200 - timestamp: 1756086702093 -- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.0.1-hecca717_0.conda - sha256: 4a1d2005153b9454fc21c9bad1b539df189905be49e851ec62a6212c2e045381 - md5: 2a2170a3e5c9a354d09e4be718c43235 +- conda: https://conda.anaconda.org/conda-forge/linux-64/svt-av1-4.2.0-hecca717_0.conda + sha256: c79f983a6bb4218bdef9064aec5821d59d744f9a98f8cf8437c7bd0351df0d95 + md5: 683f1b6d013bb1eb0d5c8025d2eb21a3 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libstdcxx >=14 license: BSD-2-Clause license_family: BSD - size: 2619743 - timestamp: 1769664536467 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-3.1.2-hfae3067_0.conda - sha256: e4b482062da7cf259f21465274a0f3613d1dbd8ea649aca6072625f5038ac40d - md5: 7602d3004ed53b3f8e5e0e04e5de4de7 + size: 2666786 + timestamp: 1784069888521 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.2.0-hfae3067_0.conda + sha256: 5f4c820fbf924145755c394df3d6ab98c96d6f5630ba486ce6f568de25d5845d + md5: 54ccc3ac256db941ff50f0fada595fa0 depends: - libgcc >=14 - libstdcxx >=14 license: BSD-2-Clause license_family: BSD - size: 2106252 - timestamp: 1756090698097 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/svt-av1-4.0.1-hfae3067_0.conda - sha256: 6518e4575e83e38b07460f504b6467124f9a16e4d368af42ca54a69603002078 - md5: 943fcd76194904358b2587d627ee6388 - depends: - - libgcc >=14 - - libstdcxx >=14 - license: BSD-2-Clause - license_family: BSD - size: 2042800 - timestamp: 1769668627820 -- conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-3.1.2-hac47afa_0.conda - sha256: 444c94a9c1fcb2cdf78b260472451990257733bcf89ed80c73db36b5047d3134 - md5: 91866412570c922f55178855deb0f952 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-2-Clause - license_family: BSD - size: 1862756 - timestamp: 1756086862067 + size: 2083840 + timestamp: 1784069822348 - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda sha256: 4d77eec06ee4c5de38d330fb7dfd6dac2f867ec007123acb901be9942e12c08a md5: d9714a97bc69f98fd5032f675ae1b0b5 @@ -14057,175 +12154,96 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/tabulate?source=compressed-mapping + - pkg:pypi/tabulate?source=hash-mapping size: 43964 timestamp: 1772732795746 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-h8d10470_1.conda - sha256: 2e3238234ae094d5a5f7c559410ea8875351b6bac0d9d0e576bf64b732b8029e - md5: e3259be3341da4bc06c5b7a78c8bf1bd - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libhwloc >=2.12.1,<2.12.2.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - size: 181262 - timestamp: 1762509955687 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2022.3.0-hb700be7_2.conda - sha256: 975710e4b7f1b13c3c30b7fbf21e22f50abe0463b6b47a231582fdedcc45c961 - md5: 8f7278ca5f7456a974992a8b34284737 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda + sha256: 30cb9355c2fefc20ff1a3d6566b9714d5614086a2524c07721fc344eb20515ae + md5: 7073b15f9364ebc118998601ac6ca6a6 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libhwloc >=2.12.2,<2.12.3.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - size: 181329 - timestamp: 1767886632911 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-h0eac15c_1.conda - sha256: 3fd3d1ba6b81c5edee8d8fa0d2757f7ba3bf4d4a8ecc68f515c90e737eaa02e4 - md5: eda1e9439d903e3fdd7ff9e086da2018 - depends: - - libgcc >=14 - - libhwloc >=2.12.1,<2.12.2.0a0 + - libhwloc >=2.13.0,<2.13.1.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 144223 - timestamp: 1762511489745 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2022.3.0-hfefdfc9_2.conda - sha256: 2e875ba342c2cde6301b088cd6471f67e44d961bd292abcdfa6ba3fc32506935 - md5: 4d424acd246a5ba42512c097139ed0a0 + size: 182331 + timestamp: 1778673758649 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda + sha256: 7ed4e93fad3707aa1686c5be286604c63aad33c9765a0d53fab7adbd179510b3 + md5: 0bc302bd45e5f744a672eb4f4a930398 depends: - libgcc >=14 - - libhwloc >=2.12.2,<2.12.3.0a0 + - libhwloc >=2.13.0,<2.13.1.0a0 - libstdcxx >=14 license: Apache-2.0 license_family: APACHE - size: 144746 - timestamp: 1767888618836 -- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-h3155e25_2.conda - sha256: abd9a489f059fba85c8ffa1abdaa4d515d6de6a3325238b8e81203b913cf65a9 - md5: 0f9817ffbe25f9e69ceba5ea70c52606 + size: 145425 + timestamp: 1778675412470 +- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda + sha256: 8a4053839b8e997a5965e2dff7d6cf3c77be62d82c0e48c8a04a5ed2d2e73035 + md5: 8ee01a693aecff5432069eaaf1183c45 depends: - - libhwloc >=2.12.2,<2.12.3.0a0 + - libhwloc >=2.13.0,<2.13.1.0a0 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 license: Apache-2.0 license_family: APACHE purls: [] - size: 155869 - timestamp: 1767886839029 -- conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2022.3.0-hd094cb3_1.conda - sha256: c31cac57913a699745d124cdc016a63e31c5749f16f60b3202414d071fc50573 - md5: 17c38aaf14c640b85c4617ccb59c1146 + size: 156515 + timestamp: 1778673901757 +- conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.5.1-pyhcf101f3_0.conda + sha256: 7c803480dbfb8b536b9bf6287fa2aa0a4f970f8c09075694174eb4550a4524cd + md5: c0d0b883e97906f7524e2aac94be0e0d depends: - - libhwloc >=2.12.1,<2.12.2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: APACHE - size: 155714 - timestamp: 1762510341121 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac - md5: cffd3bdd58090148f4cfcd831f4b26ab + - python >=3.10 + - webencodings >=0.4 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/tinycss2?source=hash-mapping + size: 30571 + timestamp: 1764621508086 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_hd70dff1_3.conda + build_number: 103 + sha256: 43624eab22f5f29df7d6ffe914cf442f28fd559b55b290906255492826e636e8 + md5: 48a1049e710857572fc2a832aa394d9f depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 license: TCL - license_family: BSD purls: [] - size: 3301196 - timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_ha0e22de_103.conda - sha256: 1544760538a40bcd8ace2b1d8ebe3eb5807ac268641f8acdc18c69c5ebfeaf64 - md5: 86bc20552bf46075e3d92b67f089172d - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - size: 3284905 - timestamp: 1763054914403 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 - md5: 7fc6affb9b01e567d2ef1d05b84aa6ed + size: 3550916 + timestamp: 1784229071544 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5cf4473_3.conda + build_number: 103 + sha256: cd51fbda051a9f3679d10ef4a94cd1ff38c10533b82845dadce8ba87245ba4ce + md5: 89e78452e06563964e419059ee45584a depends: - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 constrains: - - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libx11 >=1.8.13,<2.0a0 license: TCL - license_family: BSD purls: [] - size: 3368666 - timestamp: 1769464148928 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h561c983_103.conda - sha256: 154e73f6269f92ad5257aa2039278b083998fd19d371e150f307483fb93c07ae - md5: 631db4799bc2bfe4daccf80bb3cbc433 - depends: - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - size: 3333495 - timestamp: 1763059192223 -- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h2c6b04d_3.conda - sha256: 4581f4ffb432fefa1ac4f85c5682cc27014bcd66e7beaa0ee330e927a7858790 - md5: 7cb36e506a7dba4817970f8adb6396f9 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: TCL - license_family: BSD - size: 3472313 - timestamp: 1763055164278 -- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - sha256: 0e79810fae28f3b69fe7391b0d43f5474d6bd91d451d5f2bde02f55ae481d5e3 - md5: 0481bfd9814bf525bd4b3ee4b51494c4 + size: 3683040 + timestamp: 1784229053797 +- conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h967ab96_3.conda + sha256: 13fa29257d43f8e630a1e591ed77fae9bbbb236b011432f01e2034cf36e6bf03 + md5: aaf79e2af50a151fb5b5a3e3f38b7a69 depends: - - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 license: TCL - license_family: BSD purls: [] - size: 3526350 - timestamp: 1769460339384 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.3.0-pyhcf101f3_0.conda - sha256: cb77c660b646c00a48ef942a9e1721ee46e90230c7c570cdeb5a893b5cce9bff - md5: d2732eb636c264dc9aa4cbee404b1a53 - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - size: 20973 - timestamp: 1760014679845 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8 - md5: 72e780e9aa2d0a3295f59b1874e3768b - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - size: 21453 - timestamp: 1768146676791 + size: 3782314 + timestamp: 1784229072899 - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd md5: b5325cf06a000c5b14970462ff5e4d58 @@ -14235,39 +12253,62 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/tomli?source=compressed-mapping + - pkg:pypi/tomli?source=hash-mapping size: 21561 timestamp: 1774492402955 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py312h4c3975b_0.conda - sha256: 4629b1c9139858fb08bb357df917ffc12e4d284c57ff389806bb3ae476ef4e0a - md5: 2b37798adbc54fd9e591d24679d2133a +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py312h4c3975b_0.conda + sha256: f54504d6eeef133ddc2b964b6a021f3faf085bb08bd70debc07f56d6b9b726f1 + md5: 55f526c3fb5302a1ce922612348442e1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.12,<3.13.0a0 + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=compressed-mapping + size: 864705 + timestamp: 1781006801632 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda + sha256: bbb7056f7c5fd606df16ed73ee68687050de2c02fd69a3f69a1cb533a7ed2ae8 + md5: 4a8e5889712641aabdf6695e292857fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + size: 918368 + timestamp: 1781006801436 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py312hefbd42c_0.conda + sha256: a5abbe4712c2afa68e63e19ebe7bbb425baa4db6240bfa3c8276b4ac917138ca + md5: 5d9619b1f48fbccf87010ea5b340b2d1 depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/tornado?source=compressed-mapping - size: 859665 - timestamp: 1774358032165 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py312hefbd42c_0.conda - sha256: 36c363ba31390875a7b024899077268b7fd55fe35e8f9190b5154c4f5032a99b - md5: 9bd0a2e992f86149013b0a5c50a912c9 + - pkg:pypi/tornado?source=hash-mapping + size: 863626 + timestamp: 1781007844330 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda + sha256: 7a5157dabdc88f2e16a45f8e342657ceb0d4515b8640c8a4f1c3b3de88dcc92e + md5: 82b0cb99192ae48eca75f25102fd5ce0 depends: - libgcc >=14 - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 license: Apache-2.0 license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 859168 - timestamp: 1774359394755 -- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py312he06e257_0.conda - sha256: 1220c986664e9e8662e660dc64dd97ed823926b1ba05175771408cf1d6a46dd2 - md5: c6c66a64da3d2953c83ed2789a7f4bdb + size: 916897 + timestamp: 1781007943867 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py312he06e257_0.conda + sha256: 110cf0c741e181ed929a2acdb488f2095badad973c50dd696af36c4162e063cf + md5: 1045d29f787812d3fac1fd80a1339710 depends: - python >=3.12,<3.13.0a0 - python_abi 3.12.* *_cp312 @@ -14278,41 +12319,55 @@ packages: license_family: Apache purls: - pkg:pypi/tornado?source=compressed-mapping - size: 859726 - timestamp: 1774358173994 -- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 - md5: 019a7385be9af33791c989871317e1ed + size: 865801 + timestamp: 1781006895319 +- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda + sha256: 6b9f5a195ca148f7c6b9a4a0a026631979b3112c43cd7c1064085ff833dfa4f0 + md5: b1b9bf11a82e608c5649d7462de94c5f depends: - - python >=3.9 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + size: 919275 + timestamp: 1781006902968 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.15.1-pyhcf101f3_0.conda + sha256: b89a823edf524956b94a2a4db974866e4501f05c68976eff458c5dcf07f88431 + md5: 37e3be7b6e2977d37b8fa5da229f5dc0 + depends: + - python >=3.10 + - python license: BSD-3-Clause license_family: BSD purls: - pkg:pypi/traitlets?source=hash-mapping - size: 110051 - timestamp: 1733367480074 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c - md5: edd329d7d3a4ab45dcf905899a7a6115 + size: 115158 + timestamp: 1780507822178 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.16.0-h69aa097_0.conda + sha256: b141933ece3518f6d7b75dfb59451e2f26b405a44c18e2518a83e9a02e09315c + md5: c680b5747e8c4c8f23dca0bb7042a8fc depends: - - typing_extensions ==4.15.0 pyhcf101f3_0 + - typing_extensions ==4.16.0 pyhcf101f3_0 license: PSF-2.0 license_family: PSF purls: [] - size: 91383 - timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 - md5: 0caa1af407ecff61170c9437a808404d + size: 94080 + timestamp: 1783002732887 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.16.0-pyhcf101f3_0.conda + sha256: 2d888f90af0686044882c74193ec80a90ec1943145d94a7b1b048958acda1848 + md5: c70ad746c22219b9700931707482992c depends: - python >=3.10 - python license: PSF-2.0 license_family: PSF purls: - - pkg:pypi/typing-extensions?source=hash-mapping - size: 51692 - timestamp: 1756220668932 + - pkg:pypi/typing-extensions?source=compressed-mapping + size: 52631 + timestamp: 1783002732887 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_inspect-0.9.0-pyhd8ed1ab_1.conda sha256: a3fbdd31b509ff16c7314e8d01c41d9146504df632a360ab30dbc1d3ca79b7c0 md5: fa31df4d4193aabccaf09ce78a187faf @@ -14326,19 +12381,13 @@ packages: - pkg:pypi/typing-inspect?source=hash-mapping size: 14919 timestamp: 1733845966415 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 - md5: 4222072737ccff51314b5ece9c7d6f5a - license: LicenseRef-Public-Domain - size: 122968 - timestamp: 1742727099393 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c - md5: ad659d0a2b3e47e38d829aa8cad2d610 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + sha256: b928c30ddcb0e3f544c6eade8352737e6e610e263276b90232db6a578ef899d8 + md5: fcb489df604d100968b737f2cb6076c6 license: LicenseRef-Public-Domain purls: [] - size: 119135 - timestamp: 1767016325805 + size: 118849 + timestamp: 1784250406640 - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda sha256: 3005729dce6f3d3f5ec91dfc49fc75a0095f9cd23bab49efb899657297ac91a5 md5: 71b24316859acd00bdb8b38f5e2ce328 @@ -14349,9 +12398,46 @@ packages: purls: [] size: 694692 timestamp: 1756385147981 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a - md5: 9272daa869e03efe68833e3dc7a02130 +- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda + sha256: ff1c1d7c23b91c9b0eb93a3e1380f4e2ac6c37ea2bba4f932a5484e9a55bba30 + md5: 494fdf358c152f9fdd0673c128c2f3dd + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + size: 409562 + timestamp: 1770909102180 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda + sha256: fcc5e4515df19c3c781d3d70f69837c03d1f725d4e166cb3006cf656243f58bf + md5: 9479a1d1b844dfeefd287a16515811a0 + depends: + - libgcc >=14 + - python >=3.14,<3.15.0a0 + - python >=3.14,<3.15.0a0 *_cp314 + - python_abi 3.14.* *_cp314 + license: Apache-2.0 + license_family: Apache + size: 410032 + timestamp: 1770909146009 +- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda + sha256: 9041e463044944460f73f9528f2ec491180f0ffe857e3555aa8160b81050b8d9 + md5: d6b580a13384df5155c6ca19ee66854e + depends: + - python >=3.14,<3.15.0a0 + - python_abi 3.14.* *_cp314 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Apache-2.0 + license_family: Apache + size: 406126 + timestamp: 1770909191618 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.7.0-pyhd8ed1ab_0.conda + sha256: feff959a816f7988a0893201aa9727bbb7ee1e9cec2c4f0428269b489eb93fb4 + md5: cbb88288f74dbe6ada1c6c7d0a97223e depends: - backports.zstd >=1.0.0 - brotli-python >=1.2.0 @@ -14362,140 +12448,95 @@ packages: license_family: MIT purls: - pkg:pypi/urllib3?source=hash-mapping - size: 103172 - timestamp: 1767817860341 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h2b53caa_32.conda - sha256: 82250af59af9ff3c6a635dd4c4764c631d854feb334d6747d356d949af44d7cf - md5: ef02bbe151253a72b8eda264a935db66 - depends: - - vc14_runtime >=14.42.34433 - track_features: - - vc14 - license: BSD-3-Clause - license_family: BSD - size: 18861 - timestamp: 1760418772353 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h41ae7f8_34.conda - sha256: 9dc40c2610a6e6727d635c62cced5ef30b7b30123f5ef67d6139e23d21744b3a - md5: 1e610f2416b6acdd231c5f573d754a0f + size: 103560 + timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda + sha256: 17693b60cb54f80c60275f003f3bfc1b128af56dbfd65c4fae37c64eeb755ce1 + md5: 2eacea63f545b97342da520df6854276 depends: - - vc14_runtime >=14.44.35208 + - vc14_runtime >=14.51.36231 track_features: - vc14 license: BSD-3-Clause license_family: BSD purls: [] - size: 19356 - timestamp: 1767320221521 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda - sha256: e3a3656b70d1202e0d042811ceb743bd0d9f7e00e2acdf824d231b044ef6c0fd - md5: 378d5dcec45eaea8d303da6f00447ac0 - depends: - - ucrt >=10.0.20348.0 - - vcomp14 14.44.35208 h818238b_32 - constrains: - - vs2015_runtime 14.44.35208.* *_32 - license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime - license_family: Proprietary - size: 682706 - timestamp: 1760418629729 -- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_34.conda - sha256: 02732f953292cce179de9b633e74928037fa3741eb5ef91c3f8bae4f761d32a5 - md5: 37eb311485d2d8b2c419449582046a42 + size: 20362 + timestamp: 1781320968457 +- conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda + sha256: 8153ed849c92e891eacac0f2f8d7ecb79f9b5fd7f7917fbb896f252a60a40390 + md5: 06a5bf5a1ca16cce0df6eaa91fc42bc2 depends: - ucrt >=10.0.20348.0 - - vcomp14 14.44.35208 h818238b_34 + - vcomp14 14.51.36231 h1b9f54f_39 constrains: - - vs2015_runtime 14.44.35208.* *_34 + - vs2015_runtime 14.51.36231.* *_39 license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] - size: 683233 - timestamp: 1767320219644 -- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - sha256: f3790c88fbbdc55874f41de81a4237b1b91eab75e05d0e58661518ff04d2a8a1 - md5: 58f67b437acbf2764317ba273d731f1d + size: 737434 + timestamp: 1781320964561 +- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda + sha256: 07fb14713c4bc62e2533a2e23a363abfb0e65650681fba0ae4c840e2219350f3 + md5: 8b53a83fda40ec679e4d63fa32fae989 depends: - ucrt >=10.0.20348.0 constrains: - - vs2015_runtime 14.44.35208.* *_32 - license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime - license_family: Proprietary - size: 114846 - timestamp: 1760418593847 -- conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_34.conda - sha256: 878d5d10318b119bd98ed3ed874bd467acbe21996e1d81597a1dbf8030ea0ce6 - md5: 242d9f25d2ae60c76b38a5e42858e51d - depends: - - ucrt >=10.0.20348.0 - constrains: - - vs2015_runtime 14.44.35208.* *_34 + - vs2015_runtime 14.51.36231.* *_39 license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] - size: 115235 - timestamp: 1767320173250 -- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_32.conda - sha256: 65cea43f4de99bc81d589e746c538908b2e95aead9042fecfbc56a4d14684a87 - md5: dfc1e5bbf1ecb0024a78e4e8bd45239d - depends: - - vc14_runtime >=14.44.35208 - license: BSD-3-Clause - license_family: BSD - size: 18919 - timestamp: 1760418632059 -- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_34.conda - sha256: 63ff4ec6e5833f768d402f5e95e03497ce211ded5b6f492e660e2bfc726ad24d - md5: f276d1de4553e8fca1dfb6988551ebb4 + size: 120684 + timestamp: 1781320948530 +- conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda + sha256: 6de6c2cf008fc2dce61060b583f2d8494c83883106952b201381b6b0505f03d7 + md5: 2ccc63d7b7d066a814ed9f99072832d7 depends: - - vc14_runtime >=14.44.35208 + - vc14_runtime >=14.51.36231 license: BSD-3-Clause license_family: BSD - size: 19347 - timestamp: 1767320221943 -- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-hd6090a7_1.conda - sha256: 3aa04ae8e9521d9b56b562376d944c3e52b69f9d2a0667f77b8953464822e125 - md5: 035da2e4f5770f036ff704fa17aace24 + size: 20355 + timestamp: 1781320968804 +- conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.26.0-hd6090a7_0.conda + sha256: 6b9e182021ef3a64ab3bf788ebdab6de6775035612237c639ccafc941639eb13 + md5: b34c5559f45d8996e3bc0b6250a6cc84 depends: - __glibc >=2.17,<3.0.a0 - - libexpat >=2.7.1,<3.0a0 + - libexpat >=2.8.1,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - libstdcxx >=14 license: MIT - license_family: MIT - size: 329779 - timestamp: 1761174273487 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h4f8a99f_1.conda - sha256: d94af8f287db764327ac7b48f6c0cd5c40da6ea2606afd34ac30671b7c85d8ee - md5: f6966cb1f000c230359ae98c29e37d87 + size: 340543 + timestamp: 1784249169392 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.26.0-h4f8a99f_0.conda + sha256: 27d8782a2f6cd193f2f446de829f7a92f3b34cc885e2d59d4b8326934023d8fd + md5: 8da6920e59279dedb8c737cff347cfee depends: - - libexpat >=2.7.1,<3.0a0 + - libexpat >=2.8.1,<3.0a0 - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 - libstdcxx >=14 license: MIT - license_family: MIT - size: 331480 - timestamp: 1761174368396 -- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.47-hd8ed1ab_0.conda - sha256: 9ab2c12053ea8984228dd573114ffc6d63df42c501d59fda3bf3aeb1eaa1d23e - md5: 7da1571f560d4ba3343f7f4c48a79c76 + size: 341752 + timestamp: 1784249192116 +- conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda + sha256: 04ce686cd187d379344f9b2be7b4da5f431b265dc0944a6b764fab9da9171948 + md5: 0839a3421140d4a9ba93fb988698fc00 license: MIT license_family: MIT - size: 140476 - timestamp: 1765821981856 -- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.6.0-pyhd8ed1ab_0.conda - sha256: e298b508b2473c4227206800dfb14c39e4b14fd79d4636132e9e1e4244cdf4aa - md5: c3197f8c0d5b955c904616b716aca093 + size: 147954 + timestamp: 1780946721169 +- conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.8.2-pyhd8ed1ab_0.conda + sha256: 4acf845da404e84cef1acccc66cc0156af1b83a5b5d7077b2ca19b705c561e57 + md5: 99f7755ec8648a042b0dbe906234f888 depends: - python >=3.10 license: MIT license_family: MIT purls: - pkg:pypi/wcwidth?source=compressed-mapping - size: 71550 - timestamp: 1770634638503 + size: 132415 + timestamp: 1782771807703 - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_3.conda sha256: 19ff205e138bb056a46f9e3839935a2e60bd1cf01c8241a5e172a422fed4f9c6 md5: 2841eb5bfc75ce15e9a0054b98dcd64d @@ -14507,9 +12548,9 @@ packages: - pkg:pypi/webencodings?source=hash-mapping size: 15496 timestamp: 1733236131358 -- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae - md5: bdbd7385b4a67025ac2dba4ef8cb6a8f +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda + sha256: 9e156ffaefb8463437144326ada4b85d1de17961b9997ac5f1cbbaf747bd8bed + md5: d0e3b2f0030cf4fca58bde71d246e94c depends: - packaging >=24.0 - python >=3.10 @@ -14517,8 +12558,8 @@ packages: license_family: MIT purls: - pkg:pypi/wheel?source=hash-mapping - size: 31858 - timestamp: 1769139207397 + size: 33491 + timestamp: 1776878563806 - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda sha256: 93807369ab91f230cf9e6e2a237eaa812492fe00face5b38068735858fba954f md5: 46e441ba871f524e2b067929da3051c2 @@ -14588,48 +12629,157 @@ packages: license_family: GPL size: 5517425 timestamp: 1646611941216 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda - sha256: aa03b49f402959751ccc6e21932d69db96a65a67343765672f7862332aa32834 - md5: 71ae752a748962161b4740eaff510258 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda + sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d + md5: fdc27cb255a7a2cc73b7919a968b48f0 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 license: MIT license_family: MIT - size: 396975 - timestamp: 1759543819846 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda - sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 - md5: b56e0c8432b56decafae7e78c5f29ba5 + size: 20772 + timestamp: 1750436796633 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda + sha256: d874906e236a5edc9309d479599bf2de4d8adca0f23c355b76759d5fb3c4bef8 + md5: 159ffec8f7fab775669a538f0b29373a + depends: + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + license: MIT + license_family: MIT + size: 21517 + timestamp: 1750437961489 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda + sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 + md5: 4d1fc190b99912ed557a8236e958c559 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - - xorg-libx11 >=1.8.13,<2.0a0 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 license: MIT license_family: MIT - size: 399291 - timestamp: 1772021302485 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.46-he30d5cf_0.conda - sha256: c440a757d210e84c7f315ac3b034266980a8b4c986600649d296b9198b5b4f5e - md5: 9524f30d9dea7dd5d6ead43a8823b6c2 + size: 20829 + timestamp: 1763366954390 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda + sha256: 2e31eeeac0ad76229a565f1df3a8fb4ea54852a68404a99558adab9c92c0ac4d + md5: 8b70063c86f7f9a0b045e78d2d9971f7 depends: - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 + - libxcb >=1.13 + - libxcb >=1.17.0,<2.0a0 + - xcb-util-image >=0.4.0,<0.5.0a0 + - xcb-util-renderutil >=0.3.10,<0.4.0a0 + license: MIT + license_family: MIT + size: 21639 + timestamp: 1763367131001 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda + sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 + md5: a0901183f08b6c7107aab109733a3c91 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + size: 24551 + timestamp: 1718880534789 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda + sha256: a43058edc001e8fb97f9b291028a6ca16a8969d9b56a998c7aecea083323ac97 + md5: b82e5c78dbbfa931980e8bfe83bce913 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - xcb-util >=0.4.1,<0.5.0a0 + license: MIT + license_family: MIT + size: 24910 + timestamp: 1718880504308 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda + sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 + md5: ad748ccca349aec3e91743e08b5e2b50 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 14314 + timestamp: 1718846569232 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda + sha256: 9d92daa7feb0e14f81bf0d4b3f0b6ff1e8cec3ff514df8a0c06c4d49b518c315 + md5: 57ca8564599ddf8b633c4ea6afee6f3a + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 14343 + timestamp: 1718846624153 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda + sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df + md5: 0e0cbe0564d03a99afd5fd7b362feecd + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 16978 + timestamp: 1718848865819 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda + sha256: 5827f5617c9741599f72bb7f090726f89c6ef91e4bada621895fdc2bbadfb0f1 + md5: 7beeda4223c5484ef72d89fb66b7e8c1 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 18139 + timestamp: 1718849914457 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda + sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a + md5: 608e0ef8256b81d04456e8d211eee3e8 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 51689 + timestamp: 1718844051451 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda + sha256: 3f52cd8783e7d953c54266255fd11886c611c2620545eabc28ec8cf470ae8be7 + md5: f14dcda6894722e421da2b7dcffb0b78 + depends: + - libgcc-ng >=12 + - libxcb >=1.16,<2.0.0a0 + license: MIT + license_family: MIT + size: 50772 + timestamp: 1718845072660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda + sha256: 3b04afd5d1a65d2d27ac2d49a63b01ab8bcd875776779ec63e337370ed38afdc + md5: b233b41be0bf210989d57160ed39b394 + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - xorg-libx11 >=1.8.13,<2.0a0 license: MIT license_family: MIT - size: 396706 - timestamp: 1759543850920 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.47-he30d5cf_0.conda - sha256: ec7ff9dffbd41faa31a30fa0724699f05bca000d57c745a195ecdb56888a8605 - md5: 4ac707a4279972357712af099cd1ae50 + size: 441670 + timestamp: 1782027360439 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda + sha256: 96078068df25ddccc60958be740e6fa99efb1e0fa2dae2f84e775201bf84d70c + md5: 3dbc6d9e1f8a8768e7ef9f57585a43ca depends: - libgcc >=14 - xorg-libx11 >=1.8.13,<2.0a0 license: MIT license_family: MIT - size: 399629 - timestamp: 1772021320967 + size: 442725 + timestamp: 1782027381059 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 @@ -14672,17 +12822,6 @@ packages: license_family: MIT size: 28701 timestamp: 1741897678254 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda - sha256: 51909270b1a6c5474ed3978628b341b4d4472cd22610e5f22b506855a5e20f67 - md5: db038ce880f100acc74dba10302b5630 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libxcb >=1.17.0,<2.0a0 - license: MIT - license_family: MIT - size: 835896 - timestamp: 1741901112627 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda sha256: 516d4060139dbb4de49a4dcdc6317a9353fb39ebd47789c14e6fe52de0deee42 md5: 861fb6ccbc677bb9a9fb2468430b9c6a @@ -14694,16 +12833,6 @@ packages: license_family: MIT size: 839652 timestamp: 1770819209719 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.12-hca56bd8_0.conda - sha256: 452977d8ad96f04ec668ba74f46e70a53e00f99c0e0307956aeca75894c8131d - md5: 3df132f0048b9639bc091ef22937c111 - depends: - - libgcc >=13 - - libxcb >=1.17.0,<2.0a0 - license: MIT - license_family: MIT - size: 864850 - timestamp: 1741901264068 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda sha256: cf886160e2ff580d77f7eb8ec1a77c41c2c5b05343e329bc35f0ddf40b8d92ab md5: 22dd10425ef181e80e130db50675d615 @@ -14733,6 +12862,40 @@ packages: license_family: MIT size: 16317 timestamp: 1762977521691 +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda + sha256: 156a583fa43609507146de1c4926172286d92458c307bb90871579601f6bc568 + md5: 8436cab9a76015dfe7208d3c9f97c156 + depends: + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 + license: MIT + license_family: MIT + size: 109246 + timestamp: 1762977105140 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda + sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a + md5: f2ba4192d38b6cef2bb2c25029071d90 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + size: 14415 + timestamp: 1770044404696 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda + sha256: 554f986ffa781d3393079926931465e61291d1eb8a56a03ad4a8e54b1ae233f4 + md5: 9c639c1abdbfe6759c5beb2c1db4bc13 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 + license: MIT + license_family: MIT + size: 14915 + timestamp: 1770044415607 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a md5: 2ccd714aa2242315acaf0a67faea780b @@ -14758,6 +12921,31 @@ packages: license_family: MIT size: 34596 timestamp: 1730908388714 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda + sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 + md5: b5fcc7172d22516e1f965490e65e33a4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + size: 13217 + timestamp: 1727891438799 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda + sha256: 3afaa2f43eb4cb679fc0c3d9d7c50f0f2c80cc5d3df01d5d5fd60655d0bfa9be + md5: d5773c4e4d64428d7ddaa01f6f845dc7 + depends: + - libgcc >=13 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + size: 13794 + timestamp: 1727891406431 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 md5: 1dafce8548e38671bea82e3f5c6ce22f @@ -14777,17 +12965,17 @@ packages: license_family: MIT size: 21039 timestamp: 1762979038025 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda - sha256: da5dc921c017c05f38a38bd75245017463104457b63a1ce633ed41f214159c14 - md5: febbab7d15033c913d53c7a2c102309d +- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda + sha256: 366b8ae202c3b48958f0b8784bbfdc37243d3ee1b1cd4b8e76c10abe41fa258b + md5: a7c03e38aa9c0e84d41881b9236eacfb depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - xorg-libx11 >=1.8.10,<2.0a0 + - libgcc >=14 + - libwinpthread >=12.0.0.r4.gg4f2fc60ca + - ucrt >=10.0.20348.0 license: MIT license_family: MIT - size: 50060 - timestamp: 1727752228921 + size: 70691 + timestamp: 1762977015220 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f md5: 34e54f03dfea3e7a2dcf1453a85f1085 @@ -14799,16 +12987,6 @@ packages: license_family: MIT size: 50326 timestamp: 1769445253162 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.6-h57736b2_0.conda - sha256: 8e216b024f52e367463b4173f237af97cf7053c77d9ce3e958bc62473a053f71 - md5: bd1e86dd8aa3afd78a4bfdb4ef918165 - depends: - - libgcc >=13 - - xorg-libx11 >=1.8.9,<2.0a0 - license: MIT - license_family: MIT - size: 50746 - timestamp: 1727754268156 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda sha256: db2188bc0d844d4e9747bac7f6c1d067e390bd769c5ad897c93f1df759dc5dba md5: fb42b683034619915863d68dd9df03a3 @@ -14840,44 +13018,31 @@ packages: license_family: MIT size: 20704 timestamp: 1759284028146 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda - sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a - md5: 17dcc85db3c7886650b8908b183d6876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.3-hb03c661_0.conda + sha256: 495f99c8eacfa4ae2d8fed2a7f2105777af89acdc204df145d2bbbc380ac631b + md5: adba2e334082bb218db806d4c12277c9 depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - xorg-libx11 >=1.8.10,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxfixes >=6.0.1,<7.0a0 - license: MIT - license_family: MIT - size: 47179 - timestamp: 1727799254088 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.2-h57736b2_0.conda - sha256: 7b587407ecb9ccd2bbaf0fb94c5dbdde4d015346df063e9502dc0ce2b682fb5e - md5: eeee3bdb31c6acde2b81ad1b8c287087 - depends: - - libgcc >=13 - - xorg-libx11 >=1.8.9,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxfixes >=6.0.1,<7.0a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 license: MIT license_family: MIT - size: 48197 - timestamp: 1727801059062 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda - sha256: ac0f037e0791a620a69980914a77cb6bb40308e26db11698029d6708f5aa8e0d - md5: 2de7f99d6581a4a7adbff607b5c278ca + size: 47717 + timestamp: 1779111857071 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxi-1.8.3-he30d5cf_0.conda + sha256: 0c1c7b39763469cfe0e9c6d0f9a39415321f477710719f4c5d63c61ea270271c + md5: f8ad5777ecc217d383a722598dbeb1ac depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - xorg-libx11 >=1.8.10,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxrender >=0.9.11,<0.10.0a0 + - libgcc >=14 + - xorg-libx11 >=1.8.13,<2.0a0 + - xorg-libxext >=1.3.7,<2.0a0 + - xorg-libxfixes >=6.0.2,<7.0a0 license: MIT license_family: MIT - size: 29599 - timestamp: 1727794874300 + size: 49292 + timestamp: 1779113229775 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda sha256: 80ed047a5cb30632c3dc5804c7716131d767089f65877813d4ae855ee5c9d343 md5: e192019153591938acf7322b6459d36e @@ -14891,18 +13056,6 @@ packages: license_family: MIT size: 30456 timestamp: 1769445263457 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.4-h86ecc28_0.conda - sha256: b2588a2b101d1b0a4e852532c8b9c92c59ef584fc762dd700567bdbf8cd00650 - md5: dd3e74283a082381aa3860312e3c721e - depends: - - libgcc >=13 - - xorg-libx11 >=1.8.9,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxrender >=0.9.11,<0.10.0a0 - license: MIT - license_family: MIT - size: 30197 - timestamp: 1727794957221 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrandr-1.5.5-he30d5cf_0.conda sha256: 9f5196665a8d72f4f119c40dcc4bafeb0b540b102cc7b8b299c2abf599e7919f md5: 1f64c613f0b8d67e9fb0e165d898fb6b @@ -14984,6 +13137,48 @@ packages: license_family: MIT size: 33786 timestamp: 1727964907993 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda + sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f + md5: 665d152b9c6e78da404086088077c844 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + size: 18701 + timestamp: 1769434732453 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda + sha256: 6f6f2b32754e09c2334e067ba5d2d38715f2432cd9fb41d6f66de0591f8f4f94 + md5: b15ca02584678f38df6e114c32f93959 + depends: + - libgcc >=14 + - xorg-libx11 >=1.8.12,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + license: MIT + license_family: MIT + size: 19148 + timestamp: 1769434729220 +- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda + sha256: 7a8c64938428c2bfd016359f9cb3c44f94acc256c6167dbdade9f2a1f5ca7a36 + md5: aa8d21be4b461ce612d8f5fb791decae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + size: 570010 + timestamp: 1766154256151 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda + sha256: d8a7593362562f66bab992901df6cdc845c6004d15c1ba2d1e3e39e4e4672384 + md5: 999d230bcb0329c11d101118ace392d9 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + size: 569539 + timestamp: 1766155414260 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad md5: a77f85f77be52ff59391544bfe73390a @@ -15020,59 +13215,103 @@ packages: purls: [] size: 63944 timestamp: 1753484092156 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 - md5: 755b096086851e1193f3b10347415d7c +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h09e67af_11.conda + sha256: dc9f28dedcb5f35a127fad2d847674d2833369dd616d294e423b8997df31d8a8 + md5: 96b08867e21d4694fa5c2c226e6581b0 depends: - libgcc >=14 - __glibc >=2.17,<3.0.a0 - libstdcxx >=14 - krb5 >=1.22.2,<1.23.0a0 - - libsodium >=1.0.21,<1.0.22.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 311150 - timestamp: 1772476812121 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - sha256: 32f77d565687a8241ebfb66fe630dcb197efc84f6a8b59df8260b1191b7deb2c - md5: ac79d51c73c8fbe6ef6e9067191b7f1a + size: 311184 + timestamp: 1779123989774 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hec9560f_11.conda + sha256: 134bceda31df1ad0dbadb61dd30e7254f5eab398288fcdd8b070946130533b5a + md5: 1ae4f546793d83754d79a43a38154746 depends: - - libgcc >=14 - libstdcxx >=14 - - libsodium >=1.0.21,<1.0.22.0a0 + - libgcc >=14 - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 350773 - timestamp: 1772476818466 -- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h507cc87_10.conda - sha256: b8568dfde46edf3455458912ea6ffb760e4456db8230a0cf34ecbc557d3c275f - md5: 1ab0237036bfb14e923d6107473b0021 + size: 355573 + timestamp: 1779123980042 +- conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-h3a581c9_11.conda + sha256: c3e279cb309b153152fcdd6ee6d039ad996d563c849f06be39d85b8e3351df25 + md5: f016c0c5f9c01549b259146614786192 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libsodium >=1.0.21,<1.0.22.0a0 + - libsodium >=1.0.22,<1.0.23.0a0 - krb5 >=1.22.2,<1.23.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 265665 - timestamp: 1772476832995 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae - md5: 30cd29cb87d819caead4d55184c1d115 + size: 265717 + timestamp: 1779124031378 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda + sha256: 210bd31c22bb88f5e2a167df24c95bb5f152b2ada7502f9b8c49d1f5366db423 + md5: ba3dcdc8584155c97c648ae9c044b7a3 depends: - python >=3.10 - python license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=hash-mapping - size: 24194 - timestamp: 1764460141901 + - pkg:pypi/zipp?source=compressed-mapping + size: 24190 + timestamp: 1779159948016 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda + sha256: ef408f85f664a4b9c9dac3cb2e36154d9baa15a88984ea800e11060e0f2394a1 + md5: 5187ecf958be3c39110fe691cbd6873e + depends: + - libzlib 1.3.2 hfd05255_2 + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + size: 850351 + timestamp: 1774072891049 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda + sha256: ea4e50c465d70236408cb0bfe0115609fd14db1adcd8bd30d8918e0291f8a75f + md5: 2aadb0d17215603a82a2a6b0afd9a4cb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + size: 122618 + timestamp: 1770167931827 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda + sha256: 638a3a41a4fbfed52d3c60c8ef5a3693b3f12a5b1a3f58fa29f5698d0a0702e2 + md5: f731af71c723065d91b4c01bb822641b + depends: + - libgcc >=14 + - libstdcxx >=14 + license: Zlib + license_family: Other + size: 121046 + timestamp: 1770167944449 +- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda + sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 + md5: 46a21c0a4e65f1a135251fc7c8663f83 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.3,<15 + - vc14_runtime >=14.44.35208 + license: Zlib + license_family: Other + size: 124542 + timestamp: 1770167984883 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 @@ -15080,6 +13319,7 @@ packages: - __glibc >=2.17,<3.0.a0 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause + license_family: BSD purls: [] size: 601375 timestamp: 1764777111296 @@ -15089,6 +13329,7 @@ packages: depends: - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause + license_family: BSD purls: [] size: 614429 timestamp: 1764777145593 @@ -15101,6 +13342,7 @@ packages: - ucrt >=10.0.20348.0 - libzlib >=1.3.1,<2.0a0 license: BSD-3-Clause + license_family: BSD purls: [] size: 388453 timestamp: 1764777142545 diff --git a/cuda_bindings/pixi.toml b/cuda_bindings/pixi.toml index 7097b09a27b..64130a6dd7d 100644 --- a/cuda_bindings/pixi.toml +++ b/cuda_bindings/pixi.toml @@ -20,6 +20,9 @@ pytest-randomly = "*" pytest-repeat = "*" pyglet = ">=2.1.9" numpy = "*" +packaging = "*" +tomli = "*" +matplotlib = "*" # Keep this dependency set aligned with cuda_python/docs/environment-docs.yml. [feature.docs.dependencies] @@ -176,3 +179,14 @@ cmd = [ "norecursedirs=examples", # include cython tests (ignore by default config) ] depends-on = [{ task = "build-cython-tests" }] + +[tasks.test-samples] +cmd = [ + "pytest", + "-rxXs", + "-v", + "--confcutdir", + "$PIXI_PROJECT_ROOT/tests/example_tests", + "$PIXI_PROJECT_ROOT/tests/example_tests", +] +default-environment = "cu13" diff --git a/cuda_bindings/pyproject.toml b/cuda_bindings/pyproject.toml index 9744a0a009b..7ab808044d4 100644 --- a/cuda_bindings/pyproject.toml +++ b/cuda_bindings/pyproject.toml @@ -54,6 +54,8 @@ test = [ "pytest-repeat==0.9.4", "pytest-randomly==4.1.0", "pyglet==2.1.14", + "packaging>=24", + "tomli>=2; python_version < '3.11'", ] [project.urls] @@ -94,6 +96,8 @@ xfail_strict = true # Keep this authorship marker registry in sync across all pytest config roots. # Search for "agent_authored(model)" before editing. markers = [ + "samples: tests for cuda.bindings standalone samples", + "parallel_threads_limit: maximum threads for pytest-run-parallel", "agent_authored(model): agent-authored test not yet materially human-reviewed", "human_reviewed: agent-authored test materially reviewed or rewritten by a human", "human_authored: test authored primarily by a human", diff --git a/cuda_bindings/tests/example_tests/run_samples.py b/cuda_bindings/tests/example_tests/run_samples.py new file mode 100644 index 00000000000..67c2c1bfcf1 --- /dev/null +++ b/cuda_bindings/tests/example_tests/run_samples.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +"""cuda.bindings defaults for the shared sample runner.""" + +from __future__ import annotations + +import sys +from pathlib import Path + +REPO_ROOT = Path(__file__).resolve().parents[3] +_TEST_HELPERS_ROOT = REPO_ROOT / "cuda_python_test_helpers" +if str(_TEST_HELPERS_ROOT) not in sys.path: + sys.path.insert(0, str(_TEST_HELPERS_ROOT)) + +from cuda_python_test_helpers import sample_runner as _runner + +DEFAULT_CONFIG = Path(__file__).resolve().parent / "test_args.json" +DEFAULT_SAMPLES_DIR = REPO_ROOT / "samples" / "cuda_bindings" +SAMPLE_NAMESPACE = "cuda_bindings" + +build_run_plan = _runner.build_run_plan +collect_sample_entries = _runner.collect_sample_entries +get_gpu_count = _runner.get_gpu_count +load_config = _runner.load_config +run_sample = _runner.run_sample + + +def main(argv: list[str] | None = None) -> int: + return _runner.main( + argv, + default_samples_dir=DEFAULT_SAMPLES_DIR, + default_config=DEFAULT_CONFIG, + namespace=SAMPLE_NAMESPACE, + ) + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/cuda_bindings/tests/example_tests/test_args.json b/cuda_bindings/tests/example_tests/test_args.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/cuda_bindings/tests/example_tests/test_args.json @@ -0,0 +1 @@ +{} diff --git a/cuda_bindings/tests/example_tests/test_samples.py b/cuda_bindings/tests/example_tests/test_samples.py new file mode 100644 index 00000000000..d47b425f5f0 --- /dev/null +++ b/cuda_bindings/tests/example_tests/test_samples.py @@ -0,0 +1,54 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +"""Run the samples owned by cuda.bindings as part of its test suite.""" + +from __future__ import annotations + +import os +import sys + +import pytest +from run_samples import ( + DEFAULT_CONFIG, + DEFAULT_SAMPLES_DIR, + SAMPLE_NAMESPACE, + build_run_plan, + collect_sample_entries, + get_gpu_count, + load_config, + run_sample, +) + +_ENTRIES = collect_sample_entries(DEFAULT_SAMPLES_DIR, SAMPLE_NAMESPACE) +_SAMPLES = sorted(_ENTRIES) +_CONFIG = load_config(DEFAULT_CONFIG) +_GPU_COUNT = get_gpu_count() if _SAMPLES else 0 +_CUDA_12_PIXI_ENV = os.environ.get("PIXI_ENVIRONMENT_NAME") == "cu12" + + +@pytest.mark.parallel_threads_limit(1) +@pytest.mark.parametrize("sample_key", _SAMPLES) +@pytest.mark.samples +@pytest.mark.skipif( + _CUDA_12_PIXI_ENV, + reason="cuda.bindings samples require cuda-python 13 or newer", +) +@pytest.mark.agent_authored(model="gpt-5") +def test_sample(sample_key: str) -> None: + if _GPU_COUNT == 0: + pytest.skip("No CUDA GPU detected on the test runner") + + entry = _ENTRIES.get(sample_key) + if entry is None or not entry.is_file(): + pytest.fail(f"Sample entrypoint missing: {sample_key}") + + plan = build_run_plan(entry, _CONFIG, _GPU_COUNT, sample_key=sample_key) + result = run_sample(plan) + + if result.status == "WAIVED": + pytest.skip(result.detail or "sample waived") + if result.status == "PASS": + return + + sys.stdout.flush() + pytest.fail(f"sample {sample_key} returned status={result.status} (rc={result.return_code}): {result.detail}") diff --git a/cuda_core/AGENTS.md b/cuda_core/AGENTS.md index 83c96800e9d..fcd011ba46d 100644 --- a/cuda_core/AGENTS.md +++ b/cuda_core/AGENTS.md @@ -38,7 +38,7 @@ This file describes `cuda_core`, the high-level Pythonic CUDA subpackage in the - **Cython tests**: - build: `tests/cython/build_tests.sh` (or platform equivalent) - run: `pytest tests/cython/` -- **Examples**: validate affected examples in `examples/` when changing user +- **Samples**: validate affected samples in `../samples/cuda_core/` when changing user workflows or public APIs. ## Runtime/build environment notes @@ -54,7 +54,7 @@ This file describes `cuda_core`, the high-level Pythonic CUDA subpackage in the ## Editing guidance -- Keep user-facing behaviors coherent with docs and examples, especially around +- Keep user-facing behaviors coherent with docs and samples, especially around stream semantics, memory ownership, and compile/link flows. - Reuse existing shared utilities in `cuda/core/_utils/` before adding new helpers. diff --git a/cuda_core/DESCRIPTION.rst b/cuda_core/DESCRIPTION.rst index 148648cfef9..0d725a2520a 100644 --- a/cuda_core/DESCRIPTION.rst +++ b/cuda_core/DESCRIPTION.rst @@ -13,7 +13,7 @@ cuda-core: Pythonic access to CUDA core functionalities * `Repository `_ * `Documentation `_ -* `Examples `_ +* `Examples `_ * `Issue tracker `_ ``cuda.core`` is currently under active development. Feedback and suggestions are welcome! diff --git a/cuda_core/docs/source/10_minutes_to_cuda_core.rst b/cuda_core/docs/source/10_minutes_to_cuda_core.rst index b689163d995..33bc5214f6b 100644 --- a/cuda_core/docs/source/10_minutes_to_cuda_core.rst +++ b/cuda_core/docs/source/10_minutes_to_cuda_core.rst @@ -310,7 +310,7 @@ operations into the *builder* instead of the stream, then complete the graph. graph.launch(stream) # replay the whole graph in one shot stream.sync() -See :cuda-core-example:`cuda_graphs.py ` +See :sample-file:`cudaGraphs.py ` for a complete capture-and-replay example with a measured speedup. Beyond the stream capture shown here, ``cuda.core`` also provides an explicit diff --git a/cuda_core/docs/source/conf.py b/cuda_core/docs/source/conf.py index 598981bdb17..4930fecc7e4 100644 --- a/cuda_core/docs/source/conf.py +++ b/cuda_core/docs/source/conf.py @@ -121,20 +121,25 @@ def _html_baseurl(): copybutton_exclude = ".linenos, .gp" extlinks = { + # Historical release notes use this role to link into pre-migration tags. "cuda-core-example": ( f"https://github.com/NVIDIA/cuda-python/blob/{GITHUB_EXAMPLES_REF}/cuda_core/examples/%s", "%s", ), "cuda-core-examples": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/cuda_core/examples%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_core%s", "%s", ), "sample": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_core/%s", + "%s", + ), + "sample-file": ( + f"https://github.com/NVIDIA/cuda-python/blob/{GITHUB_EXAMPLES_REF}/samples/cuda_core/%s", "%s", ), "samples": ( - f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples%s", + f"https://github.com/NVIDIA/cuda-python/tree/{GITHUB_EXAMPLES_REF}/samples/cuda_core%s", "%s", ), } diff --git a/cuda_core/docs/source/examples.rst b/cuda_core/docs/source/examples.rst index 5de94e805ac..71de830f09e 100644 --- a/cuda_core/docs/source/examples.rst +++ b/cuda_core/docs/source/examples.rst @@ -4,9 +4,9 @@ Examples ======== -The canonical, runnable examples for ``cuda.core`` live under the top-level -:samples:`samples/ directory ` of the cuda-python repository. Each sample -is a self-contained directory with its own ``README.md``, ``requirements.txt``, +The canonical, runnable examples for ``cuda.core`` live under +:samples:`samples/cuda_core/ ` in the cuda-python repository. Each sample is +a self-contained directory with its own ``README.md``, ``requirements.txt``, and PEP 723 dependency block, and every sample is exercised as part of the ``cuda.core`` test suite. diff --git a/cuda_core/docs/source/getting-started.rst b/cuda_core/docs/source/getting-started.rst index 1976636f808..99ef7949518 100644 --- a/cuda_core/docs/source/getting-started.rst +++ b/cuda_core/docs/source/getting-started.rst @@ -32,7 +32,7 @@ Example: Compiling and Launching a CUDA kernel ---------------------------------------------- To get a taste for ``cuda.core``, let's walk through a simple example that compiles and launches a vector addition kernel. -You can find the complete example in :sample:`samples/vectorAdd/vectorAdd.py ` +You can find the complete example in :sample-file:`samples/cuda_core/vectorAdd/vectorAdd.py ` and browse the :doc:`examples page ` for the rest of the shipped workflows. @@ -80,7 +80,7 @@ Note the use of the ``name_expressions`` parameter to the :meth:`Program.compile Next, we retrieve the compiled kernel from the CUBIN and prepare the arguments and kernel configuration. We're using `CuPy `_ arrays as inputs for this example, but you can use PyTorch tensors too (see -:sample:`samples/customPyTorchKernel/customPyTorchKernel.py ` +:sample-file:`samples/cuda_core/customPyTorchKernel/customPyTorchKernel.py ` and the :doc:`examples page `). .. code-block:: python diff --git a/cuda_core/docs/source/interoperability.rst b/cuda_core/docs/source/interoperability.rst index 87347eb9d25..1e6c630087b 100644 --- a/cuda_core/docs/source/interoperability.rst +++ b/cuda_core/docs/source/interoperability.rst @@ -70,11 +70,11 @@ a few iterations to ensure correctness. for extracting the metadata (such as pointer address, shape, strides, and dtype) from any Python objects supporting either CAI or DLPack and returning a :class:`~utils.StridedMemoryView` object. See the -:cuda-core-example:`strided_memory_view_constructors.py ` +:sample-file:`stridedMemoryViewConstructors.py ` example for the explicit constructors, or -:cuda-core-example:`strided_memory_view_cpu.py ` +:sample-file:`stridedMemoryViewCpu.py ` and -:cuda-core-example:`strided_memory_view_gpu.py ` +:sample-file:`stridedMemoryViewGpu.py ` for decorator-based workflows. This provides a *concrete implementation* to both protocols that is **array-library-agnostic**, so that all Python projects can just rely on this without either re-implementing (the consumer-side of) diff --git a/cuda_core/pixi.lock b/cuda_core/pixi.lock index a8bfc413dcc..468cd21d1ae 100644 --- a/cuda_core/pixi.lock +++ b/cuda_core/pixi.lock @@ -3098,15 +3098,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/aom-3.14.1-pl5321h039972f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.45.1-default_hfdba357_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-he90730b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.0-py314h4a8dc5f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.2.0-h53410ce_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.33-ha770c72_0.conda @@ -3127,11 +3124,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-14.0.1-py314h31ce861_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cupy-core-14.0.1-py314hed3c566_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ffmpeg-8.1.2-gpl_h1bf8424_901.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda @@ -3143,7 +3137,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.18.1-h27c8c51_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.3-ha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.16-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda @@ -3163,9 +3156,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/intel-media-driver-26.1.6-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-4.18.0-he073ed8_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda @@ -3179,23 +3169,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-hd0affe5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-8_hfef963f_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudnn-9.23.1.3-ha4b6413_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcudss-0.8.0.10-h7bcfba5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufft-12.3.0.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.18.1.6-h053a66a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.2.18-h676940d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.1.7-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdovi-3.3.2-ha23c83e_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.127-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.1-hecca717_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libfabric-2.6.0-ha770c72_0.conda @@ -3216,23 +3201,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-devel-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.13.0-default_he001693_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libhwy-1.4.0-h10be129_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjxl-0.11.2-h174a0a3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-8_h5e43f62_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmagma-2.10.0-hd93470c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.3.33-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.5-hd0c01bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.2.1-h1f0fae8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-batch-plugin-2026.2.1-h7e124b3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-auto-plugin-2026.2.1-h7e124b3_0.conda @@ -3251,9 +3232,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libplacebo-7.360.1-h9eeb4b2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpmix-5.0.8-h31fc519_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.58-h421ea60_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h538a264_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.62.3-h4c96295_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.2.0-h90f66d4_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc7d488a_2.conda @@ -3277,16 +3256,12 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.2-hca5e8e5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.3-hca6bf5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.3-h49c6c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-22.1.8-h4922eb0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py314h67df5f8_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mkl-2026.0.0-hecca717_915.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpc-1.4.0-he0a73b1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda @@ -3294,7 +3269,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpi4py-4.1.2-py314hab80c86_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/nccl-2.30.7.1-h1aa9b5a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda @@ -3305,7 +3279,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/opencl-headers-2025.06.13-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openh264-2.6.0-hc22cd8d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-h67ed482_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/optree-0.19.1-py314h9891dd4_0.conda @@ -3324,23 +3297,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.14.6-habeac84_100_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-2.12.0-cuda130_mkl_py314_he284d22_300.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pytorch-gpu-2.12.0-cuda129_mkl_h0d04637_300.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-63.0-h192683f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl2-2.32.56-h54a6638_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sdl3-3.4.10-hdeec2a5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shaderc-2026.2-h718be3e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sleef-3.9.0-ha0421bc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/spirv-tools-2026.2-hb700be7_0.conda @@ -3350,32 +3317,22 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/triton-3.7.0-cuda130py314h1cdc6f0_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ucc-1.8.0-h2521932_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ucx-1.20.1-hf72d326_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wayland-1.25.0-hd6090a7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wayland-protocols-1.49-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/x264-1!164.3095-h166bdaf_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/x265-3.5-h924138e_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.48-h280c20c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda @@ -3384,7 +3341,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxscrnsaver-1.2.4-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda @@ -3408,14 +3364,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/arm-variant-1.2.0-sbsa.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/binutils_impl_linux-aarch64-2.45.1-default_h5f4c503_102.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h0b6afd8_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.1.0-py314h0bd77cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.6-py314hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-13.3.3.4.1-h579c4fd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cuda-crt-tools-13.3.33-h579c4fd_0.conda @@ -3436,11 +3389,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-14.0.1-py314h8e5308c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cupy-core-14.0.1-py314h1d6db3a_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dav1d-1.2.1-h31becfc_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ffmpeg-8.0.1-gpl_hd1a4c92_912.conda - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.29.4-pyhd8ed1ab_0.conda @@ -3452,7 +3402,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.18.1-hba86a56_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.14.3-h8af1aa0_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/fribidi-1.0.16-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.6.0-pyhd8ed1ab_0.conda @@ -3470,9 +3419,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-aarch64-4.18.0-h05a177a_9.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lame-3.100-h4e544f5_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.19.1-h9d5b58d_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda @@ -3485,22 +3431,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.2.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcap-2.78-hf9559e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-8_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcublas-13.5.1.27-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudnn-9.23.1.3-h0bf6004_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcudss-0.7.1.4-he387df4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufft-12.3.0.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcufile-1.18.1.6-h42688b2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcurand-10.4.3.29-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusolver-12.2.2.18-he38c790_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcusparse-12.8.1.7-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.25-h1af38f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libdrm-2.4.127-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-1.7.0-hd24410f_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libevent-2.1.12-h4ba1bb4_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.8.1-hfae3067_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libfabric-2.6.0-h8af1aa0_0.conda @@ -3521,24 +3462,20 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-devel-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_19.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libharfbuzz-14.2.1-h3a99ef3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwloc-2.13.0-default_ha95e27d_1000.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libhwy-1.4.0-h0626a34_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.4.1-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libjxl-0.11.2-hbae46ee_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-8_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.3-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmagma-2.9.0-he3ecef4_6.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnl-3.11.0-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvfatbin-13.3.29-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libnvjitlink-13.3.33-h8f3c8d4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libogg-1.3.5-h86ecc28_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.33-openmp_h1a8b088_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-2025.4.1-h1915271_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-arm-cpu-plugin-2025.4.1-h1915271_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenvino-auto-batch-plugin-2025.4.1-h3d5001d_1.conda @@ -3554,9 +3491,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpciaccess-0.19-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpmix-5.0.8-h83c401c_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpng-1.6.58-h1abf092_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libprotobuf-6.31.1-h61c7711_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/librsvg-2.62.3-hf685517_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsanitizer-15.2.0-he19c465_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsndfile-1.2.2-h30591a0_2.conda @@ -3578,23 +3513,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libvulkan-loader-1.4.341.0-h8b8848b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.13.2-h3c6a4c8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-16-2.15.3-h79dcc73_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.15.3-h869d058_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/llvm-openmp-22.1.8-he40846f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py314hb76de3f_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpc-1.4.0-he6dc3fb_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpfr-4.2.2-h3faef18_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpg123-1.32.9-h65af167_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-openmpi.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/mpi4py-4.1.2-py314hf3deed3_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mpmath-1.4.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/nccl-2.30.7.1-h2b99535_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.6-hf8d1292_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/networkx-3.6.1-pyhcf101f3_0.conda @@ -3602,7 +3532,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.6-py314he1698a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openh264-2.6.0-h0564a2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.4-h5da879a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openmpi-5.0.10-hbbf8ccc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.3-h546c87b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/optree-0.19.1-py314hd7d8586_0.conda @@ -3621,23 +3550,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.14.6-hc679e19_100_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-2.10.0-cuda130_generic_py314_h0c96c11_201.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pytorch-gpu-2.10.0-cuda129_generic_hdc58e1e_201.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rdma-core-63.0-h1f0f388_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl2-2.32.56-h7ac5ae9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sdl3-3.4.10-had2c13b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-81.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/shaderc-2025.5-hfeb5c2c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/sleef-3.9.0-h5bb93e2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/snappy-1.2.2-he774c54_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/spirv-tools-2026.2-hfefdfc9_0.conda @@ -3647,31 +3570,21 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tbb-2023.0.0-h57272ed_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/triton-3.6.0-cuda130py314h75a4554_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucc-1.8.0-he629949_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ucx-1.20.1-h62a42b4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.25.0-h4f8a99f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x264-1!164.3095-h4e544f5_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/x265-3.5-hdd96247_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xkeyboard-config-2.48-h80f16a2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libsm-1.2.6-h0808dbd_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libx11-1.8.13-h63a1b12_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcursor-1.2.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.2-he30d5cf_0.conda @@ -3680,7 +3593,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxscrnsaver-1.2.4-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-xorgproto-2025.1-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-ng-2.3.3-ha7cb516_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda @@ -3698,26 +3610,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/7a/a2/512f5d0a9e2bdfe0b52c7afe7dbdd3c140fa18ab41c1c863f59eee8808df/nvmath_python-1.0.0-cp314-cp314-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/e0/5b/ca0ba6fa769d08174b7a5b4775c279e2e26611cdd5e7833aa699187871c7/nvtx-0.2.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl win-64: - - conda: https://conda.anaconda.org/conda-forge/win-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/win-64/aom-3.14.1-pl5321h06fc181_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/backports.strenum-1.3.1-haf276df_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.4-h477c42c_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py314h5a2d7ad_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvrtc-13.3.33-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-13.3.33-h719f0c7_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_win-64-13.3.33-h57928b3_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-impl-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cuda-nvvm-tools-13.3.33-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-13.3-hcbadf70_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/dav1d-1.2.1-hcfcfb64_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ffmpeg-8.1.2-gpl_h6d5d71d_901.conda - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 @@ -3727,7 +3633,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.18.1-hd47e2ca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.16-hfd05255_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/gdk-pixbuf-2.44.6-h1f5b9c4_0.conda @@ -3736,26 +3641,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-14.2.1-h5a1b470_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/icu-78.3-h637d24d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lame-3.100-hcfcfb64_1003.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.11.0-8_h8455456_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.2.0-hfd05255_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.11.0-8_h2a3cdd5_mkl.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.8.1-hac47afa_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libfreetype6-2.14.3-hdbac1cb_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libharfbuzz-14.2.1-h03b5201_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.13.0-default_h049141e_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwy-1.4.0-h172a326_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.18-hc1393d2_2.conda @@ -3770,7 +3668,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.5-h2466b09_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libopus-1.6.1-h6a83c73_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.58-h7351971_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/librsvg-2.62.3-h15cfe45_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -3779,64 +3676,45 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libvulkan-loader-1.4.341.0-h477610d_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.6.0-h4d5522a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libwinpthread-12.0.0.r4.gg4f2fc60ca-h57928b3_10.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-16-2.15.3-h3cfd58e_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libxml2-2.15.3-h8ef44ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/llvm-openmp-22.1.8-h4fa8253_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-2026.0.0-hac47afa_908.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.4.6-py314h02f10f6_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/onemkl-license-2026.0.0-h57928b3_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openh264-2.6.0-hb17fa0b_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.2-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.56.4-h13911b6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.47-hd2b5f0e_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyglet-2.1.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.20.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.14.6-h4b44e0e_100_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl2-2.32.56-h5112557_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sdl3-3.4.10-h5112557_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-83.0.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/shaderc-2026.2-h8fa7867_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/spirv-tools-2026.2-h49e36cd_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/svt-av1-4.0.1-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.26100.0-h57928b3_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.5-h1b7c187_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.51.36231-h1b9f54f_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.51.36231-h84cd919_39.conda - conda: https://conda.anaconda.org/conda-forge/win-64/x264-1!164.3095-h8ffe710_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/x265-3.5-h2d74725_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - conda: . build: py314hd7f1909_0 @@ -4257,87 +4135,6 @@ packages: license_family: GPL size: 5830940 timestamp: 1770267725685 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda - sha256: e511644d691f05eb12ebe1e971fd6dc3ae55a4df5c253b4e1788b789bdf2dfa6 - md5: 8ccf913aaba749a5496c17629d859ed1 - depends: - - __glibc >=2.17,<3.0.a0 - - brotli-bin 1.2.0 hb03c661_1 - - libbrotlidec 1.2.0 hb03c661_1 - - libbrotlienc 1.2.0 hb03c661_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 20103 - timestamp: 1764017231353 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.2.0-hd651790_1.conda - sha256: 1fdee53dea5baa0b4d7ccd3bc0269e81017032c7cfe8843b6a0622eddf05714b - md5: 5c933384d588a06cd8dac78ca2864aab - depends: - - brotli-bin 1.2.0 he30d5cf_1 - - libbrotlidec 1.2.0 he30d5cf_1 - - libbrotlienc 1.2.0 he30d5cf_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 20145 - timestamp: 1764017310011 -- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.2.0-h2d644bc_1.conda - sha256: a4fffdf1c9b9d3d0d787e20c724cff3a284dfa3773f9ce609c93b1cfd0ce8933 - md5: bc58fdbced45bb096364de0fba1637af - depends: - - brotli-bin 1.2.0 hfd05255_1 - - libbrotlidec 1.2.0 hfd05255_1 - - libbrotlienc 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 20342 - timestamp: 1764017988883 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda - sha256: 64b137f30b83b1dd61db6c946ae7511657eead59fdf74e84ef0ded219605aa94 - md5: af39b9a8711d4a8d437b52c1d78eb6a1 - depends: - - __glibc >=2.17,<3.0.a0 - - libbrotlidec 1.2.0 hb03c661_1 - - libbrotlienc 1.2.0 hb03c661_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 21021 - timestamp: 1764017221344 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-bin-1.2.0-he30d5cf_1.conda - sha256: cffd260d3b1527ff8c1d29f00e10f4e1d4bccbe4d5e605c23af68453cf78d32b - md5: b31f6f3a888c3f8f4c5a9dafc2575187 - depends: - - libbrotlidec 1.2.0 he30d5cf_1 - - libbrotlienc 1.2.0 he30d5cf_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 20758 - timestamp: 1764017301339 -- conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.2.0-hfd05255_1.conda - sha256: e76966232ef9612de33c2087e3c92c2dc42ea5f300050735a3c646f33bce0429 - md5: 6abd7089eb3f0c790235fe469558d190 - depends: - - libbrotlidec 1.2.0 hfd05255_1 - - libbrotlienc 1.2.0 hfd05255_1 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 22714 - timestamp: 1764017952449 - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py314h3de4e8d_1.conda sha256: 3ad3500bff54a781c29f16ce1b288b36606e2189d0b0ef2f67036554f47f12b0 md5: 8910d2c46f7e7b519129f486e0fe927a @@ -4710,54 +4507,6 @@ packages: license_family: GPL size: 54725 timestamp: 1771382417485 -- conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py314h97ea11e_4.conda - sha256: b0314a7f1fb4a294b1a8bcf5481d4a8d9412a9fee23b7e3f93fb10e4d504f2cc - md5: 95bede9cdb7a30a4b611223d52a01aa4 - depends: - - numpy >=1.25 - - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 324013 - timestamp: 1769155968691 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.3-py314ha0cc70f_4.conda - sha256: ce3575300f89e6d384cb28f44d11a52862087b3fbd82127300f3ec8b292a553d - md5: 015503b3e0c818f2e773665aacada937 - depends: - - numpy >=1.25 - - python - - libstdcxx >=14 - - libgcc >=14 - - python 3.14.* *_cp314 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 342661 - timestamp: 1769155977005 -- conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.3.3-py314hf309875_4.conda - sha256: f141bcbf8e490b49b2f53f517173d13a64d75e43cfae170e0d931cb0b66f4bce - md5: c26934035616f7d578f9da0491aed3d8 - depends: - - numpy >=1.25 - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/contourpy?source=hash-mapping - size: 247437 - timestamp: 1769155978556 - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.14.3-py314hd8ed1ab_101.conda noarch: generic sha256: 91b06300879df746214f7363d6c27c2489c80732e46a369eb2afc234bcafb44c @@ -6739,49 +6488,6 @@ packages: name: cutensor-cu13 version: 2.7.0 sha256: 293730541bdcc260c2f735ba4aa123cd907ca143a964252d1912a58c1e37c18a -- conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda - sha256: bb47aec5338695ff8efbddbc669064a3b10fe34ad881fb8ad5d64fbfa6910ed1 - md5: 4c2a8fef270f6c69591889b93f9f55c1 - depends: - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/cycler?source=hash-mapping - size: 14778 - timestamp: 1764466758386 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hac629b4_1.conda - sha256: 7684da83306bb69686c0506fb09aa7074e1a55ade50c3a879e4e5df6eebb1009 - md5: af491aae930edc096b58466c51c4126c - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=13 - - libntlm >=1.8,<2.0a0 - - libstdcxx >=13 - - libxcrypt >=4.4.36 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause-Attribution - license_family: BSD - purls: [] - size: 210103 - timestamp: 1771943128249 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6598af7_1.conda - sha256: 0606296a3b0cc757229dd97db8c6dc0f77e54f975f89ae63c36fb01e2a2abe61 - md5: f4fbf4001970e3e58984281a12c99969 - depends: - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=13 - - libntlm - - libstdcxx >=13 - - libxcrypt >=4.4.36 - - openssl >=3.5.5,<4.0a0 - license: BSD-3-Clause-Attribution - license_family: BSD - purls: [] - size: 224450 - timestamp: 1771943147365 - conda: https://conda.anaconda.org/conda-forge/linux-64/cython-3.2.4-py314h1807b08_0.conda sha256: f700d10c2a794710a1656a6fdb8908fb04f3c7812ac4f17187777646ede1a3d9 md5: 866fd3d25b767bccb4adc8476f4035cd @@ -6980,41 +6686,6 @@ packages: - pkg:pypi/domdf-python-tools?source=hash-mapping size: 96253 timestamp: 1739444562482 -- conda: https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.4.0-hecca717_0.conda - sha256: 40cdd1b048444d3235069d75f9c8e1f286db567f6278a93b4f024e5642cfaecc - md5: dbe3ec0f120af456b3477743ffd99b74 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 71809 - timestamp: 1765193127016 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.4.0-hfae3067_0.conda - sha256: a636dfd17adc2a859cbdfce97e449e338b02a9f099c6dc0941c9f26bf448cca9 - md5: 9fd794eaf983eabf975ead524540b4be - depends: - - libgcc >=14 - - libstdcxx >=14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 71905 - timestamp: 1765194538141 -- conda: https://conda.anaconda.org/conda-forge/win-64/double-conversion-3.4.0-hac47afa_0.conda - sha256: 09e30a170e0da3e9847d449b594b5e55e6ae2852edd3a3680e05753a5e015605 - md5: 3d3caf4ccc6415023640af4b1b33060a - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 70943 - timestamp: 1765193243911 - conda: https://conda.anaconda.org/conda-forge/noarch/enum_tools-0.13.0-pyhd8ed1ab_0.conda sha256: 07f06106f9c15d36dff4694d1191e7c0f42273f175ad8d7abbffd347dfe33d4c md5: 8b259cc3194c36e0235f873c6dae9eef @@ -7740,22 +7411,6 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 -- conda: https://conda.anaconda.org/conda-forge/noarch/fonttools-4.63.0-pyh7db6752_0.conda - sha256: c9752235f1ff7061d834e5e4a3d0adf71ebeeff2b3fad82dab607edce7f70c91 - md5: 0509ee74d95e5b98eb6fe2a47760e399 - depends: - - brotli - - munkres - - python >=3.10 - - unicodedata2 >=15.1.0 - track_features: - - fonttools_no_compile - license: MIT - license_family: MIT - purls: - - pkg:pypi/fonttools?source=hash-mapping - size: 846038 - timestamp: 1778770337113 - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.2-ha770c72_0.conda sha256: 36857701b46828b6760c3c1652414ee504e7fc12740261ac6fcff3959b72bd7a md5: eeec961fec28e747e1e1dc0446277452 @@ -9282,50 +8937,6 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.5.0-py314h97ea11e_0.conda - sha256: e3488ea4a336f29e57de8f282bf40c0505cfc482e03004615e694b48e7d9c79f - md5: 7397e418cab519b8d789936cf2dde6f6 - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=hash-mapping - size: 77363 - timestamp: 1773067048780 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.5.0-py314h4702e76_0.conda - sha256: 06e4be177958444f4f047380656611cbc467e36d1e3318add141397ce4cc24ef - md5: cae18ed89f7f6dc0adc0aafe4c47bf3d - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=hash-mapping - size: 83264 - timestamp: 1773067330528 -- conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.5.0-py314hf309875_0.conda - sha256: 37cbc49fd7255532d09fb3bc9cc699554693e632fa90678a9b3d0ed12557d0d7 - md5: 0508c8dabeab91311e5c59b5e3f6d278 - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/kiwisolver?source=hash-mapping - size: 73330 - timestamp: 1773067062280 - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 md5: fb53fb07ce46a575c5d004bbc96032c2 @@ -9342,37 +8953,6 @@ packages: purls: [] size: 1386730 timestamp: 1769769569681 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda - sha256: 9b07046870772f28740e3f6149f09ff222843733087a33c5540b169c6289652d - md5: 54157a1c8c0bb70f62dd0b17fba7e7f2 - depends: - - __glibc >=2.17,<3.0.a0 - - keyutils >=1.6.3,<2.0a0 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.7,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1388990 - timestamp: 1781859420533 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-h2fb54aa_1.conda - sha256: b644718416a22b5d57c1194ea7207b7f8d33d6a2b42775763782d76cd7457aea - md5: 5fd2304064ef6199d1f91ec60ee7b820 - depends: - - keyutils >=1.6.3,<2.0a0 - - libedit >=3.1.20250104,<3.2.0a0 - - libedit >=3.1.20250104,<4.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.7,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1518484 - timestamp: 1781859412954 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba md5: d9ca108bd680ea86a963104b6b3e95ca @@ -9401,19 +8981,6 @@ packages: purls: [] size: 751055 timestamp: 1769769688841 -- conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.22.2-h719d79b_1.conda - sha256: c55745796e762ba9e817ab1fc0f21f1a049e202f90fa762df39578f37923f6c2 - md5: 00335c2c4a98656554771aaf6f1a7400 - depends: - - openssl >=3.5.7,<4.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 750320 - timestamp: 1781859644591 - conda: https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 sha256: aad2a703b9d7b038c0f745b853c6bb5f122988fe1a7a096e0e606d9cbec4eaab md5: a8832b479f93521a9e7b5b743803be51 @@ -9471,20 +9038,6 @@ packages: purls: [] size: 296564 timestamp: 1780211834883 -- conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda - sha256: 5ed63a32639a130564a870becb679fd52dfb816666a61ed3c023917389010480 - md5: 1df4012c8a2478699d07bc26af66d41e - depends: - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 523194 - timestamp: 1780211799997 - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 md5: 12bd9a3f089ee6c9266a37dab82afabd @@ -10255,74 +9808,6 @@ packages: purls: [] size: 68443 timestamp: 1779859701498 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp22.1-22.1.8-default_h6c227bf_3.conda - sha256: ccb8bd0a8f2d57675b6a60dabb0cc8becb35c2748ac4ec920d7f7625b93c16d8 - md5: 864e6d29ec7378b89ff5b5c9c629099e - depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libllvm22 >=22.1.8,<22.2.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 24175081 - timestamp: 1782358841320 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp22.1-22.1.8-default_h0cc847a_3.conda - sha256: 16ff2afd00acf94320dcfacc7124bbb67ae542d48e5c5ac74627e8690df10dfa - md5: 483b80c996ae6e15317459ebd71d7033 - depends: - - libstdcxx >=14 - - libgcc >=14 - - libllvm22 >=22.1.8,<22.2.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 24213552 - timestamp: 1782358853037 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda - sha256: b90ed8467a692788477c06bc0359fac52ed5651d801ddef189ba4b7ecf3ce38c - md5: 2a913525f4201f1adab2711fcf6f89b3 - depends: - - libclang-cpp22.1 ==22.1.8 default_h6c227bf_3 - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libllvm22 >=22.1.8,<22.2.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 14283567 - timestamp: 1782358841320 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-22.1.8-default_hd92691d_3.conda - sha256: ef4c63c93751dd2582c4f72d9558faaec68eb26d149406373d5af8e509008c48 - md5: baa5eb601eacb3cc438aad5b343d9b61 - depends: - - libclang-cpp22.1 ==22.1.8 default_h0cc847a_3 - - libstdcxx >=14 - - libgcc >=14 - - libllvm22 >=22.1.8,<22.2.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 14311328 - timestamp: 1782358853037 -- conda: https://conda.anaconda.org/conda-forge/win-64/libclang13-22.1.8-default_hf735972_3.conda - sha256: 34a25466769d1233d8f36a78d5f9f40279bae3fc4b70852acbd04b159ac4d183 - md5: c45c5a60b68368f62415941c1d9f0ab7 - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libzlib >=1.3.2,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 34917944 - timestamp: 1782358781159 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.5.1.27-h676940d_0.conda sha256: 39a1183f64d4ebff942117f7be9c0883b772ddf5796dee18bdda1d52949a9627 md5: 7bd32031313d7dca6c8250429b94bd03 @@ -10504,33 +9989,6 @@ packages: purls: [] size: 997204 timestamp: 1782772368681 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda - sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c - md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 4518030 - timestamp: 1770902209173 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h4f2b762_6.conda - sha256: 41b04f995c9f63af8c4065a35931e46cbc2fdd6b9bf7e4c19f90d53cbb2bc8e5 - md5: 67828c963b17db7dc989fe5d509ef04a - depends: - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 4553739 - timestamp: 1770903929794 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda sha256: 9a1615a44f0d01fcc23b4f1be4c8f86b2e19e3974481e826180dd261b67dcad6 md5: 6172124b5a746cc1f3f9fc7fac9f6740 @@ -10782,32 +10240,9 @@ packages: purls: [] size: 54600 timestamp: 1779728234591 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libegl-devel-1.7.0-ha4b6fd6_3.conda - sha256: e4b46919c9bb65930bce238bd2736110ed7b8c30e5cd5394e4e1edb48de54843 - md5: 5bc6d55503483aabe8a90c5e7f49a2a4 - depends: - - __glibc >=2.17,<3.0.a0 - - libegl 1.7.0 ha4b6fd6_3 - - libgl-devel 1.7.0 ha4b6fd6_3 - - xorg-libx11 - license: LicenseRef-libglvnd - purls: [] - size: 31718 - timestamp: 1779728222280 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libegl-devel-1.7.0-hd24410f_3.conda - sha256: 2b5ae66aa91215e915df3c520fed85a17231a067339b54f0594d93689b684c86 - md5: 8ebac3af4a69a9a41c16442a65bf3ac4 - depends: - - libegl 1.7.0 hd24410f_3 - - libgl-devel 1.7.0 hd24410f_3 - - xorg-libx11 - license: LicenseRef-libglvnd - purls: [] - size: 31552 - timestamp: 1779728260736 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - md5: a1cfcc585f0c42bf8d5546bb1dfb668d +- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda + sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 + md5: a1cfcc585f0c42bf8d5546bb1dfb668d depends: - libgcc-ng >=12 - openssl >=3.1.1,<4.0a0 @@ -11247,21 +10682,6 @@ packages: license_family: GPL size: 820022 timestamp: 1771382190160 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgcc-15.2.0-h8ee18e1_19.conda - sha256: 80e80ef5e31b00b12539db3c5aaecde60dab91381abfc1060e323d5c3b016dce - md5: cc5d690fc1c629038f13c68e88e65f44 - depends: - - _openmp_mutex >=4.5 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - msys2-conda-epoch <0.0a0 - - libgcc-ng ==15.2.0=*_19 - - libgomp 15.2.0 h8ee18e1_19 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 821854 - timestamp: 1778273037795 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.3.0-hf649bbc_118.conda sha256: 1abc6a81ee66e8ac9ac09a26e2d6ad7bba23f0a0cc3a6118654f036f9c0e1854 md5: 06901733131833f5edd68cf3d9679798 @@ -11759,18 +11179,6 @@ packages: license_family: GPL size: 663864 timestamp: 1771382118742 -- conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - sha256: 4dc958ced2fc7f42bc675b07e2c9abe3e150875ffdf62ca551d94fc6facf1fd7 - md5: f1147651e3fdd585e2f442c0c2fc8f2d - depends: - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - constrains: - - msys2-conda-epoch <0.0a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 664640 - timestamp: 1778272979661 - conda: https://conda.anaconda.org/conda-forge/linux-64/libharfbuzz-14.2.1-h17a8019_1.conda sha256: 821c315f6b5171aa89e735be2ad84e74eb3f898fc7610ee36cfecd95dfa789e8 md5: fb4669c3990b94ea32fbb81f433e9aa6 @@ -12473,37 +11881,6 @@ packages: purls: [] size: 81027 timestamp: 1779859714698 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm22-22.1.8-hf7376ad_1.conda - sha256: e9b5f301d6b001a9b8ce782157f56b75c92c4fbc9eba95dc6345c1139251d13b - md5: 298bb2483fc7d15396147cf1c1465359 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.2,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 44320272 - timestamp: 1781788728739 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm22-22.1.8-hfd2ba90_1.conda - sha256: dc943f1730a27f5fb36682c9852f7196f671c3a9df4a0a7a8f7ba665637c9151 - md5: 6fc7875f99e39c80dca8fcdc60e6559e - depends: - - libgcc >=14 - - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - - libzlib >=1.3.2,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 43302008 - timestamp: 1781785783993 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -12690,25 +12067,6 @@ packages: purls: [] size: 34831 timestamp: 1750274211 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda - sha256: 3b3f19ced060013c2dd99d9d46403be6d319d4601814c772a3472fe2955612b0 - md5: 7c7927b404672409d9917d49bff5f2d6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: LGPL-2.1-or-later - purls: [] - size: 33418 - timestamp: 1734670021371 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libntlm-1.4-hf897c2e_1002.tar.bz2 - sha256: 0e303d7a8845391bd1634efb65dc9d9b82b5608ebeb32fb77a56d1ed696d2eee - md5: 835c7c4137821de5c309f4266a51ba89 - depends: - - libgcc-ng >=9.3.0 - license: LGPL-2.1-or-later - purls: [] - size: 39449 - timestamp: 1609781865660 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvfatbin-13.3.29-hecca717_0.conda sha256: 3de6aed48ca7a705aa22444b54ad7236f0e1f9dc7f41ec3e2273e6cb991be213 md5: 1f9be211f7ec5c88b1d2d561aee7884d @@ -13011,25 +12369,6 @@ packages: purls: [] size: 5121336 timestamp: 1776993423004 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_3.conda - sha256: 90777039b48529283df5f16383fc399866024257a8bd93de583f4730db1ab30a - md5: c2bd8055a2e2dce7a7f32cfd02101fb6 - depends: - - __glibc >=2.17,<3.0.a0 - - libglvnd 1.7.0 ha4b6fd6_3 - license: LicenseRef-libglvnd - purls: [] - size: 51767 - timestamp: 1779728204026 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_3.conda - sha256: 9b964590b23c0a0357850653e09ab0d3f840ac5d0068ff927a61b5f00d6dbf65 - md5: 86958137ec1885e2da78804996c99d5f - depends: - - libglvnd 1.7.0 hd24410f_3 - license: LicenseRef-libglvnd - purls: [] - size: 58759 - timestamp: 1779728245599 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenvino-2026.0.0-hb56ce9e_1.conda sha256: a396a2d1aa267f21c98717ac097138b32e41e4c40ae501729bded3801476eeb5 md5: 9f0596e995efe372c470ff45c93131cb @@ -14199,33 +13538,6 @@ packages: purls: [] size: 385227 timestamp: 1776315248638 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libpq-18.4-hd5a49e9_1.conda - sha256: f7232cb79a31f5a5bcd499aea930b469cde8b96d26db9541022493fd274d2a6e - md5: 6c9103e7ea739a3bb3505da49a4708c1 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.3,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - openldap >=2.6.13,<2.7.0a0 - - openssl >=3.5.7,<4.0a0 - license: PostgreSQL - purls: [] - size: 2709008 - timestamp: 1782580447454 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-18.4-hccacd55_1.conda - sha256: 8badce81df7b86fde16ad28dea9d5d65ebe318d6eb48865d10fbd4bd296cd152 - md5: aa592f45ebe4bb5a4dd228fdf006b617 - depends: - - icu >=78.3,<79.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - openldap >=2.6.13,<2.7.0a0 - - openssl >=3.5.7,<4.0a0 - license: PostgreSQL - purls: [] - size: 2911832 - timestamp: 1782580350945 - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 md5: 11ac478fa72cf12c214199b8a96523f4 @@ -14311,52 +13623,6 @@ packages: purls: [] size: 3597785 timestamp: 1783168080031 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libraqm-0.10.5-h6406941_1.conda - sha256: 7c9e562842f193f772ef0ba681f238a2d9e5ef637588b6e46eb30cc6aa1940c8 - md5: fa63517815747363c41b439ff9301db1 - depends: - - __glibc >=2.28,<3.0.a0 - - libgcc >=14 - - libharfbuzz >=14.2.1 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - fribidi >=1.0.16,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 29441 - timestamp: 1782807076031 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libraqm-0.10.5-hd2f8911_1.conda - sha256: b287b67ba86d625bdaae919bac0a62ca6f5bc61509f034003df3c6b40f584a92 - md5: bf7fa2b700ba2c7b682aec5db14043c7 - depends: - - libgcc >=14 - - __glibc >=2.28,<3.0.a0 - - fribidi >=1.0.16,<2.0a0 - - libharfbuzz >=14.2.1 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - license: MIT - license_family: MIT - purls: [] - size: 29528 - timestamp: 1782807084739 -- conda: https://conda.anaconda.org/conda-forge/win-64/libraqm-0.10.5-h50d6d30_1.conda - sha256: 79ca55f7202daa560bffafcf7aef435e48618fe91a5243b8e4a6ed4edfbe63bc - md5: e5ab537cdd3462f26be2803209142913 - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libharfbuzz >=14.2.1 - - fribidi >=1.0.16,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 29296 - timestamp: 1782807186901 - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.60.2-h61e6d4b_0.conda sha256: 38b3189cf246f7265e06917f32d046ac375117c88834d045efe73ec48ceacc59 md5: d62da3d560992bfa2feb611d7be813b8 @@ -15585,21 +14851,6 @@ packages: purls: [] size: 397493 timestamp: 1727280745441 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.17.0-h0e4246c_0.conda - sha256: 08dec73df0e161c96765468847298a420933a36bc4f09b50e062df8793290737 - md5: a69bbf778a462da324489976c84cfc8c - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - pthread-stubs - - ucrt >=10.0.20348.0 - - xorg-libxau >=1.0.11,<2.0a0 - - xorg-libxdmcp - license: MIT - license_family: MIT - purls: [] - size: 1208687 - timestamp: 1727279378819 - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c md5: 5aa797f8787fe7a17d1b0821485b5adc @@ -15910,45 +15161,6 @@ packages: purls: [] size: 519871 timestamp: 1776376969852 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda - sha256: 0694760a3e62bdc659d90a14ae9c6e132b525a7900e59785b18a08bb52a5d7e5 - md5: 87e6096ec6d542d1c1f8b33245fe8300 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libxml2 - - libxml2-16 >=2.14.6 - license: MIT - license_family: MIT - purls: [] - size: 245434 - timestamp: 1757963724977 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h6700d25_1.conda - sha256: 8a816572a4650149d28c0b8b44e294380de18787735d00c7cf5fad91dba8e286 - md5: 0f31501ccd51a40f0a91381080ae7368 - depends: - - libgcc >=14 - - libxml2 - - libxml2-16 >=2.14.6 - license: MIT - license_family: MIT - purls: [] - size: 253367 - timestamp: 1757964660396 -- conda: https://conda.anaconda.org/conda-forge/win-64/libxslt-1.1.43-h0fbe4c1_1.conda - sha256: 13da38939c2c20e7112d683ab6c9f304bfaf06230a2c6a7cf00359da1a003ec7 - md5: 46034d9d983edc21e84c0b36f1b4ba61 - depends: - - libxml2 - - libxml2-16 >=2.14.6 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: MIT - license_family: MIT - purls: [] - size: 420223 - timestamp: 1757963935611 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 md5: edb0dca6bc32e4f4789199455a1dbeb8 @@ -16207,140 +15419,6 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 30022 timestamp: 1772445159549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.11.0-py314hdafbbf9_1.conda - sha256: bd375b8d5999ebd47d3eecd3ca7d0cb6b13156b83181bb99c9704b758114058d - md5: 23f8baa07d5e4f97b86cde417babf32b - depends: - - matplotlib-base >=3.11.0,<3.11.1.0a0 - - pyside6 >=6.7.2 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - tornado >=5 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/matplotlib?source=compressed-mapping - size: 14828 - timestamp: 1782829552189 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-3.11.0-py314ha42fa4b_1.conda - sha256: ad593122795468a83fe01d3ce831faea26e34be6ae3a6c3a0702ccd4194d2dfd - md5: 80af8d8643a2e2f5bf47ecd15a2c30a5 - depends: - - matplotlib-base >=3.11.0,<3.11.1.0a0 - - pyside6 >=6.7.2 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - tornado >=5 - license: PSF-2.0 - license_family: PSF - purls: [] - size: 14957 - timestamp: 1782829505062 -- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.11.0-py314h86ab7b2_1.conda - sha256: 280067b6b6dd6cef3125c517933ce4bd442a957fffa3ae0ca518379ba04c0fb6 - md5: 3aef2aea79e121dde8f8432ad8180a77 - depends: - - matplotlib-base >=3.11.0,<3.11.1.0a0 - - pyside6 >=6.7.2 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - tornado >=5 - license: PSF-2.0 - license_family: PSF - purls: [] - size: 15319 - timestamp: 1782829747462 -- conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.11.0-py314had63eae_1.conda - sha256: 666a19f61a40c5936bd0f07965b159ced727256fa7e2a4ff9dd5f0146aad86f1 - md5: 5866f3034ce42e8d512e7640f43270fd - depends: - - __glibc >=2.17,<3.0.a0 - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libgcc >=14 - - libraqm >=0.10.5,<0.11.0a0 - - libstdcxx >=14 - - numpy >=1.23 - - numpy >=1.25,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - - tk >=8.6.13,<8.7.0a0 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/matplotlib?source=compressed-mapping - size: 9004007 - timestamp: 1782829533688 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.11.0-py314h99b9003_1.conda - sha256: 56696ee8bc7dcc4ad5f6c39bdc51c4248f256943c1f8bd2cf5cefcecb77fedf6 - md5: 4055d95e01cd2e79b66f9d7ed1213ede - depends: - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libgcc >=14 - - libraqm >=0.10.5,<0.11.0a0 - - libstdcxx >=14 - - numpy >=1.23 - - numpy >=1.25,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - - tk >=8.6.13,<8.7.0a0 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/matplotlib?source=hash-mapping - size: 8911500 - timestamp: 1782829487715 -- conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py314hd0c49b1_1.conda - sha256: 94bc6fb3f0dc6337ca3b5dcb3d65da3ede1f24ce14d1e597ed83585bffe59dfc - md5: 99da493a14f3e26e8069e12281ce504f - depends: - - contourpy >=1.0.1 - - cycler >=0.10 - - fonttools >=4.22.0 - - freetype - - kiwisolver >=1.3.1 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libraqm >=0.10.5,<0.11.0a0 - - numpy >=1.23 - - numpy >=1.25,<3 - - packaging >=20.0 - - pillow >=8 - - pyparsing >=2.3.1 - - python >=3.14,<3.15.0a0 - - python-dateutil >=2.7 - - python_abi 3.14.* *_cp314 - - qhull >=2020.2,<2020.3.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/matplotlib?source=compressed-mapping - size: 8747069 - timestamp: 1782829728451 - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.2.1-pyhd8ed1ab_0.conda sha256: 9d690334de0cd1d22c51bc28420663f4277cfa60d34fa5cad1ce284a13f1d603 md5: 00e120ce3e40bad7bfc78861ce3c4a25 @@ -16709,17 +15787,6 @@ packages: - pkg:pypi/msgpack?source=hash-mapping size: 88657 timestamp: 1762504357246 -- conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda - sha256: d09c47c2cf456de5c09fa66d2c3c5035aa1fa228a1983a433c47b876aa16ce90 - md5: 37293a85a0f4f77bbd9cf7aaefc62609 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/munkres?source=hash-mapping - size: 15851 - timestamp: 1749895533014 - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 md5: e9c622e0d00fa24a6292279af3ab6d06 @@ -17848,50 +16915,6 @@ packages: purls: [] size: 392636 timestamp: 1758489353577 -- conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.4-h0e57b4f_0.conda - sha256: 24342dee891a49a9ba92e2018ec0bde56cc07fdaec95275f7a55b96f03ea4252 - md5: e723ab7cc2794c954e1b22fde51c16e4 - depends: - - libpng >=1.6.55,<1.7.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 245594 - timestamp: 1772624841727 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.13-hbde042b_0.conda - sha256: 21c4f6c7f41dc9bec2ea2f9c80440d9a4d45a6f2ac13243e658f10dcf1044146 - md5: 680608784722880fbfe1745067570b00 - depends: - - __glibc >=2.17,<3.0.a0 - - cyrus-sasl >=2.1.28,<3.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.6,<4.0a0 - license: OLDAP-2.8 - license_family: BSD - purls: [] - size: 786149 - timestamp: 1775741359582 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.13-h2fb54aa_0.conda - sha256: 08fab1d144a9790763f30bd44ac4a2f288703ad668d8c31d339ddea23e981147 - md5: 67eea19865a3463f75ca0d3a1d096350 - depends: - - cyrus-sasl >=2.1.28,<3.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.6,<4.0a0 - license: OLDAP-2.8 - license_family: BSD - purls: [] - size: 911524 - timestamp: 1775741371965 - conda: https://conda.anaconda.org/conda-forge/linux-64/openmpi-5.0.10-h67ed482_1.conda sha256: 9d13b09c95f5e9429f295dc89a896dae41a4ca4f77118139b1ff02001ae25127 md5: afa5d72e0e68fdf2b51b1c80a3d2086b @@ -18306,30 +17329,6 @@ packages: - pkg:pypi/pillow?source=compressed-mapping size: 1077965 timestamp: 1782912107475 -- conda: https://conda.anaconda.org/conda-forge/win-64/pillow-12.3.0-py314h61b30b5_0.conda - sha256: c9dc3212ed0021974541072ee3765a5097a0721191c34ee485d7d7e94449648f - md5: 09b8e6ac8f4a257b59e5d3025f3c9c1d - depends: - - python - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - python_abi 3.14.* *_cp314 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libwebp-base >=1.6.0,<2.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - openjpeg >=2.5.4,<3.0a0 - - lcms2 >=2.19.1,<3.0a0 - - libxcb >=1.17.0,<2.0a0 - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - tk >=8.6.13,<8.7.0a0 - - zlib-ng >=2.3.3,<2.4.0a0 - license: HPND - purls: - - pkg:pypi/pillow?source=compressed-mapping - size: 989058 - timestamp: 1782912129930 - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda sha256: 5f66ea31d62188c266c5a8752119b0cc90a5bf05963f665cf48a33e0ec58d39c md5: 09a970fbf75e8ed1aa633827ded6aa4f @@ -18483,18 +17482,6 @@ packages: purls: [] size: 8342 timestamp: 1726803319942 -- conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-h0e40799_1002.conda - sha256: 7e446bafb4d692792310ed022fe284e848c6a868c861655a92435af7368bae7b - md5: 3c8f2573569bb816483e5cf57efbbe29 - depends: - - libgcc >=13 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 9389 - timestamp: 1726802555076 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 md5: 7d9daffbb8d8e0af0f769dbbcd173a54 @@ -18735,83 +17722,9 @@ packages: - pkg:pypi/pyparsing?source=hash-mapping size: 110893 timestamp: 1769003998136 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.11.1-py314h3987850_1.conda - sha256: e410d0d4151f418dc75ea2dc38dfb0e7a136090b6874e5ca1c699fa840b4994d - md5: 5d2051f0630a568926943fc53c0aaa4c - depends: - - python - - qt6-main 6.11.1.* - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libgl >=1.7.0,<2.0a0 - - libopengl >=1.7.0,<2.0a0 - - libxslt >=1.1.43,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - python_abi 3.14.* *_cp314 - - qt6-main >=6.11.1,<6.12.0a0 - - libclang13 >=22.1.5 - - libxml2 - - libxml2-16 >=2.14.6 - license: LGPL-3.0-only - license_family: LGPL - purls: - - pkg:pypi/pyside6?source=hash-mapping - - pkg:pypi/shiboken6?source=hash-mapping - size: 13821776 - timestamp: 1778933872780 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyside6-6.11.1-py314ha37eecc_1.conda - sha256: 773bb42e09bfe13469b3d1db0dd79821146131210bec9eb1b69e761d0b5e9c26 - md5: 48e83c1e5552d2bf7f5c8d7d8bd9fc85 - depends: - - python - - qt6-main 6.11.1.* - - libgcc >=14 - - libstdcxx >=14 - - libopengl >=1.7.0,<2.0a0 - - libxslt >=1.1.43,<2.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - python_abi 3.14.* *_cp314 - - libegl >=1.7.0,<2.0a0 - - qt6-main >=6.11.1,<6.12.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - libgl >=1.7.0,<2.0a0 - - libclang13 >=22.1.5 - license: LGPL-3.0-only - license_family: LGPL - purls: - - pkg:pypi/pyside6?source=hash-mapping - - pkg:pypi/shiboken6?source=hash-mapping - size: 12361659 - timestamp: 1778933881635 -- conda: https://conda.anaconda.org/conda-forge/win-64/pyside6-6.11.1-py314h447aaf0_1.conda - sha256: 070802d5e1e1c1feb24d481efbd90b300fb0ecc1ce4312a3bbcbaae4393c05f9 - md5: 638be6b8674e7acf7a84132903cf4c8e - depends: - - python - - qt6-main 6.11.1.* - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - libxslt >=1.1.43,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - qt6-main >=6.11.1,<6.12.0a0 - - python_abi 3.14.* *_cp314 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libclang13 >=22.1.5 - license: LGPL-3.0-only - license_family: LGPL - purls: - - pkg:pypi/pyside6?source=hash-mapping - - pkg:pypi/shiboken6?source=hash-mapping - size: 11579652 - timestamp: 1778933912020 -- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca - md5: e2fd202833c4a981ce8a65974fe4abd1 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda + sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca + md5: e2fd202833c4a981ce8a65974fe4abd1 depends: - __win - python >=3.9 @@ -19540,217 +18453,6 @@ packages: - pkg:pypi/pyzmq?source=hash-mapping size: 183235 timestamp: 1771716967192 -- conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - sha256: 776363493bad83308ba30bcb88c2552632581b143e8ee25b1982c8c743e73abc - md5: 353823361b1d27eb3960efb076dfcaf6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: LicenseRef-Qhull - purls: [] - size: 552937 - timestamp: 1720813982144 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda - sha256: 49f777bdf3c5e030a8c7b24c58cdfe9486b51d6ae0001841079a3228bdf9fb51 - md5: bb138086d938e2b64f5f364945793ebf - depends: - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: LicenseRef-Qhull - purls: [] - size: 554571 - timestamp: 1720813941183 -- conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - sha256: 887d53486a37bd870da62b8fa2ebe3993f912ad04bd755e7ed7c47ced97cbaa8 - md5: 854fbdff64b572b5c0b470f334d34c11 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 - license: LicenseRef-Qhull - purls: [] - size: 1377020 - timestamp: 1720814433486 -- conda: https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.11.1-pl5321h16c4a6b_1.conda - sha256: aefbc43bde188ff4027d480da99c7fa9e8e6341e9762e065190239cb9b99bb1c - md5: 331d660aef48fec733a878dd1f8f4206 - depends: - - libxcb - - xcb-util - - xcb-util-wm - - xcb-util-keysyms - - xcb-util-image - - xcb-util-renderutil - - xcb-util-cursor - - libgl-devel - - libegl-devel - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - xcb-util >=0.4.1,<0.5.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - fontconfig >=2.18.1,<3.0a0 - - fonts-conda-ecosystem - - xorg-libxxf86vm >=1.1.7,<2.0a0 - - xorg-libxrandr >=1.5.5,<2.0a0 - - libsqlite >=3.53.2,<4.0a0 - - libpq >=18.4,<19.0a0 - - xorg-libice >=1.1.2,<2.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - wayland >=1.25.0,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - xorg-libxext >=1.3.7,<2.0a0 - - xcb-util-keysyms >=0.4.1,<0.5.0a0 - - libpng >=1.6.58,<1.7.0a0 - - harfbuzz >=14.2.1 - - xcb-util-cursor >=0.1.6,<0.2.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - libcups >=2.3.3,<2.4.0a0 - - libxcb >=1.17.0,<2.0a0 - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - libdrm >=2.4.127,<2.5.0a0 - - xorg-libxcomposite >=0.4.7,<1.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - xcb-util-wm >=0.4.2,<0.5.0a0 - - zstd >=1.5.7,<1.6.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - - icu >=78.3,<79.0a0 - - xorg-libxdamage >=1.1.6,<2.0a0 - - xorg-libsm >=1.2.6,<2.0a0 - - alsa-lib >=1.2.16,<1.3.0a0 - - openssl >=3.5.6,<4.0a0 - - libglib >=2.88.1,<3.0a0 - - libgl >=1.7.0,<2.0a0 - - libxkbcommon >=1.13.2,<2.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - dbus >=1.16.2,<2.0a0 - - xorg-libxtst >=1.2.5,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - constrains: - - qt ==6.11.1 - license: LGPL-3.0-only - license_family: LGPL - purls: [] - size: 60185421 - timestamp: 1780593127053 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.11.1-pl5321heaece2b_1.conda - sha256: 2ccded6ae260724733b80c1fb1c627068fd9cc8752ad425a3ea827fd4675ec23 - md5: bff3e4e7be46f5800da83261c2cec35b - depends: - - libxcb - - xcb-util - - xcb-util-wm - - xcb-util-keysyms - - xcb-util-image - - xcb-util-renderutil - - xcb-util-cursor - - libgl-devel - - libegl-devel - - libstdcxx >=14 - - libgcc >=14 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - xorg-libice >=1.1.2,<2.0a0 - - xorg-libxext >=1.3.7,<2.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - - krb5 >=1.22.2,<1.23.0a0 - - openssl >=3.5.6,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libxml2 - - libxml2-16 >=2.14.6 - - xcb-util-cursor >=0.1.6,<0.2.0a0 - - pcre2 >=10.47,<10.48.0a0 - - xorg-libxcomposite >=0.4.7,<1.0a0 - - libdrm >=2.4.127,<2.5.0a0 - - libcups >=2.3.3,<2.4.0a0 - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - xcb-util-keysyms >=0.4.1,<0.5.0a0 - - xorg-libx11 >=1.8.13,<2.0a0 - - xorg-libxxf86vm >=1.1.7,<2.0a0 - - libpng >=1.6.58,<1.7.0a0 - - dbus >=1.16.2,<2.0a0 - - libxcb >=1.17.0,<2.0a0 - - libglib >=2.88.1,<3.0a0 - - libxkbcommon >=1.13.2,<2.0a0 - - harfbuzz >=14.2.1 - - libwebp-base >=1.6.0,<2.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - - xorg-libxdamage >=1.1.6,<2.0a0 - - libegl >=1.7.0,<2.0a0 - - wayland >=1.25.0,<2.0a0 - - xorg-libxrandr >=1.5.5,<2.0a0 - - libzlib >=1.3.2,<2.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - icu >=78.3,<79.0a0 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - alsa-lib >=1.2.16,<1.3.0a0 - - xcb-util-wm >=0.4.2,<0.5.0a0 - - libsqlite >=3.53.2,<4.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - xorg-libxcursor >=1.2.3,<2.0a0 - - libpq >=18.4,<19.0a0 - - xorg-libxtst >=1.2.5,<2.0a0 - - xorg-libsm >=1.2.6,<2.0a0 - - libgl >=1.7.0,<2.0a0 - - fontconfig >=2.18.1,<3.0a0 - - fonts-conda-ecosystem - constrains: - - qt ==6.11.1 - license: LGPL-3.0-only - license_family: LGPL - purls: [] - size: 63087962 - timestamp: 1780593135478 -- conda: https://conda.anaconda.org/conda-forge/win-64/qt6-main-6.11.1-pl5321hfcac499_1.conda - sha256: c0f0552a879e18282799431c7d2769b269839ac3b3735082e754df3c6fa0728d - md5: a8d735f3faf356a24acf9eea0a940a0f - depends: - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - - ucrt >=10.0.20348.0 - - krb5 >=1.22.2,<1.23.0a0 - - libglib >=2.88.1,<3.0a0 - - libpng >=1.6.58,<1.7.0a0 - - double-conversion >=3.4.0,<3.5.0a0 - - libbrotlicommon >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libwebp-base >=1.6.0,<2.0a0 - - openssl >=3.5.6,<4.0a0 - - icu >=78.3,<79.0a0 - - libjpeg-turbo >=3.1.4.1,<4.0a0 - - pcre2 >=10.47,<10.48.0a0 - - libzlib >=1.3.2,<2.0a0 - - zstd >=1.5.7,<1.6.0a0 - - libfreetype >=2.14.3 - - libfreetype6 >=2.14.3 - - libvulkan-loader >=1.4.341.0,<2.0a0 - - libtiff >=4.7.1,<4.8.0a0 - - libsqlite >=3.53.1,<4.0a0 - - harfbuzz >=14.2.0 - constrains: - - qt ==6.11.1 - license: LGPL-3.0-only - license_family: LGPL - purls: [] - size: 89576886 - timestamp: 1780400596481 - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-61.0-h192683f_0.conda sha256: 8e0b7962cf8bec9a016cd91a6c6dc1f9ebc8e7e316b1d572f7b9047d0de54717 md5: d487d93d170e332ab39803e05912a762 @@ -21111,20 +19813,6 @@ packages: - pkg:pypi/tornado?source=compressed-mapping size: 912476 timestamp: 1774358032579 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.7-py314h5bd0f2a_0.conda - sha256: bbb7056f7c5fd606df16ed73ee68687050de2c02fd69a3f69a1cb533a7ed2ae8 - md5: 4a8e5889712641aabdf6695e292857fe - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=compressed-mapping - size: 918368 - timestamp: 1781006801436 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py314hafb4487_0.conda sha256: a7096330909a4b3345cbaecea099613929aae52900310209e0e27e616b550e4c md5: 6fa496cc0b64d496a6a755c9de72f17b @@ -21138,19 +19826,6 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 914247 timestamp: 1774359407535 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.7-py314hafb4487_0.conda - sha256: 7a5157dabdc88f2e16a45f8e342657ceb0d4515b8640c8a4f1c3b3de88dcc92e - md5: 82b0cb99192ae48eca75f25102fd5ce0 - depends: - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 916897 - timestamp: 1781007943867 - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.5-py314h5a2d7ad_0.conda sha256: 49d64837dd02475903479ca47b82669bd6c9f7e6afde61860c6f3f2bd57d8a03 md5: 87b1215adf7f0ba1fb9250af9fc668e1 @@ -21166,21 +19841,6 @@ packages: - pkg:pypi/tornado?source=hash-mapping size: 914835 timestamp: 1774358183098 -- conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.5.7-py314h5a2d7ad_0.conda - sha256: 6b9f5a195ca148f7c6b9a4a0a026631979b3112c43cd7c1064085ff833dfa4f0 - md5: b1b9bf11a82e608c5649d7462de94c5f - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 919275 - timestamp: 1781006902968 - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 md5: 019a7385be9af33791c989871317e1ed @@ -21364,49 +20024,6 @@ packages: purls: [] size: 7808868 timestamp: 1779828229221 -- conda: https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-17.0.1-py314h5bd0f2a_0.conda - sha256: ff1c1d7c23b91c9b0eb93a3e1380f4e2ac6c37ea2bba4f932a5484e9a55bba30 - md5: 494fdf358c152f9fdd0673c128c2f3dd - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 409562 - timestamp: 1770909102180 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-17.0.1-py314h51f160d_0.conda - sha256: fcc5e4515df19c3c781d3d70f69837c03d1f725d4e166cb3006cf656243f58bf - md5: 9479a1d1b844dfeefd287a16515811a0 - depends: - - libgcc >=14 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 - - python_abi 3.14.* *_cp314 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 410032 - timestamp: 1770909146009 -- conda: https://conda.anaconda.org/conda-forge/win-64/unicodedata2-17.0.1-py314h5a2d7ad_0.conda - sha256: 9041e463044944460f73f9528f2ec491180f0ffe857e3555aa8160b81050b8d9 - md5: d6b580a13384df5155c6ca19ee66854e - depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/unicodedata2?source=hash-mapping - size: 406126 - timestamp: 1770909191618 - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a md5: 9272daa869e03efe68833e3dc7a02130 @@ -21679,148 +20296,6 @@ packages: purls: [] size: 5517425 timestamp: 1646611941216 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda - sha256: ad8cab7e07e2af268449c2ce855cbb51f43f4664936eff679b1f3862e6e4b01d - md5: fdc27cb255a7a2cc73b7919a968b48f0 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libxcb >=1.17.0,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 20772 - timestamp: 1750436796633 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-0.4.1-hca56bd8_2.conda - sha256: d874906e236a5edc9309d479599bf2de4d8adca0f23c355b76759d5fb3c4bef8 - md5: 159ffec8f7fab775669a538f0b29373a - depends: - - libgcc >=13 - - libxcb >=1.17.0,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 21517 - timestamp: 1750437961489 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda - sha256: c2be9cae786fdb2df7c2387d2db31b285cf90ab3bfabda8fa75a596c3d20fc67 - md5: 4d1fc190b99912ed557a8236e958c559 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libxcb >=1.13 - - libxcb >=1.17.0,<2.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 20829 - timestamp: 1763366954390 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-cursor-0.1.6-he30d5cf_0.conda - sha256: 2e31eeeac0ad76229a565f1df3a8fb4ea54852a68404a99558adab9c92c0ac4d - md5: 8b70063c86f7f9a0b045e78d2d9971f7 - depends: - - libgcc >=14 - - libxcb >=1.13 - - libxcb >=1.17.0,<2.0a0 - - xcb-util-image >=0.4.0,<0.5.0a0 - - xcb-util-renderutil >=0.3.10,<0.4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 21639 - timestamp: 1763367131001 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda - sha256: 94b12ff8b30260d9de4fd7a28cca12e028e572cbc504fd42aa2646ec4a5bded7 - md5: a0901183f08b6c7107aab109733a3c91 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - license: MIT - license_family: MIT - purls: [] - size: 24551 - timestamp: 1718880534789 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-image-0.4.0-h5c728e9_2.conda - sha256: a43058edc001e8fb97f9b291028a6ca16a8969d9b56a998c7aecea083323ac97 - md5: b82e5c78dbbfa931980e8bfe83bce913 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - - xcb-util >=0.4.1,<0.5.0a0 - license: MIT - license_family: MIT - purls: [] - size: 24910 - timestamp: 1718880504308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda - sha256: 546e3ee01e95a4c884b6401284bb22da449a2f4daf508d038fdfa0712fe4cc69 - md5: ad748ccca349aec3e91743e08b5e2b50 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 14314 - timestamp: 1718846569232 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-keysyms-0.4.1-h5c728e9_0.conda - sha256: 9d92daa7feb0e14f81bf0d4b3f0b6ff1e8cec3ff514df8a0c06c4d49b518c315 - md5: 57ca8564599ddf8b633c4ea6afee6f3a - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 14343 - timestamp: 1718846624153 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda - sha256: 2d401dadc43855971ce008344a4b5bd804aca9487d8ebd83328592217daca3df - md5: 0e0cbe0564d03a99afd5fd7b362feecd - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 16978 - timestamp: 1718848865819 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-renderutil-0.3.10-h5c728e9_0.conda - sha256: 5827f5617c9741599f72bb7f090726f89c6ef91e4bada621895fdc2bbadfb0f1 - md5: 7beeda4223c5484ef72d89fb66b7e8c1 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 18139 - timestamp: 1718849914457 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda - sha256: 31d44f297ad87a1e6510895740325a635dd204556aa7e079194a0034cdd7e66a - md5: 608e0ef8256b81d04456e8d211eee3e8 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 51689 - timestamp: 1718844051451 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xcb-util-wm-0.4.2-h5c728e9_0.conda - sha256: 3f52cd8783e7d953c54266255fd11886c611c2620545eabc28ec8cf470ae8be7 - md5: f14dcda6894722e421da2b7dcffb0b78 - depends: - - libgcc-ng >=12 - - libxcb >=1.16,<2.0.0a0 - license: MIT - license_family: MIT - purls: [] - size: 50772 - timestamp: 1718845072660 - conda: https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.47-hb03c661_0.conda sha256: 19c2bb14bec84b0e995b56b752369775c75f1589314b43733948bb5f471a6915 md5: b56e0c8432b56decafae7e78c5f29ba5 @@ -21955,43 +20430,6 @@ packages: purls: [] size: 16317 timestamp: 1762977521691 -- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.12-hba3369d_1.conda - sha256: 156a583fa43609507146de1c4926172286d92458c307bb90871579601f6bc568 - md5: 8436cab9a76015dfe7208d3c9f97c156 - depends: - - libgcc >=14 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 109246 - timestamp: 1762977105140 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda - sha256: 048c103000af9541c919deef03ae7c5e9c570ffb4024b42ecb58dbde402e373a - md5: f2ba4192d38b6cef2bb2c25029071d90 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - license: MIT - license_family: MIT - purls: [] - size: 14415 - timestamp: 1770044404696 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxcomposite-0.4.7-he30d5cf_0.conda - sha256: 554f986ffa781d3393079926931465e61291d1eb8a56a03ad4a8e54b1ae233f4 - md5: 9c639c1abdbfe6759c5beb2c1db4bc13 - depends: - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxfixes >=6.0.2,<7.0a0 - license: MIT - license_family: MIT - purls: [] - size: 14915 - timestamp: 1770044415607 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda sha256: 832f538ade441b1eee863c8c91af9e69b356cd3e9e1350fff4fe36cc573fc91a md5: 2ccd714aa2242315acaf0a67faea780b @@ -22019,33 +20457,6 @@ packages: purls: [] size: 34596 timestamp: 1730908388714 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda - sha256: 43b9772fd6582bf401846642c4635c47a9b0e36ca08116b3ec3df36ab96e0ec0 - md5: b5fcc7172d22516e1f965490e65e33a4 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - xorg-libx11 >=1.8.10,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxfixes >=6.0.1,<7.0a0 - license: MIT - license_family: MIT - purls: [] - size: 13217 - timestamp: 1727891438799 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdamage-1.1.6-h86ecc28_0.conda - sha256: 3afaa2f43eb4cb679fc0c3d9d7c50f0f2c80cc5d3df01d5d5fd60655d0bfa9be - md5: d5773c4e4d64428d7ddaa01f6f845dc7 - depends: - - libgcc >=13 - - xorg-libx11 >=1.8.9,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - - xorg-libxfixes >=6.0.1,<7.0a0 - license: MIT - license_family: MIT - purls: [] - size: 13794 - timestamp: 1727891406431 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda sha256: 25d255fb2eef929d21ff660a0c687d38a6d2ccfbcbf0cc6aa738b12af6e9d142 md5: 1dafce8548e38671bea82e3f5c6ce22f @@ -22067,18 +20478,6 @@ packages: purls: [] size: 21039 timestamp: 1762979038025 -- conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.5-hba3369d_1.conda - sha256: 366b8ae202c3b48958f0b8784bbfdc37243d3ee1b1cd4b8e76c10abe41fa258b - md5: a7c03e38aa9c0e84d41881b9236eacfb - depends: - - libgcc >=14 - - libwinpthread >=12.0.0.r4.gg4f2fc60ca - - ucrt >=10.0.20348.0 - license: MIT - license_family: MIT - purls: [] - size: 70691 - timestamp: 1762977015220 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda sha256: 79c60fc6acfd3d713d6340d3b4e296836a0f8c51602327b32794625826bd052f md5: 34e54f03dfea3e7a2dcf1453a85f1085 @@ -22279,31 +20678,6 @@ packages: purls: [] size: 33786 timestamp: 1727964907993 -- conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda - sha256: 64db17baaf36fa03ed8fae105e2e671a7383e22df4077486646f7dbf12842c9f - md5: 665d152b9c6e78da404086088077c844 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 18701 - timestamp: 1769434732453 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.7-he30d5cf_0.conda - sha256: 6f6f2b32754e09c2334e067ba5d2d38715f2432cd9fb41d6f66de0591f8f4f94 - md5: b15ca02584678f38df6e114c32f93959 - depends: - - libgcc >=14 - - xorg-libx11 >=1.8.12,<2.0a0 - - xorg-libxext >=1.3.6,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 19148 - timestamp: 1769434729220 - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2025.1-hb03c661_0.conda sha256: 7a8c64938428c2bfd016359f9cb3c44f94acc256c6167dbdade9f2a1f5ca7a36 md5: aa8d21be4b461ce612d8f5fb791decae @@ -22450,18 +20824,6 @@ packages: purls: [] size: 121046 timestamp: 1770167944449 -- conda: https://conda.anaconda.org/conda-forge/win-64/zlib-ng-2.3.3-h0261ad2_1.conda - sha256: 71332532332d13b5dbe57074ddcf82ae711bdc132affa5a2982a29ffa06dc234 - md5: 46a21c0a4e65f1a135251fc7c8663f83 - depends: - - ucrt >=10.0.20348.0 - - vc >=14.3,<15 - - vc14_runtime >=14.44.35208 - license: Zlib - license_family: Other - purls: [] - size: 124542 - timestamp: 1770167984883 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/cuda_core/pixi.toml b/cuda_core/pixi.toml index 5077d3eb459..f27b8c86740 100644 --- a/cuda_core/pixi.toml +++ b/cuda_core/pixi.toml @@ -23,6 +23,8 @@ pytest-rerunfailures = "*" cloudpickle = "*" psutil = "*" pyglet = "*" +packaging = "*" +tomli = "*" # PEP 723 parsing fallback on Python 3.10. [feature.local-deps.dependencies] cuda-bindings = { path = "../cuda_bindings" } @@ -37,10 +39,9 @@ pytest = "*" packaging = "*" tomli = "*" # PEP 723 parsing fallback on Python 3.10. # numpy pinned <2.5 so `numba` (transitive dep of `numba-cuda` in -# samples/simplePrint) can install; numba currently requires numpy<2.5. +# samples/cuda_core/simplePrint) can install; numba currently requires numpy<2.5. numpy = "<2.5" -matplotlib = "*" # samples/extra/isoFdModelling -setuptools = "*" # samples/0_Introduction/stridedMemoryViewCpu (cffi JIT build) +setuptools = "*" # samples/cuda_core/stridedMemoryViewCpu (cffi JIT build) [feature.samples.system-requirements] cuda = "13" @@ -51,14 +52,14 @@ cuda = "13" # The conda-forge `cuda-cccl` package only installs C++ headers; the PyPI # wheel is the one that exposes `cuda.cccl` to Python. cuda-cccl = { version = "*", extras = ["minimal-sysctk13"] } -# nvtx: samples/kernelNsysProfile +# nvtx: samples/cuda_core/kernelNsysProfile nvtx = "*" -# numba-cuda: samples/simplePrint (pin >=0.29 to match the sample's +# numba-cuda: samples/cuda_core/simplePrint (pin >=0.29 to match the sample's # PEP 723 declaration; older 0.0.x releases resolve otherwise). numba-cuda = ">=0.29.0" -# nvmath-python: samples/matrixMulSharedMem +# nvmath-python: samples/cuda_core/matrixMulSharedMem nvmath-python = { version = "*", extras = ["sysctk13"] } -# nvidia-nvjitlink: samples/simplePrint (was nvidia-nvjitlink-cu13, now deprecated) +# nvidia-nvjitlink: samples/cuda_core/simplePrint (was nvidia-nvjitlink-cu13, now deprecated) nvidia-nvjitlink = "*" # These packages are provided by the local Conda path builds in `local-deps`. @@ -75,24 +76,24 @@ pytorch-gpu = "*" libgl-devel = "*" gxx = "*" pillow = "*" -# mpi4py + openmpi: samples/multiGPUGradientAverage +# mpi4py + openmpi: samples/cuda_core/multiGPUGradientAverage mpi4py = "*" openmpi = "*" # NOTE: two sample deps are intentionally NOT installed here: # -# * `tensorflow` (samples/customTensorFlowKernel) -- +# * `tensorflow` (samples/cuda_core/customTensorFlowKernel) -- # conda-forge tensorflow ships an object whose shared library requires # an executable stack, which fails to load on hardened kernels # (`cannot enable executable stack as shared object requires`). The # sample self-waives when TensorFlow is missing / broken; users who # want to run it should `pip install tensorflow` into a separate env. # -# * `cudf-cu13`, `cugraph-cu13`, `dask-cuda` (samples/pageRank) -- +# * `cudf-cu13`, `cugraph-cu13`, `dask-cuda` (samples/cuda_core/pageRank) -- # the RAPIDS stack is not on the conda-forge channel used here; it # lives on the `rapidsai` channel and pulls in ~2 GB of dependencies. # Left out to keep the samples env solvable. Users who want to run -# samples/pageRank can install those wheels via -# `pip install -r samples/pageRank/requirements.txt` into a dedicated +# samples/cuda_core/pageRank can install those wheels via +# `pip install -r samples/cuda_core/pageRank/requirements.txt` into a dedicated # environment. [feature.samples.target.linux-64.activation.env] @@ -168,7 +169,7 @@ nvidia-sphinx-theme = "*" make = "*" # Dedicated environment for the MLIR numba-cuda example -# (examples/gl_interop_fluid_numba_cuda_mlir.py). numba-cuda-mlir pulls +# (samples/cuda_core/glInteropFluidNumbaCudaMlir). numba-cuda-mlir pulls # *published* cuda-core / cuda-bindings through its pypi closure, which would # shadow (overwrite in site-packages) the editable dev path builds used # everywhere else -- so it MUST live in its own environment, isolated from the diff --git a/cuda_core/pyproject.toml b/cuda_core/pyproject.toml index f3a0c3a70f9..459ad03e562 100644 --- a/cuda_core/pyproject.toml +++ b/cuda_core/pyproject.toml @@ -69,6 +69,8 @@ test = [ "pytest-timeout==2.4.0", "cloudpickle==3.1.2", "psutil==7.2.2", + "packaging>=24", + "tomli>=2; python_version < '3.11'", # TODO: remove the Python 3.15 guard once 3.15 is officially supported "cffi==2.0.0; python_version < '3.15'", ] diff --git a/cuda_core/pytest.ini b/cuda_core/pytest.ini index da40eb213a3..e238be0dc9a 100644 --- a/cuda_core/pytest.ini +++ b/cuda_core/pytest.ini @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 @@ -6,6 +6,7 @@ addopts = --showlocals norecursedirs = cython markers = + samples: tests for cuda.core standalone samples # Keep this authorship marker registry in sync across all pytest config roots. # Search for "agent_authored(model)" before editing. agent_authored(model): agent-authored test not yet materially human-reviewed diff --git a/cuda_core/tests/example_tests/run_samples.py b/cuda_core/tests/example_tests/run_samples.py index 9cc9fdca7c3..bf00c726a00 100644 --- a/cuda_core/tests/example_tests/run_samples.py +++ b/cuda_core/tests/example_tests/run_samples.py @@ -1,484 +1,48 @@ #!/usr/bin/env python3 # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -""" -Sample test orchestrator for the standalone samples under the repo-root -``samples/`` directory. - -Discovers ``samples//.py``, applies per-sample overrides from -``test_args.json`` (same schema used in cuda-samples, plus a ``python`` -sub-object for Python-specific CLI args / launcher), and executes each sample -in its own subprocess. - -This module lives in the cuda.core test suite so the samples are exercised as -part of ``pytest cuda_core/tests`` (see ``test_samples.py``), but it can also -be invoked directly as a standalone runner: - python cuda_core/tests/example_tests/run_samples.py [--samples-dir samples] [--config .../test_args.json] - -Exit-code contract (matches cuda-samples): - 0 -> sample passed - 2 -> sample waived (missing dependency / unmet hardware requirement) - * -> sample failed -""" +"""cuda.core defaults for the shared sample runner.""" from __future__ import annotations -import argparse -import concurrent.futures -import importlib.metadata -import json -import os -import subprocess import sys -import threading -from dataclasses import dataclass from pathlib import Path -from typing import Any -if sys.version_info >= (3, 11): - import tomllib -else: - import tomli as tomllib +REPO_ROOT = Path(__file__).resolve().parents[3] +_TEST_HELPERS_ROOT = REPO_ROOT / "cuda_python_test_helpers" +if str(_TEST_HELPERS_ROOT) not in sys.path: + sys.path.insert(0, str(_TEST_HELPERS_ROOT)) -from packaging.requirements import InvalidRequirement, Requirement -from packaging.utils import canonicalize_name -from packaging.version import InvalidVersion +from cuda_python_test_helpers import sample_runner as _runner -# Default timeout per sample run (seconds). Match cuda-samples. -DEFAULT_TIMEOUT = 300 -EXIT_WAIVED = 2 -# This file lives at ``cuda_core/tests/example_tests/run_samples.py``; the -# repo root (which holds the top-level ``samples/`` directory) is four levels up. -REPO_ROOT = Path(__file__).resolve().parent.parent.parent.parent -DEFAULT_SAMPLES_DIR = REPO_ROOT / "samples" DEFAULT_CONFIG = Path(__file__).resolve().parent / "test_args.json" - -_print_lock = threading.Lock() - - -def _safe_print(*args: Any, **kwargs: Any) -> None: - with _print_lock: - print(*args, **kwargs) - - -# --------------------------------------------------------------------------- -# Discovery -# --------------------------------------------------------------------------- - - -def discover_samples(samples_dir: Path) -> list[Path]: - """Return every ``/.py`` sample entrypoint under ``samples_dir``. - - Samples can either sit directly under ``samples_dir`` - (``samples//.py``) or in a category subdirectory such as - ``samples/0_Introduction//.py``. The Utilities directory is - excluded at any level. Matching the cuda-samples convention, exactly one - Python entrypoint per sample directory is recognised (the one whose stem - matches the directory name). - """ - samples: list[Path] = [] - - def walk(current: Path) -> None: - for child in sorted(current.iterdir()): - if not child.is_dir() or child.name == "Utilities": - continue - entry = child / f"{child.name}.py" - if entry.is_file(): - samples.append(entry) - else: - # Not a sample dir; treat it as a category and recurse. - walk(child) - - walk(samples_dir) - return samples - - -# --------------------------------------------------------------------------- -# Config + GPU detection -# --------------------------------------------------------------------------- - - -def load_config(config_path: Path) -> dict[str, Any]: - if not config_path.is_file(): - return {} - try: - with open(config_path, encoding="utf-8") as fh: - data = json.load(fh) - except json.JSONDecodeError as exc: - _safe_print(f"Warning: failed to parse {config_path}: {exc}") - return {} - if not isinstance(data, dict): - _safe_print(f"Warning: {config_path} must contain a JSON object") - return {} - # Drop any keys starting with '_' (used for comments). - return {k: v for k, v in data.items() if not k.startswith("_")} - - -def get_gpu_count() -> int: - """Return the visible CUDA GPU count, conservatively 0 on error. - - Matches cuda-samples/run_tests.py::get_gpu_count(): uses ``nvidia-smi -L`` - first and falls back to ``CUDA_VISIBLE_DEVICES``. - """ - try: - smi = subprocess.run( - ["nvidia-smi", "-L"], # noqa: S607 - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, - text=True, - check=False, - ) - if smi.returncode == 0: - return sum(1 for line in smi.stdout.splitlines() if line.strip().lower().startswith("gpu ")) - except FileNotFoundError: - pass - except OSError: - pass - - visible = os.environ.get("CUDA_VISIBLE_DEVICES", "").strip() - if visible and visible.lower() not in {"no", "none"}: - return len([v for v in visible.split(",") if v]) - return 0 - - -# --------------------------------------------------------------------------- -# PEP 723 dependency gating -# --------------------------------------------------------------------------- - -_DISTRIBUTION_PROVIDERS: dict[str, tuple[str, ...]] = { - # cuda-python is a metapackage; cuda-bindings carries the matching CUDA API - # version and is the package samples actually import. - "cuda-python": ("cuda-bindings",), - # Conda installs CuPy as ``cupy`` while PyPI uses CUDA-major-specific names. - "cupy-cuda11x": ("cupy-cuda11x", "cupy"), - "cupy-cuda12x": ("cupy-cuda12x", "cupy"), - "cupy-cuda13x": ("cupy-cuda13x", "cupy"), -} - - -class DependencyMetadataError(ValueError): - """A sample contains invalid PEP 723 dependency metadata.""" - - -def _metadata_error(example: Path, detail: str) -> DependencyMetadataError: - return DependencyMetadataError(f"{example}: invalid PEP 723 metadata: {detail}") - - -def _extract_pep723_dependencies(example: Path) -> list[str] | None: - """Return the dependency list declared via PEP 723, or ``None`` if absent.""" - lines = example.read_text(encoding="utf-8").splitlines() - starts = [index for index, line in enumerate(lines) if line == "# /// script"] - if not starts: - return None - if len(starts) != 1: - raise _metadata_error(example, "expected exactly one script block") - - metadata_lines: list[str] = [] - for line_number, line in enumerate(lines[starts[0] + 1 :], start=starts[0] + 2): - if line == "# ///": - break - if line == "#": - metadata_lines.append("") - elif line.startswith("# "): - metadata_lines.append(line[2:]) - else: - raise _metadata_error(example, f"line {line_number} inside the script block is not a comment") - else: - raise _metadata_error(example, "script block is missing its closing '# ///'") - - try: - metadata = tomllib.loads("\n".join(metadata_lines)) - except tomllib.TOMLDecodeError as exc: - raise _metadata_error(example, str(exc)) from exc - - dependencies = metadata.get("dependencies") - if dependencies is None: - return None - if not isinstance(dependencies, list) or any(not isinstance(item, str) for item in dependencies): - raise _metadata_error(example, "'dependencies' must be an array of strings") - return dependencies - - -def _distribution_providers(requirement: Requirement) -> tuple[str, ...]: - name = canonicalize_name(requirement.name) - return _DISTRIBUTION_PROVIDERS.get(name, (name,)) - - -def _provided_extras(dist: importlib.metadata.Distribution) -> set[str]: - return {canonicalize_name(extra) for extra in (dist.metadata.get_all("Provides-Extra") or ())} - - -def _distribution_mismatches(requirement: Requirement, dist: importlib.metadata.Distribution) -> list[str]: - mismatches: list[str] = [] - if requirement.specifier: - try: - version_matches = requirement.specifier.contains(dist.version) - except InvalidVersion: - mismatches.append(f"has invalid version {dist.version!r}") - else: - if not version_matches: - mismatches.append(f"version {dist.version} does not satisfy {requirement.specifier}") - - missing_extras = {canonicalize_name(extra) for extra in requirement.extras} - _provided_extras(dist) - if missing_extras: - mismatches.append(f"does not provide extra(s): {', '.join(sorted(missing_extras))}") - return mismatches - - -def missing_dependencies(example: Path) -> list[str]: - """Return useful diagnostics for unmet PEP 723 dependency requirements. - - Returns an empty list if all declared deps are present, or if no PEP 723 - block exists (no gating to perform). - """ - deps = _extract_pep723_dependencies(example) - if not deps: - return [] - - missing: list[str] = [] - for spec in deps: - try: - requirement = Requirement(spec) - except InvalidRequirement as exc: - raise _metadata_error(example, f"invalid dependency requirement {spec!r}: {exc}") from exc - - if requirement.marker is not None and not requirement.marker.evaluate({"extra": ""}): - continue - - providers = _distribution_providers(requirement) - installed: list[str] = [] - for provider in providers: - try: - dist = importlib.metadata.distribution(provider) - except importlib.metadata.PackageNotFoundError: - continue - mismatches = _distribution_mismatches(requirement, dist) - if not mismatches: - break - installed.append(f"{provider} {dist.version}: {', '.join(mismatches)}") - else: - if installed: - detail = "; ".join(installed) - else: - detail = f"no provider distribution installed (checked: {', '.join(providers)})" - missing.append(f"{requirement} ({detail})") - return missing - - -# --------------------------------------------------------------------------- -# Run plan -# --------------------------------------------------------------------------- - - -@dataclass(frozen=True) -class RunPlan: - sample: Path - args: list[str] - launcher: list[str] - timeout: int - skip_reason: str | None = None - - -def _expand_env(value: str) -> str: - return os.path.expandvars(value) - - -def build_run_plan( - sample: Path, - config: dict[str, Any], - gpu_count: int, - timeout: int = DEFAULT_TIMEOUT, -) -> RunPlan: - """Combine config overrides + GPU availability into a concrete run plan. - - The returned plan carries either a ``skip_reason`` (sample must be - waived) or the command components to invoke. - """ - sample_cfg = config.get(sample.parent.name, {}) - - if sample_cfg.get("skip"): - return RunPlan(sample, [], [], timeout, skip_reason="skipped in test_args.json") - - required_gpus = int(sample_cfg.get("min_gpus", 1)) - if required_gpus > gpu_count: - return RunPlan( - sample, - [], - [], - timeout, - skip_reason=(f"requires {required_gpus} GPU(s), only {gpu_count} available"), - ) - - python_cfg = sample_cfg.get("python", {}) - raw_args = python_cfg.get("args", []) or [] - raw_launcher = python_cfg.get("launcher", []) or [] - if not isinstance(raw_args, list) or not isinstance(raw_launcher, list): - return RunPlan( - sample, - [], - [], - timeout, - skip_reason="invalid config: 'args' and 'launcher' must be lists", - ) - - return RunPlan( - sample=sample, - args=[_expand_env(str(a)) for a in raw_args], - launcher=[_expand_env(str(a)) for a in raw_launcher], - timeout=timeout, - ) - - -# --------------------------------------------------------------------------- -# Execution -# --------------------------------------------------------------------------- - - -@dataclass -class RunResult: - sample: Path - status: str # "PASS", "FAIL", "WAIVED", "TIMEOUT", "ERROR" - return_code: int - detail: str = "" - - -def run_sample(plan: RunPlan) -> RunResult: - sample = plan.sample - name = sample.parent.name - - if plan.skip_reason is not None: - _safe_print(f" [WAIVED] {name}: {plan.skip_reason}") - return RunResult(sample, "WAIVED", EXIT_WAIVED, plan.skip_reason) - - try: - missing = missing_dependencies(sample) - except DependencyMetadataError as exc: - reason = str(exc) - _safe_print(f" [ERROR] {name}: {reason}") - return RunResult(sample, "ERROR", -1, reason) - if missing: - reason = f"unmet package requirement(s): {'; '.join(missing)}" - _safe_print(f" [WAIVED] {name}: {reason}") - return RunResult(sample, "WAIVED", EXIT_WAIVED, reason) - - cmd = list(plan.launcher) + [sys.executable, str(sample)] + list(plan.args) - _safe_print(f" [RUN ] {name}: {' '.join(cmd)}") - - try: - proc = subprocess.run( # noqa: S603 - cmd, - cwd=str(sample.parent), - capture_output=True, - text=True, - timeout=plan.timeout, - check=False, - ) - except subprocess.TimeoutExpired: - _safe_print(f" [TIMEOUT] {name}: exceeded {plan.timeout}s") - return RunResult(sample, "TIMEOUT", -1, f"timed out after {plan.timeout}s") - except OSError as exc: - _safe_print(f" [ERROR] {name}: {exc}") - return RunResult(sample, "ERROR", -1, str(exc)) - - if proc.returncode == 0: - _safe_print(f" [PASS ] {name}") - return RunResult(sample, "PASS", 0) - if proc.returncode == EXIT_WAIVED: - _safe_print(f" [WAIVED] {name}: sample reported waived") - return RunResult(sample, "WAIVED", EXIT_WAIVED, "sample-reported") - - # Fail. Surface output so CI logs are diagnosable. - msg = f"return code {proc.returncode}" - _safe_print(f" [FAIL ] {name}: {msg}") - if proc.stdout: - _safe_print(f"---- stdout ({name}) ----\n{proc.stdout.rstrip()}") - if proc.stderr: - _safe_print(f"---- stderr ({name}) ----\n{proc.stderr.rstrip()}") - return RunResult(sample, "FAIL", proc.returncode, msg) - - -# --------------------------------------------------------------------------- -# Entry point -# --------------------------------------------------------------------------- +DEFAULT_SAMPLES_DIR = REPO_ROOT / "samples" / "cuda_core" +SAMPLE_NAMESPACE = "cuda_core" + +DEFAULT_TIMEOUT = _runner.DEFAULT_TIMEOUT +DependencyMetadataError = _runner.DependencyMetadataError +RunPlan = _runner.RunPlan +RunResult = _runner.RunResult +build_run_plan = _runner.build_run_plan +collect_sample_entries = _runner.collect_sample_entries +discover_samples = _runner.discover_samples +get_gpu_count = _runner.get_gpu_count +get_sample_id = _runner.get_sample_id +load_config = _runner.load_config +missing_dependencies = _runner.missing_dependencies +run_sample = _runner.run_sample + +# Kept available for runner unit tests that patch distribution metadata. +importlib = _runner.importlib def main(argv: list[str] | None = None) -> int: - parser = argparse.ArgumentParser(description="Run cuda-python samples") - parser.add_argument( - "--samples-dir", - type=Path, - default=DEFAULT_SAMPLES_DIR, - help="Directory containing one subdir per sample (default: ./samples)", - ) - parser.add_argument( - "--config", - type=Path, - default=DEFAULT_CONFIG, - help="Path to test_args.json (default: alongside this script)", + return _runner.main( + argv, + default_samples_dir=DEFAULT_SAMPLES_DIR, + default_config=DEFAULT_CONFIG, + namespace=SAMPLE_NAMESPACE, ) - parser.add_argument( - "--parallel", - type=int, - default=1, - help="Maximum number of samples to run concurrently (default: 1)", - ) - parser.add_argument( - "--filter", - action="append", - default=[], - help=("Run only samples whose directory name contains the given substring (may be repeated)"), - ) - parser.add_argument( - "--timeout", - type=int, - default=DEFAULT_TIMEOUT, - help=f"Per-sample timeout in seconds (default: {DEFAULT_TIMEOUT})", - ) - args = parser.parse_args(argv) - - samples_dir: Path = args.samples_dir.resolve() - if not samples_dir.is_dir(): - _safe_print(f"Error: samples directory not found: {samples_dir}") - return 1 - - samples = discover_samples(samples_dir) - if args.filter: - keep = [] - for sample in samples: - if any(token in sample.parent.name for token in args.filter): - keep.append(sample) - samples = keep - if not samples: - _safe_print("No samples found.") - return 1 - - config = load_config(args.config.resolve()) - gpu_count = get_gpu_count() - _safe_print(f"Detected {gpu_count} GPU(s).") - _safe_print(f"Running {len(samples)} sample(s) with parallelism={args.parallel}\n") - - plans = [build_run_plan(s, config, gpu_count, args.timeout) for s in samples] - - if args.parallel <= 1: - results = [run_sample(plan) for plan in plans] - else: - with concurrent.futures.ThreadPoolExecutor(max_workers=args.parallel) as pool: - results = list(pool.map(run_sample, plans)) - - failed = [r for r in results if r.status in {"FAIL", "TIMEOUT", "ERROR"}] - waived = [r for r in results if r.status == "WAIVED"] - passed = [r for r in results if r.status == "PASS"] - - _safe_print("\nSummary") - _safe_print(f" passed : {len(passed)}") - _safe_print(f" waived : {len(waived)}") - _safe_print(f" failed : {len(failed)}") - if failed: - for r in failed: - _safe_print(f" - {r.sample.parent.name}: {r.status} ({r.detail})") - first = next((r.return_code for r in failed if r.return_code > 0), 1) - return first - return 0 if __name__ == "__main__": diff --git a/cuda_core/tests/example_tests/test_args.json b/cuda_core/tests/example_tests/test_args.json index 7af35e54b91..dda4bdefb15 100644 --- a/cuda_core/tests/example_tests/test_args.json +++ b/cuda_core/tests/example_tests/test_args.json @@ -1,16 +1,16 @@ { - "simpleP2P": { + "cuda_core/simpleP2P": { "min_gpus": 2 }, - "simpleMultiGpu": { + "cuda_core/simpleMultiGpu": { "min_gpus": 2 }, - "reductionMultiBlockCG": { + "cuda_core/reductionMultiBlockCG": { "python": { "args": ["--cuda-include-dir=$CUDA_HOME/include:$CUDA_HOME/include/cccl"] } }, - "multiGPUGradientAverage": { + "cuda_core/multiGPUGradientAverage": { "min_gpus": 2, "python": { "launcher": ["mpirun", "--allow-run-as-root", "-np", "2"], diff --git a/cuda_core/tests/example_tests/test_run_samples.py b/cuda_core/tests/example_tests/test_run_samples.py index 865723fc1a9..8cce88c9f10 100644 --- a/cuda_core/tests/example_tests/test_run_samples.py +++ b/cuda_core/tests/example_tests/test_run_samples.py @@ -53,6 +53,68 @@ def _sample(tmp_path: Path, dependencies: str) -> Path: return sample +def _sample_entry(root: Path, category: str, name: str) -> Path: + sample_dir = root / category / name + sample_dir.mkdir(parents=True) + entry = sample_dir / f"{name}.py" + entry.write_text("print('not executed')\n", encoding="utf-8") + return entry + + +@pytest.mark.agent_authored(model="gpt-5") +def test_collection_preserves_duplicate_leaf_names_with_path_aware_ids(tmp_path: Path) -> None: + _sample_entry(tmp_path, "first", "duplicate") + _sample_entry(tmp_path, "second", "duplicate") + + entries = run_samples.collect_sample_entries(tmp_path, "cuda_bindings") + + assert list(entries) == [ + "cuda_bindings/first/duplicate", + "cuda_bindings/second/duplicate", + ] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_namespaced_config_distinguishes_duplicate_leaf_names(tmp_path: Path) -> None: + first = _sample_entry(tmp_path, "first", "duplicate") + second = _sample_entry(tmp_path, "second", "duplicate") + config = { + "cuda_bindings/first/duplicate": {"python": {"args": ["first"]}}, + "cuda_bindings/second/duplicate": {"python": {"args": ["second"]}}, + "duplicate": {"python": {"args": ["legacy"]}}, + } + + first_plan = run_samples.build_run_plan( + first, + config, + gpu_count=1, + sample_key="cuda_bindings/first/duplicate", + ) + second_plan = run_samples.build_run_plan( + second, + config, + gpu_count=1, + sample_key="cuda_bindings/second/duplicate", + ) + + assert first_plan.args == ["first"] + assert second_plan.args == ["second"] + + +@pytest.mark.agent_authored(model="gpt-5") +def test_namespaced_config_lookup_falls_back_to_legacy_leaf_key(tmp_path: Path) -> None: + entry = _sample_entry(tmp_path, "category", "legacy") + + plan = run_samples.build_run_plan( + entry, + {"legacy": {"python": {"args": ["compatible"]}}}, + gpu_count=1, + sample_key="cuda_core/category/legacy", + ) + + assert plan.args == ["compatible"] + + @pytest.mark.parametrize( ("version", "requirement", "is_met"), [ diff --git a/cuda_core/tests/example_tests/test_sample_verification.py b/cuda_core/tests/example_tests/test_sample_verification.py index 641e01b9e7d..059f11cf926 100644 --- a/cuda_core/tests/example_tests/test_sample_verification.py +++ b/cuda_core/tests/example_tests/test_sample_verification.py @@ -11,7 +11,7 @@ from .run_samples import RunPlan, run_sample REPO_ROOT = Path(__file__).resolve().parents[3] -UTILITIES_DIR = REPO_ROOT / "samples" / "Utilities" +UTILITIES_DIR = REPO_ROOT / "samples" / "cuda_core" / "Utilities" @pytest.mark.agent_authored(model="gpt-5") diff --git a/cuda_core/tests/example_tests/test_samples.py b/cuda_core/tests/example_tests/test_samples.py index e74e79dea39..fb1f79d9860 100644 --- a/cuda_core/tests/example_tests/test_samples.py +++ b/cuda_core/tests/example_tests/test_samples.py @@ -1,15 +1,6 @@ # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -""" -Pytest wrapper that runs the standalone samples under the repo-root -``samples/`` directory as part of the cuda.core test suite. - -The samples themselves are plain runnable scripts (they are periodically synced -to NVIDIA/cuda-samples). Each discovered sample is parametrized into its own -test id and executed in a subprocess via the ``run_samples`` orchestrator, so -this runs alongside the other cuda.core example tests under -``pytest cuda_core/tests``. -""" +"""Run the samples owned by cuda.core as part of its test suite.""" from __future__ import annotations @@ -20,27 +11,15 @@ from .run_samples import ( DEFAULT_CONFIG, DEFAULT_SAMPLES_DIR, + SAMPLE_NAMESPACE, build_run_plan, - discover_samples, + collect_sample_entries, get_gpu_count, load_config, run_sample, ) - -def _collect_samples() -> dict[str, object]: - """Return an ordered mapping of ``sample_name -> entry_path``. - - Sample names come from the leaf directory (e.g. ``clockNvrtc``); samples - may live either at the top of ``samples/`` or under a category - subdirectory such as ``samples/0_Introduction/``. - """ - if not DEFAULT_SAMPLES_DIR.is_dir(): - return {} - return {entry.parent.name: entry for entry in discover_samples(DEFAULT_SAMPLES_DIR)} - - -_ENTRIES = _collect_samples() +_ENTRIES = collect_sample_entries(DEFAULT_SAMPLES_DIR, SAMPLE_NAMESPACE) _SAMPLES = sorted(_ENTRIES) _CONFIG = load_config(DEFAULT_CONFIG) # Resolve GPU count once at collection time so we report the same skip reason @@ -51,16 +30,17 @@ def _collect_samples() -> dict[str, object]: # Samples launch full GPU workloads in their own subprocess, so keep them # serialized when the suite is run under pytest-run-parallel. @pytest.mark.parallel_threads_limit(1) -@pytest.mark.parametrize("sample_name", _SAMPLES) -def test_sample(sample_name: str) -> None: +@pytest.mark.parametrize("sample_key", _SAMPLES) +@pytest.mark.samples +def test_sample(sample_key: str) -> None: if _GPU_COUNT == 0: pytest.skip("No CUDA GPU detected on the test runner") - entry = _ENTRIES.get(sample_name) + entry = _ENTRIES.get(sample_key) if entry is None or not entry.is_file(): - pytest.fail(f"Sample entrypoint missing: {sample_name}") + pytest.fail(f"Sample entrypoint missing: {sample_key}") - plan = build_run_plan(entry, _CONFIG, _GPU_COUNT) + plan = build_run_plan(entry, _CONFIG, _GPU_COUNT, sample_key=sample_key) result = run_sample(plan) if result.status == "WAIVED": @@ -71,4 +51,4 @@ def test_sample(sample_name: str) -> None: # Re-print captured output through stdout/stderr so pytest's failure # capture surfaces it in the report. sys.stdout.flush() - pytest.fail(f"sample {sample_name} returned status={result.status} (rc={result.return_code}): {result.detail}") + pytest.fail(f"sample {sample_key} returned status={result.status} (rc={result.return_code}): {result.detail}") diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py new file mode 100644 index 00000000000..696df3c88c4 --- /dev/null +++ b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py @@ -0,0 +1,513 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +"""Shared discovery and execution support for cuda-python sample test suites. + +Package-owned wrappers provide their sample root, namespace, and +``test_args.json`` path. Samples are executed in isolated subprocesses. + +Exit-code contract (matches cuda-samples): + 0 -> sample passed + 2 -> sample waived (missing dependency / unmet hardware requirement) + * -> sample failed +""" + +from __future__ import annotations + +import argparse +import concurrent.futures +import importlib.metadata +import json +import os +import subprocess +import sys +import threading +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +if sys.version_info >= (3, 11): + import tomllib +else: + import tomli as tomllib + +from packaging.requirements import InvalidRequirement, Requirement +from packaging.utils import canonicalize_name +from packaging.version import InvalidVersion + +# Default timeout per sample run (seconds). Match cuda-samples. +DEFAULT_TIMEOUT = 300 +EXIT_WAIVED = 2 +_print_lock = threading.Lock() + + +def _safe_print(*args: Any, **kwargs: Any) -> None: + with _print_lock: + print(*args, **kwargs) # noqa: T201 - this module is a CLI runner + + +# --------------------------------------------------------------------------- +# Discovery +# --------------------------------------------------------------------------- + + +def discover_samples(samples_dir: Path) -> list[Path]: + """Return every ``/.py`` sample entrypoint under ``samples_dir``. + + Samples can either sit directly under ``samples_dir`` + (``//.py``) or in a category subdirectory such as + ``/0_Introduction//.py``. The Utilities directory is + excluded at any level. Matching the cuda-samples convention, exactly one + Python entrypoint per sample directory is recognised (the one whose stem + matches the directory name). + """ + samples: list[Path] = [] + + def walk(current: Path) -> None: + for child in sorted(current.iterdir()): + if not child.is_dir() or child.name == "Utilities": + continue + entry = child / f"{child.name}.py" + if entry.is_file(): + samples.append(entry) + else: + # Not a sample dir; treat it as a category and recurse. + walk(child) + + walk(samples_dir) + return samples + + +def get_sample_id(sample: Path, samples_dir: Path, namespace: str | None = None) -> str: + """Return a stable, POSIX-style ID for an entrypoint below ``samples_dir``.""" + try: + relative_dir = sample.parent.relative_to(samples_dir) + except ValueError as exc: + raise ValueError(f"sample {sample} is not below sample root {samples_dir}") from exc + + parts = ((namespace,) if namespace else ()) + relative_dir.parts + return "/".join(parts) + + +def collect_sample_entries(samples_dir: Path, namespace: str | None = None) -> dict[str, Path]: + """Return discovered entrypoints keyed by path-aware sample IDs.""" + if not samples_dir.is_dir(): + return {} + + entries: dict[str, Path] = {} + for entry in discover_samples(samples_dir): + key = get_sample_id(entry, samples_dir, namespace) + if key in entries: + raise ValueError(f"duplicate sample ID {key!r}: {entries[key]} and {entry}") + entries[key] = entry + return entries + + +# --------------------------------------------------------------------------- +# Config + GPU detection +# --------------------------------------------------------------------------- + + +def load_config(config_path: Path) -> dict[str, Any]: + if not config_path.is_file(): + return {} + try: + with open(config_path, encoding="utf-8") as fh: + data = json.load(fh) + except json.JSONDecodeError as exc: + _safe_print(f"Warning: failed to parse {config_path}: {exc}") + return {} + if not isinstance(data, dict): + _safe_print(f"Warning: {config_path} must contain a JSON object") + return {} + # Drop any keys starting with '_' (used for comments). + return {k: v for k, v in data.items() if not k.startswith("_")} + + +def get_gpu_count() -> int: + """Return the visible CUDA GPU count, conservatively 0 on error. + + Matches cuda-samples/run_tests.py::get_gpu_count(): uses ``nvidia-smi -L`` + first and falls back to ``CUDA_VISIBLE_DEVICES``. + """ + try: + smi = subprocess.run( + ["nvidia-smi", "-L"], # noqa: S607 + stdout=subprocess.PIPE, + stderr=subprocess.DEVNULL, + text=True, + check=False, + ) + if smi.returncode == 0: + return sum(1 for line in smi.stdout.splitlines() if line.strip().lower().startswith("gpu ")) + except FileNotFoundError: + pass + except OSError: + pass + + visible = os.environ.get("CUDA_VISIBLE_DEVICES", "").strip() + if visible and visible.lower() not in {"no", "none"}: + return len([v for v in visible.split(",") if v]) + return 0 + + +# --------------------------------------------------------------------------- +# PEP 723 dependency gating +# --------------------------------------------------------------------------- + +_DISTRIBUTION_PROVIDERS: dict[str, tuple[str, ...]] = { + # cuda-python is a metapackage; cuda-bindings carries the matching CUDA API + # version and is the package samples actually import. + "cuda-python": ("cuda-bindings",), + # Conda installs CuPy as ``cupy`` while PyPI uses CUDA-major-specific names. + "cupy-cuda11x": ("cupy-cuda11x", "cupy"), + "cupy-cuda12x": ("cupy-cuda12x", "cupy"), + "cupy-cuda13x": ("cupy-cuda13x", "cupy"), +} + + +class DependencyMetadataError(ValueError): + """A sample contains invalid PEP 723 dependency metadata.""" + + +def _metadata_error(example: Path, detail: str) -> DependencyMetadataError: + return DependencyMetadataError(f"{example}: invalid PEP 723 metadata: {detail}") + + +def _extract_pep723_dependencies(example: Path) -> list[str] | None: + """Return the dependency list declared via PEP 723, or ``None`` if absent.""" + lines = example.read_text(encoding="utf-8").splitlines() + starts = [index for index, line in enumerate(lines) if line == "# /// script"] + if not starts: + return None + if len(starts) != 1: + raise _metadata_error(example, "expected exactly one script block") + + metadata_lines: list[str] = [] + for line_number, line in enumerate(lines[starts[0] + 1 :], start=starts[0] + 2): + if line == "# ///": + break + if line == "#": + metadata_lines.append("") + elif line.startswith("# "): + metadata_lines.append(line[2:]) + else: + raise _metadata_error(example, f"line {line_number} inside the script block is not a comment") + else: + raise _metadata_error(example, "script block is missing its closing '# ///'") + + try: + metadata = tomllib.loads("\n".join(metadata_lines)) + except tomllib.TOMLDecodeError as exc: + raise _metadata_error(example, str(exc)) from exc + + dependencies = metadata.get("dependencies") + if dependencies is None: + return None + if not isinstance(dependencies, list) or any(not isinstance(item, str) for item in dependencies): + raise _metadata_error(example, "'dependencies' must be an array of strings") + return dependencies + + +def _distribution_providers(requirement: Requirement) -> tuple[str, ...]: + name = canonicalize_name(requirement.name) + return _DISTRIBUTION_PROVIDERS.get(name, (name,)) + + +def _provided_extras(dist: importlib.metadata.Distribution) -> set[str]: + return {canonicalize_name(extra) for extra in (dist.metadata.get_all("Provides-Extra") or ())} + + +def _distribution_mismatches(requirement: Requirement, dist: importlib.metadata.Distribution) -> list[str]: + mismatches: list[str] = [] + if requirement.specifier: + try: + version_matches = requirement.specifier.contains(dist.version) + except InvalidVersion: + mismatches.append(f"has invalid version {dist.version!r}") + else: + if not version_matches: + mismatches.append(f"version {dist.version} does not satisfy {requirement.specifier}") + + missing_extras = {canonicalize_name(extra) for extra in requirement.extras} - _provided_extras(dist) + if missing_extras: + mismatches.append(f"does not provide extra(s): {', '.join(sorted(missing_extras))}") + return mismatches + + +def missing_dependencies(example: Path) -> list[str]: + """Return useful diagnostics for unmet PEP 723 dependency requirements. + + Returns an empty list if all declared deps are present, or if no PEP 723 + block exists (no gating to perform). + """ + deps = _extract_pep723_dependencies(example) + if not deps: + return [] + + missing: list[str] = [] + for spec in deps: + try: + requirement = Requirement(spec) + except InvalidRequirement as exc: + raise _metadata_error(example, f"invalid dependency requirement {spec!r}: {exc}") from exc + + if requirement.marker is not None and not requirement.marker.evaluate({"extra": ""}): + continue + + providers = _distribution_providers(requirement) + installed: list[str] = [] + for provider in providers: + try: + dist = importlib.metadata.distribution(provider) + except importlib.metadata.PackageNotFoundError: + continue + mismatches = _distribution_mismatches(requirement, dist) + if not mismatches: + break + installed.append(f"{provider} {dist.version}: {', '.join(mismatches)}") + else: + if installed: + detail = "; ".join(installed) + else: + detail = f"no provider distribution installed (checked: {', '.join(providers)})" + missing.append(f"{requirement} ({detail})") + return missing + + +# --------------------------------------------------------------------------- +# Run plan +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class RunPlan: + sample: Path + args: list[str] + launcher: list[str] + timeout: int + skip_reason: str | None = None + sample_key: str | None = None + + +def _expand_env(value: str) -> str: + return os.path.expandvars(value) + + +def build_run_plan( + sample: Path, + config: dict[str, Any], + gpu_count: int, + timeout: int = DEFAULT_TIMEOUT, + *, + sample_key: str | None = None, +) -> RunPlan: + """Combine config overrides + GPU availability into a concrete run plan. + + The returned plan carries either a ``skip_reason`` (sample must be + waived) or the command components to invoke. + """ + # Namespaced keys prevent collisions. The leaf fallback keeps existing + # cuda-samples-style configuration files compatible. + if sample_key is not None and sample_key in config: + sample_cfg = config[sample_key] + else: + sample_cfg = config.get(sample.parent.name, {}) + + if sample_cfg.get("skip"): + return RunPlan( + sample, + [], + [], + timeout, + skip_reason="skipped in test_args.json", + sample_key=sample_key, + ) + + required_gpus = int(sample_cfg.get("min_gpus", 1)) + if required_gpus > gpu_count: + return RunPlan( + sample, + [], + [], + timeout, + skip_reason=(f"requires {required_gpus} GPU(s), only {gpu_count} available"), + sample_key=sample_key, + ) + + python_cfg = sample_cfg.get("python", {}) + raw_args = python_cfg.get("args", []) or [] + raw_launcher = python_cfg.get("launcher", []) or [] + if not isinstance(raw_args, list) or not isinstance(raw_launcher, list): + return RunPlan( + sample, + [], + [], + timeout, + skip_reason="invalid config: 'args' and 'launcher' must be lists", + sample_key=sample_key, + ) + + return RunPlan( + sample=sample, + args=[_expand_env(str(a)) for a in raw_args], + launcher=[_expand_env(str(a)) for a in raw_launcher], + timeout=timeout, + sample_key=sample_key, + ) + + +# --------------------------------------------------------------------------- +# Execution +# --------------------------------------------------------------------------- + + +@dataclass +class RunResult: + sample: Path + status: str # "PASS", "FAIL", "WAIVED", "TIMEOUT", "ERROR" + return_code: int + detail: str = "" + sample_key: str | None = None + + +def run_sample(plan: RunPlan) -> RunResult: + sample = plan.sample + name = plan.sample_key or sample.parent.name + + if plan.skip_reason is not None: + _safe_print(f" [WAIVED] {name}: {plan.skip_reason}") + return RunResult(sample, "WAIVED", EXIT_WAIVED, plan.skip_reason, plan.sample_key) + + try: + missing = missing_dependencies(sample) + except DependencyMetadataError as exc: + reason = str(exc) + _safe_print(f" [ERROR] {name}: {reason}") + return RunResult(sample, "ERROR", -1, reason, plan.sample_key) + if missing: + reason = f"unmet package requirement(s): {'; '.join(missing)}" + _safe_print(f" [WAIVED] {name}: {reason}") + return RunResult(sample, "WAIVED", EXIT_WAIVED, reason, plan.sample_key) + + cmd = list(plan.launcher) + [sys.executable, str(sample)] + list(plan.args) + _safe_print(f" [RUN ] {name}: {' '.join(cmd)}") + + try: + proc = subprocess.run( # noqa: S603 + cmd, + cwd=str(sample.parent), + capture_output=True, + text=True, + timeout=plan.timeout, + check=False, + ) + except subprocess.TimeoutExpired: + _safe_print(f" [TIMEOUT] {name}: exceeded {plan.timeout}s") + return RunResult(sample, "TIMEOUT", -1, f"timed out after {plan.timeout}s", plan.sample_key) + except OSError as exc: + _safe_print(f" [ERROR] {name}: {exc}") + return RunResult(sample, "ERROR", -1, str(exc), plan.sample_key) + + if proc.returncode == 0: + _safe_print(f" [PASS ] {name}") + return RunResult(sample, "PASS", 0, sample_key=plan.sample_key) + if proc.returncode == EXIT_WAIVED: + _safe_print(f" [WAIVED] {name}: sample reported waived") + return RunResult(sample, "WAIVED", EXIT_WAIVED, "sample-reported", plan.sample_key) + + # Fail. Surface output so CI logs are diagnosable. + msg = f"return code {proc.returncode}" + _safe_print(f" [FAIL ] {name}: {msg}") + if proc.stdout: + _safe_print(f"---- stdout ({name}) ----\n{proc.stdout.rstrip()}") + if proc.stderr: + _safe_print(f"---- stderr ({name}) ----\n{proc.stderr.rstrip()}") + return RunResult(sample, "FAIL", proc.returncode, msg, plan.sample_key) + + +# --------------------------------------------------------------------------- +# Entry point +# --------------------------------------------------------------------------- + + +def main( + argv: list[str] | None = None, + *, + default_samples_dir: Path, + default_config: Path, + namespace: str | None = None, +) -> int: + parser = argparse.ArgumentParser(description="Run cuda-python samples") + parser.add_argument( + "--samples-dir", + type=Path, + default=default_samples_dir, + help=f"Directory containing package-owned samples (default: {default_samples_dir})", + ) + parser.add_argument( + "--config", + type=Path, + default=default_config, + help=f"Path to test_args.json (default: {default_config})", + ) + parser.add_argument( + "--parallel", + type=int, + default=1, + help="Maximum number of samples to run concurrently (default: 1)", + ) + parser.add_argument( + "--filter", + action="append", + default=[], + help=("Run only samples whose ID contains the given substring (may be repeated)"), + ) + parser.add_argument( + "--timeout", + type=int, + default=DEFAULT_TIMEOUT, + help=f"Per-sample timeout in seconds (default: {DEFAULT_TIMEOUT})", + ) + args = parser.parse_args(argv) + + samples_dir: Path = args.samples_dir.resolve() + if not samples_dir.is_dir(): + _safe_print(f"Error: samples directory not found: {samples_dir}") + return 1 + + entries = collect_sample_entries(samples_dir, namespace) + if args.filter: + entries = {key: sample for key, sample in entries.items() if any(token in key for token in args.filter)} + if not entries: + _safe_print("No samples found.") + return 1 + + config = load_config(args.config.resolve()) + gpu_count = get_gpu_count() + _safe_print(f"Detected {gpu_count} GPU(s).") + _safe_print(f"Running {len(entries)} sample(s) with parallelism={args.parallel}\n") + + plans = [build_run_plan(sample, config, gpu_count, args.timeout, sample_key=key) for key, sample in entries.items()] + + if args.parallel <= 1: + results = [run_sample(plan) for plan in plans] + else: + with concurrent.futures.ThreadPoolExecutor(max_workers=args.parallel) as pool: + results = list(pool.map(run_sample, plans)) + + failed = [r for r in results if r.status in {"FAIL", "TIMEOUT", "ERROR"}] + waived = [r for r in results if r.status == "WAIVED"] + passed = [r for r in results if r.status == "PASS"] + + _safe_print("\nSummary") + _safe_print(f" passed : {len(passed)}") + _safe_print(f" waived : {len(waived)}") + _safe_print(f" failed : {len(failed)}") + if failed: + for r in failed: + name = r.sample_key or r.sample.parent.name + _safe_print(f" - {name}: {r.status} ({r.detail})") + first = next((r.return_code for r in failed if r.return_code > 0), 1) + return first + return 0 diff --git a/cuda_python_test_helpers/pyproject.toml b/cuda_python_test_helpers/pyproject.toml index 85652b61c50..d1e6e43478d 100644 --- a/cuda_python_test_helpers/pyproject.toml +++ b/cuda_python_test_helpers/pyproject.toml @@ -13,6 +13,10 @@ readme = {file = "README.md", content-type = "text/markdown"} authors = [{ name = "NVIDIA Corporation" }] license = "Apache-2.0" requires-python = ">=3.9" +dependencies = [ + "packaging>=24", + "tomli>=2; python_version < '3.11'", +] classifiers = [ "Programming Language :: Python :: 3 :: Only", "Operating System :: POSIX :: Linux", diff --git a/pixi.toml b/pixi.toml index ed78119b47f..8feca4785d8 100644 --- a/pixi.toml +++ b/pixi.toml @@ -53,13 +53,26 @@ cmd = [ 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_core" -e "$PIXI_ENVIRONMENT_NAME" test', ] -[target.linux.tasks.test-samples] +[target.linux.tasks.test-samples-bindings] +cmd = [ + "bash", + "-c", + 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_bindings" test-samples', +] + +[target.linux.tasks.test-samples-core] cmd = [ "bash", "-c", 'pixi run --manifest-path "$PIXI_PROJECT_ROOT/cuda_core" test-samples', ] +[target.linux.tasks.test-samples] +depends-on = [ + { task = "test-samples-bindings" }, + { task = "test-samples-core" }, +] + [target.linux.tasks.test] depends-on = [ { task = "test-pathfinder" }, diff --git a/pytest.ini b/pytest.ini index d241c6d3746..3297637ead8 100644 --- a/pytest.ini +++ b/pytest.ini @@ -16,7 +16,7 @@ markers = pathfinder: tests for cuda_pathfinder bindings: tests for cuda_bindings core: tests for cuda_core - samples: tests for the standalone samples under ./samples (run within the cuda_core suite) + samples: tests for package-owned standalone samples under ./samples cython: cython tests smoke: meta-level smoke tests # Keep this authorship marker registry in sync across all pytest config roots. diff --git a/ruff.toml b/ruff.toml index 395ada3398f..5e4158d2df8 100644 --- a/ruff.toml +++ b/ruff.toml @@ -122,7 +122,7 @@ inline-quotes = "double" "N803", # CUDA naming conventions (argument names) "N806", # non-lowercase variable in function (e.g. d_A, h_blockSums) "N816", # mixed-case variable in global scope - "N999", # invalid module name (samples/Utilities is a directory, not a module) + "N999", # invalid module name (package-local Utilities directories are not modules) "RUF001", # ambiguous unicode in strings (math symbols like ``×`` in shape annotations) "RUF003", # ambiguous unicode in comments (same as RUF001) "RUF059", # unused unpacked variable (common in GL / kernel samples returning tuples) diff --git a/samples/README.md b/samples/README.md new file mode 100644 index 00000000000..4a846be84b9 --- /dev/null +++ b/samples/README.md @@ -0,0 +1,40 @@ +# CUDA Python Samples + +The samples are grouped by the primary API they demonstrate: + +- [`cuda_bindings/`](cuda_bindings/) contains low-level examples that call + `cuda.bindings` driver, runtime, NVRTC, or NVML APIs directly. +- [`cuda_core/`](cuda_core/) contains high-level examples built primarily with + `cuda.core` and `cuda.compute`. + +Some `cuda.core` samples use individual `cuda.bindings` calls where the +high-level API does not yet expose the required operation. They remain in the +`cuda_core` collection because that is the API driving the sample workflow. + +## Running a Sample + +Each sample has its own `README.md` and `requirements.txt`. Run its install and +launch commands from that sample's directory. From the repository root, for +example: + +```bash +cd samples/cuda_core/vectorAdd +pip install -r requirements.txt +python vectorAdd.py +``` + +Many samples require a supported NVIDIA GPU and CUDA Toolkit. See the +individual README for hardware, toolkit, and optional dependency requirements. + +## Shared Utilities + +Utilities are private implementation helpers for their respective sample +collections: + +- [`cuda_bindings/Utilities/`](cuda_bindings/Utilities/) supports low-level + bindings samples. +- [`cuda_core/Utilities/`](cuda_core/Utilities/) supports high-level core + samples. + +They are not installed as part of the CUDA Python packages and should not be +treated as public APIs. diff --git a/samples/0_Introduction/clockNvrtc/README.md b/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md similarity index 97% rename from samples/0_Introduction/clockNvrtc/README.md rename to samples/cuda_bindings/0_Introduction/clockNvrtc/README.md index 5b1ea520fbc..4981bb20e32 100644 --- a/samples/0_Introduction/clockNvrtc/README.md +++ b/samples/cuda_bindings/0_Introduction/clockNvrtc/README.md @@ -40,7 +40,7 @@ Waives on 32-bit ARM (``armv7l``), where the sample isn't supported. - `cuLaunchKernel(func, gx, gy, gz, bx, by, bz, sharedMemBytes, stream, args, extra)` - launch a kernel - `cuCtxSynchronize` - wait for all outstanding device work -### From `cuda_bindings_utils` (samples/Utilities/) +### From `cuda_bindings_utils` (`samples/cuda_bindings/Utilities/`) - `KernelHelper(source, dev_id)` - compile a source string with NVRTC and load the module - `check_cuda_errors(result)` - unwrap ``(status, *values)`` tuples returned by cuda.bindings diff --git a/samples/0_Introduction/clockNvrtc/clockNvrtc.py b/samples/cuda_bindings/0_Introduction/clockNvrtc/clockNvrtc.py similarity index 98% rename from samples/0_Introduction/clockNvrtc/clockNvrtc.py rename to samples/cuda_bindings/0_Introduction/clockNvrtc/clockNvrtc.py index 71afa79e575..2c38f764cd9 100644 --- a/samples/0_Introduction/clockNvrtc/clockNvrtc.py +++ b/samples/cuda_bindings/0_Introduction/clockNvrtc/clockNvrtc.py @@ -53,7 +53,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/0_Introduction/clockNvrtc/requirements.txt b/samples/cuda_bindings/0_Introduction/clockNvrtc/requirements.txt similarity index 100% rename from samples/0_Introduction/clockNvrtc/requirements.txt rename to samples/cuda_bindings/0_Introduction/clockNvrtc/requirements.txt diff --git a/samples/0_Introduction/simpleCubemapTexture/README.md b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md similarity index 97% rename from samples/0_Introduction/simpleCubemapTexture/README.md rename to samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md index 7f3f3472de9..57fdc0c7644 100644 --- a/samples/0_Introduction/simpleCubemapTexture/README.md +++ b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/README.md @@ -7,7 +7,7 @@ a bindless ``cudaTextureObject_t``, and samples it from a kernel using the ``texCubemap(tex, cx, cy, cz)`` intrinsic. Also demonstrates 3D memory transfers with ``cudaMemcpy3DParms`` and ``cudaMemcpy3D``. -This is currently the only sample in ``/samples`` that teaches CUDA +This is currently the only sample in ``/samples/cuda_bindings`` that teaches CUDA texture objects, cubemap arrays, or ``cudaMemcpy3D``. The kernel walks all 6 cubemap faces, converts each pixel to a 3D diff --git a/samples/0_Introduction/simpleCubemapTexture/requirements.txt b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/requirements.txt similarity index 100% rename from samples/0_Introduction/simpleCubemapTexture/requirements.txt rename to samples/cuda_bindings/0_Introduction/simpleCubemapTexture/requirements.txt diff --git a/samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py similarity index 98% rename from samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py rename to samples/cuda_bindings/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py index 97df2f6493a..56fb993383d 100644 --- a/samples/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py +++ b/samples/cuda_bindings/0_Introduction/simpleCubemapTexture/simpleCubemapTexture.py @@ -39,7 +39,7 @@ ``cudaMemcpy3D``, and the CUDA texture descriptor knobs (``cudaTextureDesc``: normalized coords, linear filter, wrap addressing). -This is currently the only sample in ``/samples`` that teaches CUDA +This is currently the only sample in ``/samples/cuda_bindings`` that teaches CUDA texture objects, cubemap arrays, or ``cudaMemcpy3D``. """ @@ -48,7 +48,7 @@ import time from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/0_Introduction/systemWideAtomics/README.md b/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md similarity index 97% rename from samples/0_Introduction/systemWideAtomics/README.md rename to samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md index 979aa578916..11cd1bd4600 100644 --- a/samples/0_Introduction/systemWideAtomics/README.md +++ b/samples/cuda_bindings/0_Introduction/systemWideAtomics/README.md @@ -16,7 +16,7 @@ The kernel spins over `LOOP_NUM` iterations per thread, applying each operation against a 10-element shared array. The host then runs the equivalent scalar reference computation and verifies every slot. -This is the only sample in `/samples` that teaches **system-wide** atomic +This is the only sample in `/samples/cuda_bindings` that teaches **system-wide** atomic operations (as opposed to device-scope ones like the histogram sample) or the full atomic surface (Exch / Min / Max / Inc / Dec / CAS / And / Or / Xor). diff --git a/samples/0_Introduction/systemWideAtomics/requirements.txt b/samples/cuda_bindings/0_Introduction/systemWideAtomics/requirements.txt similarity index 100% rename from samples/0_Introduction/systemWideAtomics/requirements.txt rename to samples/cuda_bindings/0_Introduction/systemWideAtomics/requirements.txt diff --git a/samples/0_Introduction/systemWideAtomics/systemWideAtomics.py b/samples/cuda_bindings/0_Introduction/systemWideAtomics/systemWideAtomics.py similarity index 99% rename from samples/0_Introduction/systemWideAtomics/systemWideAtomics.py rename to samples/cuda_bindings/0_Introduction/systemWideAtomics/systemWideAtomics.py index 4205337ed33..b724f28836d 100644 --- a/samples/0_Introduction/systemWideAtomics/systemWideAtomics.py +++ b/samples/cuda_bindings/0_Introduction/systemWideAtomics/systemWideAtomics.py @@ -57,7 +57,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/0_Introduction/vectorAddDriverApi/README.md b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md similarity index 89% rename from samples/0_Introduction/vectorAddDriverApi/README.md rename to samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md index f1fb387d40f..b4e4eefa7ba 100644 --- a/samples/0_Introduction/vectorAddDriverApi/README.md +++ b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/README.md @@ -13,10 +13,10 @@ cuInit -> cuDeviceGet -> cuCtxCreate ``` This is the low-level equivalent of the higher-level -[`samples/vectorAdd/`](../../vectorAdd/) sample, which does the same +[`samples/cuda_core/vectorAdd/`](../../../cuda_core/vectorAdd/) sample, which does the same computation with the ``cuda.core`` API. Both are useful: -- Use ``samples/vectorAdd/`` when you want an idiomatic, Pythonic launch. +- Use ``samples/cuda_core/vectorAdd/`` when you want an idiomatic, Pythonic launch. - Use this sample to understand what those higher-level abstractions do under the hood, or when you need direct control over the driver API (custom contexts, explicit stream/module lifetime, etc.). @@ -48,7 +48,7 @@ prerequisite for most driver-API patterns). - `cuLaunchKernel` - `CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING` -### From `cuda_bindings_utils` (samples/Utilities/) +### From `cuda_bindings_utils` (`samples/cuda_bindings/Utilities/`) - `KernelHelper(source, dev_id)` - NVRTC compile + load - `check_cuda_errors(result)` - unwrap `(status, *values)` tuples @@ -98,5 +98,5 @@ Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) -- [`samples/vectorAdd/`](../../vectorAdd/) - the high-level `cuda.core` equivalent +- [`samples/cuda_core/vectorAdd/`](../../../cuda_core/vectorAdd/) - the high-level `cuda.core` equivalent - [CUDA Driver API Reference](https://docs.nvidia.com/cuda/cuda-driver-api/index.html) diff --git a/samples/0_Introduction/vectorAddDriverApi/requirements.txt b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/requirements.txt similarity index 100% rename from samples/0_Introduction/vectorAddDriverApi/requirements.txt rename to samples/cuda_bindings/0_Introduction/vectorAddDriverApi/requirements.txt diff --git a/samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py similarity index 96% rename from samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py rename to samples/cuda_bindings/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py index 8f162ec4d6c..4a534a20940 100644 --- a/samples/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py +++ b/samples/cuda_bindings/0_Introduction/vectorAddDriverApi/vectorAddDriverApi.py @@ -32,8 +32,8 @@ Vector addition with the raw CUDA Driver API The canonical "hello world" for ``cuda.bindings.driver``. This is the same -element-wise ``C = A + B`` computation shown in the top-level -``samples/vectorAdd/`` sample, but implemented at the driver-API layer: +element-wise ``C = A + B`` computation shown in the +``samples/cuda_core/vectorAdd/`` sample, but implemented at the driver-API layer: * ``cuInit`` -> ``cuDeviceGet`` -> ``cuCtxCreate`` (explicit context) * ``cuMemAlloc`` / ``cuMemcpyHtoD`` / ``cuMemcpyDtoH`` / ``cuMemFree`` @@ -53,7 +53,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/0_Introduction/vectorAddMmap/README.md b/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md similarity index 97% rename from samples/0_Introduction/vectorAddMmap/README.md rename to samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md index 7c68ff28354..009cdb309eb 100644 --- a/samples/0_Introduction/vectorAddMmap/README.md +++ b/samples/cuda_bindings/0_Introduction/vectorAddMmap/README.md @@ -4,7 +4,7 @@ Vector add ``C = A + B``, but each device buffer is built by hand out of per-device physical backings stitched into a single contiguous virtual -address range. This is the only sample in ``/samples`` that teaches the +address range. This is the only sample in ``/samples/cuda_bindings`` that teaches the CUDA Virtual Memory Management (VMM) API. The core VMM flow: diff --git a/samples/0_Introduction/vectorAddMmap/requirements.txt b/samples/cuda_bindings/0_Introduction/vectorAddMmap/requirements.txt similarity index 100% rename from samples/0_Introduction/vectorAddMmap/requirements.txt rename to samples/cuda_bindings/0_Introduction/vectorAddMmap/requirements.txt diff --git a/samples/0_Introduction/vectorAddMmap/vectorAddMmap.py b/samples/cuda_bindings/0_Introduction/vectorAddMmap/vectorAddMmap.py similarity index 99% rename from samples/0_Introduction/vectorAddMmap/vectorAddMmap.py rename to samples/cuda_bindings/0_Introduction/vectorAddMmap/vectorAddMmap.py index 5cbfc01fade..5d903c03c09 100644 --- a/samples/0_Introduction/vectorAddMmap/vectorAddMmap.py +++ b/samples/cuda_bindings/0_Introduction/vectorAddMmap/vectorAddMmap.py @@ -59,7 +59,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md similarity index 94% rename from samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md rename to samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md index 7ccbda53a3f..f3108ebf4c9 100644 --- a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/README.md +++ b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/README.md @@ -23,7 +23,7 @@ Two demos are run back to back on a 1M-element vector add: events to show the steady-state cost. This is the low-level counterpart to the high-level -[`samples/memoryResources/`](../../memoryResources/) sample, whose +[`samples/cuda_core/memoryResources/`](../../../cuda_core/memoryResources/) sample, whose ``DeviceMemoryResource`` sits on top of the same pool but hides the attribute knobs. @@ -106,5 +106,5 @@ Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` runtime API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/runtime.html) -- [`samples/memoryResources/`](../../memoryResources/) - the high-level `cuda.core` equivalent +- [`samples/cuda_core/memoryResources/`](../../../cuda_core/memoryResources/) - the high-level `cuda.core` equivalent - [CUDA Runtime API — Stream Ordered Memory Allocator](https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY__POOLS.html) diff --git a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt similarity index 100% rename from samples/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt rename to samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/requirements.txt diff --git a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py similarity index 98% rename from samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py rename to samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py index 24ec53cf7ea..49ffb9473ce 100644 --- a/samples/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py +++ b/samples/cuda_bindings/2_Concepts_and_Techniques/streamOrderedAllocation/streamOrderedAllocation.py @@ -45,7 +45,7 @@ during the steady-state loop, then time the loop with CUDA events. This is the low-level counterpart to the high-level -[`samples/memoryResources/`](../../memoryResources/) sample, whose +[`samples/cuda_core/memoryResources/`](../../../cuda_core/memoryResources/) sample, whose ``DeviceMemoryResource`` sits on top of the same pool but hides the attribute knobs. @@ -59,7 +59,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/3_CUDA_Features/cudaGraphsManualNodes/README.md b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md similarity index 91% rename from samples/3_CUDA_Features/cudaGraphsManualNodes/README.md rename to samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md index f4bfafeadd2..a9e00059325 100644 --- a/samples/3_CUDA_Features/cudaGraphsManualNodes/README.md +++ b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/README.md @@ -15,9 +15,9 @@ Both paths produce a `cudaGraph_t`, are instantiated (`cudaGraphInstantiate`), cloned (`cudaGraphClone`), and replayed several times (`cudaGraphLaunch`). -The high-level counterpart in `/samples` is -[`samples/cudaGraphs/`](../../cudaGraphs/), which teaches stream capture -at the `cuda.core` layer. This sample is the only place in `/samples` +The high-level counterpart in `/samples/cuda_core` is +[`samples/cuda_core/cudaGraphs/`](../../../cuda_core/cudaGraphs/), which teaches stream capture +at the `cuda.core` layer. This sample is the only place in `/samples/cuda_bindings` that shows the **manual node-by-node construction** pattern — useful when you're programmatically building a graph without a driving stream. @@ -108,5 +108,5 @@ Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` runtime API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/runtime.html) -- [`samples/cudaGraphs/`](../../cudaGraphs/) - the high-level `cuda.core` equivalent (stream capture only) +- [`samples/cuda_core/cudaGraphs/`](../../../cuda_core/cudaGraphs/) - the high-level `cuda.core` equivalent (stream capture only) - [CUDA C++ Programming Guide — CUDA Graphs](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cuda-graphs) diff --git a/samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py similarity index 98% rename from samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py rename to samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py index 838f3a09d88..f81befb6d1d 100644 --- a/samples/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py +++ b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/cudaGraphsManualNodes.py @@ -44,8 +44,8 @@ (``cudaGraphInstantiate``), cloned (``cudaGraphClone``), and replayed several times (``cudaGraphLaunch``). -The high-level counterpart in ``/samples`` is -[`samples/cudaGraphs/`](../../cudaGraphs/), which teaches stream capture at +The high-level counterpart in ``/samples/cuda_core`` is +[`samples/cuda_core/cudaGraphs/`](../../../cuda_core/cudaGraphs/), which teaches stream capture at the ``cuda.core`` layer. This sample is the *only* place that shows the manual-node-construction pattern (useful when you're building a graph programmatically without a driving stream). @@ -56,7 +56,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt b/samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt similarity index 100% rename from samples/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt rename to samples/cuda_bindings/3_CUDA_Features/cudaGraphsManualNodes/requirements.txt diff --git a/samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md similarity index 95% rename from samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md rename to samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md index 8daa7dd97d6..1f1baf6b1b6 100644 --- a/samples/3_CUDA_Features/globalToShmemAsyncCopy/README.md +++ b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md @@ -19,7 +19,7 @@ primitives: The sample selects a variant via ``--kernel=N`` (default 0), computes the reference ``C = A * B`` on the host, and reports GFLOPS. This is the only -sample in ``/samples`` that teaches ``cuda::memcpy_async``, +sample in ``/samples/cuda_bindings`` that teaches ``cuda::memcpy_async``, ``cuda::pipeline``, or the arrive/wait barrier patterns — the low-level async-copy machinery that ``cuda.core``'s newer APIs sit on top of. @@ -111,7 +111,7 @@ Result = PASS ## See Also - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) -- [`samples/matrixMulSharedMem/`](../../matrixMulSharedMem/) - basic tiled GEMM (no async copy) +- [`samples/cuda_core/matrixMulSharedMem/`](../../../cuda_core/matrixMulSharedMem/) - basic tiled GEMM (no async copy) - [CUDA C++ Programming Guide — Asynchronous Data Copies](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#asynchronous-data-copies) - [`libcudacxx` `cuda::memcpy_async`](https://nvidia.github.io/libcudacxx/extended_api/asynchronous_operations/memcpy_async.html) - [`libcudacxx` `cuda::pipeline`](https://nvidia.github.io/libcudacxx/extended_api/synchronization_primitives/pipeline.html) diff --git a/samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py similarity index 99% rename from samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py rename to samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py index ce7d5c3be01..903f4dff0c7 100644 --- a/samples/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py +++ b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/globalToShmemAsyncCopy.py @@ -47,14 +47,14 @@ The sample runs one variant selected via --kernel=N (default 0), computes the reference C = A * B on the host, and reports GFLOPS. This is the only -place in /samples that teaches cuda::memcpy_async, cuda::pipeline, or the +place in /samples/cuda_bindings that teaches cuda::memcpy_async, cuda::pipeline, or the arrive-wait barrier patterns. """ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) import ctypes diff --git a/samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt similarity index 100% rename from samples/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt rename to samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/requirements.txt diff --git a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md similarity index 92% rename from samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md rename to samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md index ed7960a1ec0..205f6e268c0 100644 --- a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md +++ b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/README.md @@ -17,9 +17,9 @@ The device-side building blocks are: across blocks - `gpuScaleVectorAndSaxpy`, `gpuCopyVector` -- CG bookkeeping -This is the only end-to-end numerical solver in `/samples` that uses +This is the only end-to-end numerical solver in `/samples/cuda_bindings` that uses grid-level cooperative synchronization. The simpler -[`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) uses the +[`samples/cuda_core/reductionMultiBlockCG/`](../../../cuda_core/reductionMultiBlockCG/) uses the same underlying feature for a plain reduction. Waives with exit code 2 on Darwin / QNX / armv7l, on devices without @@ -113,5 +113,5 @@ Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) -- [`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) - simpler cooperative-launch demo +- [`samples/cuda_core/reductionMultiBlockCG/`](../../../cuda_core/reductionMultiBlockCG/) - simpler cooperative-launch demo - [CUDA C++ Programming Guide — Cooperative Groups](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#cooperative-groups) diff --git a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py similarity index 98% rename from samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py rename to samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py index b3c975de4e4..3ca7d4c18d4 100644 --- a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py +++ b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/conjugateGradientMultiBlockCG.py @@ -49,8 +49,9 @@ lives in one cooperative kernel, we avoid host round-trips between iterations. -The sample is the only end-to-end numerical solver in ``/samples`` that -uses ``grid.sync()``. The simpler [`samples/reductionMultiBlockCG/`](../../reductionMultiBlockCG/) +The sample is the only end-to-end numerical solver in ``/samples/cuda_bindings`` that +uses ``grid.sync()``. The simpler +[`samples/cuda_core/reductionMultiBlockCG/`](../../../cuda_core/reductionMultiBlockCG/) uses the same underlying feature for a plain reduction. Waives with exit code 2 on Darwin / QNX / armv7l, on devices without @@ -64,7 +65,7 @@ from pathlib import Path from random import random -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) try: diff --git a/samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt b/samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt similarity index 100% rename from samples/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt rename to samples/cuda_bindings/4_CUDA_Libraries/conjugateGradientMultiBlockCG/requirements.txt diff --git a/samples/4_CUDA_Libraries/nvidiaSmi/README.md b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md similarity index 94% rename from samples/4_CUDA_Libraries/nvidiaSmi/README.md rename to samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md index f7e23ef26d3..27f3c67539a 100644 --- a/samples/4_CUDA_Libraries/nvidiaSmi/README.md +++ b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/README.md @@ -11,7 +11,7 @@ the raw ``cuda.bindings.nvml`` module. Prints a compact table with: memory used / total, GPU utilization, compute mode This is the canonical low-level demo for ``cuda.bindings.nvml``. The -high-level counterpart is [`samples/systemInfo/`](../../systemInfo/), which +high-level counterpart is [`samples/cuda_core/systemInfo/`](../../../cuda_core/systemInfo/), which uses ``cuda.core.system`` (which itself wraps NVML). Fields that aren't supported on a particular GPU (e.g. fan speed on server @@ -102,5 +102,5 @@ Content depends on the system. - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` NVML API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/nvml.html) -- [`samples/systemInfo/`](../../systemInfo/) - the high-level `cuda.core.system` equivalent +- [`samples/cuda_core/systemInfo/`](../../../cuda_core/systemInfo/) - the high-level `cuda.core.system` equivalent - [NVML Reference](https://docs.nvidia.com/deploy/nvml-api/index.html) diff --git a/samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py similarity index 99% rename from samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py rename to samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py index 94e63718917..dcd04a385bb 100644 --- a/samples/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py +++ b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/nvidiaSmi.py @@ -41,7 +41,7 @@ This sample is the canonical low-level demo for ``cuda.bindings.nvml``. The high-level counterpart lives in -[`samples/systemInfo/`](../../systemInfo/), which wraps NVML through +[`samples/cuda_core/systemInfo/`](../../../cuda_core/systemInfo/), which wraps NVML through ``cuda.core.system``. Note: fields like fan speed, power draw, ECC state and display state come diff --git a/samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt b/samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/requirements.txt similarity index 100% rename from samples/4_CUDA_Libraries/nvidiaSmi/requirements.txt rename to samples/cuda_bindings/4_CUDA_Libraries/nvidiaSmi/requirements.txt diff --git a/samples/cuda_bindings/Utilities/README.md b/samples/cuda_bindings/Utilities/README.md new file mode 100644 index 00000000000..3c983d1947c --- /dev/null +++ b/samples/cuda_bindings/Utilities/README.md @@ -0,0 +1,35 @@ +# CUDA Bindings Sample Utilities + +`cuda_bindings_utils.py` contains shared boilerplate for samples that call the +low-level `cuda.bindings` APIs directly. It provides: + +- CUDA error tuple checking and result unwrapping +- NVRTC compilation and CUDA module loading through `KernelHelper` +- Runtime and driver API device selection +- Command-line flag helpers used by CUDA sample ports +- Consistent requirement waivers using exit code 2 + +## Using the Helpers + +Bindings samples retain the CUDA Samples category directories, so a sample +adds the namespace-local `Utilities` directory to `sys.path` as follows: + +```python +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) +from cuda_bindings_utils import KernelHelper, check_cuda_errors +``` + +See [`clockNvrtc`](../0_Introduction/clockNvrtc/) for a complete example. +Install dependencies from the individual sample directory before running it: + +```bash +cd samples/cuda_bindings/0_Introduction/clockNvrtc +pip install -r requirements.txt +python clockNvrtc.py +``` + +These helpers support the samples and are not part of the public +`cuda.bindings` API. diff --git a/samples/Utilities/cuda_bindings_utils.py b/samples/cuda_bindings/Utilities/cuda_bindings_utils.py similarity index 100% rename from samples/Utilities/cuda_bindings_utils.py rename to samples/cuda_bindings/Utilities/cuda_bindings_utils.py diff --git a/samples/extra/isoFdModelling/README.md b/samples/cuda_bindings/extra/isoFdModelling/README.md similarity index 95% rename from samples/extra/isoFdModelling/README.md rename to samples/cuda_bindings/extra/isoFdModelling/README.md index d9fe4ca80c8..bb610d855d6 100644 --- a/samples/extra/isoFdModelling/README.md +++ b/samples/cuda_bindings/extra/isoFdModelling/README.md @@ -17,7 +17,7 @@ using vectorized ``float2`` loads plus shared memory tiling for the horizontal neighborhood, and register accumulation for the vertical neighborhood — a fairly realistic HPC kernel. -This is the only sample in ``/samples`` that teaches the multi-GPU HPC +This is the only sample in ``/samples/cuda_bindings`` that teaches the multi-GPU HPC pattern: per-device contexts, halo exchange via ``cuMemcpyPeerAsync``, and compute/comm overlap on two streams per device. @@ -107,5 +107,5 @@ Two or more GPUs with Peer-to-Peer access capability are required - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) -- [`samples/simpleP2P/`](../../simpleP2P/) - basic peer-to-peer access +- [`samples/cuda_core/simpleP2P/`](../../../cuda_core/simpleP2P/) - basic peer-to-peer access - [CUDA C++ Programming Guide — Peer-to-Peer Memory Access](https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#peer-to-peer-memory-access) diff --git a/samples/extra/isoFdModelling/isoFdModelling.py b/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py similarity index 99% rename from samples/extra/isoFdModelling/isoFdModelling.py rename to samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py index 79ea940bf41..c01e75337f4 100644 --- a/samples/extra/isoFdModelling/isoFdModelling.py +++ b/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py @@ -37,7 +37,7 @@ timesteps. Compute (streamCenter) and halo exchange (streamHalo) run on separate streams so the halo copies overlap with the interior update. -This is the only sample in /samples that teaches the multi-GPU HPC +This is the only sample in /samples/cuda_bindings that teaches the multi-GPU HPC pattern: per-device contexts, halo exchange via cuMemcpyPeerAsync, and compute/comm overlap on two streams per device. @@ -49,7 +49,7 @@ import sys from pathlib import Path -# Add samples/Utilities/ to the import path so we can use the shared bindings helpers. +# Add samples/cuda_bindings/Utilities/ to the import path for shared bindings helpers. sys.path.insert(0, str(Path(__file__).resolve().parent.parent.parent / "Utilities")) import time diff --git a/samples/extra/isoFdModelling/requirements.txt b/samples/cuda_bindings/extra/isoFdModelling/requirements.txt similarity index 100% rename from samples/extra/isoFdModelling/requirements.txt rename to samples/cuda_bindings/extra/isoFdModelling/requirements.txt diff --git a/samples/extra/jitProgram/README.md b/samples/cuda_bindings/extra/jitProgram/README.md similarity index 93% rename from samples/extra/jitProgram/README.md rename to samples/cuda_bindings/extra/jitProgram/README.md index dc2c959862e..02d0bd83e6d 100644 --- a/samples/extra/jitProgram/README.md +++ b/samples/cuda_bindings/extra/jitProgram/README.md @@ -4,7 +4,7 @@ Walks through the raw NVRTC + driver-API pipeline for compiling and launching a CUDA kernel. This is the "under the hood" companion to the -higher-level [`samples/jitLtoLinking/`](../../jitLtoLinking/) sample: +higher-level [`samples/cuda_core/jitLtoLinking/`](../../../cuda_core/jitLtoLinking/) sample: ``jitLtoLinking`` uses ``cuda.core.Program`` and ``cuda.core.Linker``; this sample makes the individual NVRTC + ``cuModule*`` calls those higher-level abstractions wrap. @@ -102,4 +102,4 @@ Done - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.bindings` NVRTC API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/nvrtc.html) - [`cuda.bindings` driver API](https://nvidia.github.io/cuda-python/cuda-bindings/latest/module/driver.html) -- [`samples/jitLtoLinking/`](../../jitLtoLinking/) - the high-level `cuda.core` equivalent +- [`samples/cuda_core/jitLtoLinking/`](../../../cuda_core/jitLtoLinking/) - the high-level `cuda.core` equivalent diff --git a/samples/extra/jitProgram/jitProgram.py b/samples/cuda_bindings/extra/jitProgram/jitProgram.py similarity index 98% rename from samples/extra/jitProgram/jitProgram.py rename to samples/cuda_bindings/extra/jitProgram/jitProgram.py index 95746f919ad..64c1de44786 100644 --- a/samples/extra/jitProgram/jitProgram.py +++ b/samples/cuda_bindings/extra/jitProgram/jitProgram.py @@ -32,7 +32,7 @@ Raw NVRTC compilation + driver-API module loading This is the under-the-hood companion to the high-level -[`samples/jitLtoLinking/`](../../jitLtoLinking/) sample. Where +[`samples/cuda_core/jitLtoLinking/`](../../../cuda_core/jitLtoLinking/) sample. Where ``jitLtoLinking`` uses ``cuda.core.Program`` and ``cuda.core.Linker`` to compile and link device code, this sample walks through the raw calls that those higher-level classes wrap: diff --git a/samples/extra/jitProgram/requirements.txt b/samples/cuda_bindings/extra/jitProgram/requirements.txt similarity index 100% rename from samples/extra/jitProgram/requirements.txt rename to samples/cuda_bindings/extra/jitProgram/requirements.txt diff --git a/samples/Utilities/README.md b/samples/cuda_core/Utilities/README.md similarity index 93% rename from samples/Utilities/README.md rename to samples/cuda_core/Utilities/README.md index 91816a232f4..4482298ef79 100644 --- a/samples/Utilities/README.md +++ b/samples/cuda_core/Utilities/README.md @@ -8,19 +8,16 @@ This module provides reusable utility functions for CUDA samples to reduce code ## Installation Requirements -Install from the Python samples directory: +Install the dependencies declared by the sample you want to run. For example, +from the repository root: ```bash -cd /path/to/cuda-samples/Python +cd samples/cuda_core/vectorAdd pip install -r requirements.txt ``` -This installs a common CUDA 13 stack (see `python/requirements.txt`): - -- `cuda-python` (>=13.0.0) -- `cuda-core` (>=1.0.0) -- `cupy-cuda13x` (>=14.0.0) -- `numpy` (>=2.3.2) +Dependencies vary by sample; each sample directory contains its own +`requirements.txt`. ## How to Use in Samples diff --git a/samples/Utilities/__init__.py b/samples/cuda_core/Utilities/__init__.py similarity index 100% rename from samples/Utilities/__init__.py rename to samples/cuda_core/Utilities/__init__.py diff --git a/samples/Utilities/cuda_samples_utils.py b/samples/cuda_core/Utilities/cuda_samples_utils.py similarity index 100% rename from samples/Utilities/cuda_samples_utils.py rename to samples/cuda_core/Utilities/cuda_samples_utils.py diff --git a/samples/binarySearch/README.md b/samples/cuda_core/binarySearch/README.md similarity index 94% rename from samples/binarySearch/README.md rename to samples/cuda_core/binarySearch/README.md index 4bbddcecd63..de03e8c652d 100644 --- a/samples/binarySearch/README.md +++ b/samples/cuda_core/binarySearch/README.md @@ -72,7 +72,7 @@ export CUDA_HOME=/usr/local/cuda Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/binarySearch +cd /path/to/cuda-python/samples/cuda_core/binarySearch pip install -r requirements.txt ``` @@ -88,7 +88,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/binarySearch +cd samples/cuda_core/binarySearch python binarySearch.py ``` @@ -126,4 +126,4 @@ Done - `binarySearch.py` - Python implementation - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) diff --git a/samples/binarySearch/binarySearch.py b/samples/cuda_core/binarySearch/binarySearch.py similarity index 100% rename from samples/binarySearch/binarySearch.py rename to samples/cuda_core/binarySearch/binarySearch.py diff --git a/samples/binarySearch/requirements.txt b/samples/cuda_core/binarySearch/requirements.txt similarity index 100% rename from samples/binarySearch/requirements.txt rename to samples/cuda_core/binarySearch/requirements.txt diff --git a/samples/blockwiseSum/README.md b/samples/cuda_core/blockwiseSum/README.md similarity index 100% rename from samples/blockwiseSum/README.md rename to samples/cuda_core/blockwiseSum/README.md diff --git a/samples/blockwiseSum/blockwiseSum.py b/samples/cuda_core/blockwiseSum/blockwiseSum.py similarity index 100% rename from samples/blockwiseSum/blockwiseSum.py rename to samples/cuda_core/blockwiseSum/blockwiseSum.py diff --git a/samples/blockwiseSum/requirements.txt b/samples/cuda_core/blockwiseSum/requirements.txt similarity index 100% rename from samples/blockwiseSum/requirements.txt rename to samples/cuda_core/blockwiseSum/requirements.txt diff --git a/samples/blurImageUnifiedMemory/README.md b/samples/cuda_core/blurImageUnifiedMemory/README.md similarity index 98% rename from samples/blurImageUnifiedMemory/README.md rename to samples/cuda_core/blurImageUnifiedMemory/README.md index 93bdd26d233..5f77f596705 100644 --- a/samples/blurImageUnifiedMemory/README.md +++ b/samples/cuda_core/blurImageUnifiedMemory/README.md @@ -122,7 +122,7 @@ exit code `2` instead of attempting a run that would crash the process. ## Installation ```bash -cd /path/to/cuda-samples/python/1_GettingStarted/blurImageUnifiedMemory +cd /path/to/cuda-python/samples/cuda_core/blurImageUnifiedMemory pip install -r requirements.txt ``` diff --git a/samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py b/samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py similarity index 100% rename from samples/blurImageUnifiedMemory/blurImageUnifiedMemory.py rename to samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py diff --git a/samples/blurImageUnifiedMemory/blurred_image.png b/samples/cuda_core/blurImageUnifiedMemory/blurred_image.png similarity index 100% rename from samples/blurImageUnifiedMemory/blurred_image.png rename to samples/cuda_core/blurImageUnifiedMemory/blurred_image.png diff --git a/samples/blurImageUnifiedMemory/original_image.png b/samples/cuda_core/blurImageUnifiedMemory/original_image.png similarity index 100% rename from samples/blurImageUnifiedMemory/original_image.png rename to samples/cuda_core/blurImageUnifiedMemory/original_image.png diff --git a/samples/blurImageUnifiedMemory/requirements.txt b/samples/cuda_core/blurImageUnifiedMemory/requirements.txt similarity index 100% rename from samples/blurImageUnifiedMemory/requirements.txt rename to samples/cuda_core/blurImageUnifiedMemory/requirements.txt diff --git a/samples/copyImageArraytoGPU/README.md b/samples/cuda_core/copyImageArraytoGPU/README.md similarity index 93% rename from samples/copyImageArraytoGPU/README.md rename to samples/cuda_core/copyImageArraytoGPU/README.md index 46120af2e8a..4c4a100ad86 100644 --- a/samples/copyImageArraytoGPU/README.md +++ b/samples/cuda_core/copyImageArraytoGPU/README.md @@ -66,7 +66,7 @@ Copy image arrays between CPU and GPU memory using the modern `cuda.core` API wi Install the required packages from requirements.txt: ```bash -cd /path/to/cuda-samples/python/1_GettingStarted/copyImageArraytoGPU +cd /path/to/cuda-python/samples/cuda_core/copyImageArraytoGPU pip install -r requirements.txt ``` @@ -81,7 +81,7 @@ The requirements.txt installs: ### Basic usage: ```bash -cd samples/python/1_GettingStarted/copyImageArraytoGPU +cd samples/cuda_core/copyImageArraytoGPU python copyImageArraytoGPU.py ``` @@ -109,7 +109,7 @@ Done - `copyImageArraytoGPU.py` - Python implementation using cuda.core API - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/copyImageArraytoGPU/copyImageArraytoGPU.py b/samples/cuda_core/copyImageArraytoGPU/copyImageArraytoGPU.py similarity index 100% rename from samples/copyImageArraytoGPU/copyImageArraytoGPU.py rename to samples/cuda_core/copyImageArraytoGPU/copyImageArraytoGPU.py diff --git a/samples/copyImageArraytoGPU/requirements.txt b/samples/cuda_core/copyImageArraytoGPU/requirements.txt similarity index 100% rename from samples/copyImageArraytoGPU/requirements.txt rename to samples/cuda_core/copyImageArraytoGPU/requirements.txt diff --git a/samples/cudaComputeLambdas/README.md b/samples/cuda_core/cudaComputeLambdas/README.md similarity index 94% rename from samples/cudaComputeLambdas/README.md rename to samples/cuda_core/cudaComputeLambdas/README.md index db0586a3a8f..120da5a780e 100644 --- a/samples/cudaComputeLambdas/README.md +++ b/samples/cuda_core/cudaComputeLambdas/README.md @@ -75,7 +75,7 @@ export CUDA_HOME=/usr/local/cuda Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/cudaComputeLambdas +cd /path/to/cuda-python/samples/cuda_core/cudaComputeLambdas pip install -r requirements.txt ``` @@ -91,7 +91,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/cudaComputeLambdas +cd samples/cuda_core/cudaComputeLambdas python cudaComputeLambdas.py ``` @@ -127,4 +127,4 @@ Done - `cudaComputeLambdas.py` - Python implementation - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) diff --git a/samples/cudaComputeLambdas/cudaComputeLambdas.py b/samples/cuda_core/cudaComputeLambdas/cudaComputeLambdas.py similarity index 100% rename from samples/cudaComputeLambdas/cudaComputeLambdas.py rename to samples/cuda_core/cudaComputeLambdas/cudaComputeLambdas.py diff --git a/samples/cudaComputeLambdas/requirements.txt b/samples/cuda_core/cudaComputeLambdas/requirements.txt similarity index 100% rename from samples/cudaComputeLambdas/requirements.txt rename to samples/cuda_core/cudaComputeLambdas/requirements.txt diff --git a/samples/cudaGraphs/README.md b/samples/cuda_core/cudaGraphs/README.md similarity index 95% rename from samples/cudaGraphs/README.md rename to samples/cuda_core/cudaGraphs/README.md index 4879dd80dc3..0452cec1ba5 100644 --- a/samples/cudaGraphs/README.md +++ b/samples/cuda_core/cudaGraphs/README.md @@ -77,7 +77,7 @@ place without paying the cost of rebuilding the executable graph. Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/cudaGraphs +cd /path/to/cuda-python/samples/cuda_core/cudaGraphs pip install -r requirements.txt ``` @@ -92,7 +92,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/cudaGraphs +cd samples/cuda_core/cudaGraphs python cudaGraphs.py ``` @@ -140,7 +140,7 @@ your GPU and host CPU. - `cudaGraphs.py` - Python implementation using `cuda.core` CUDA graphs - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/cudaGraphs/cudaGraphs.py b/samples/cuda_core/cudaGraphs/cudaGraphs.py similarity index 100% rename from samples/cudaGraphs/cudaGraphs.py rename to samples/cuda_core/cudaGraphs/cudaGraphs.py diff --git a/samples/cudaGraphs/requirements.txt b/samples/cuda_core/cudaGraphs/requirements.txt similarity index 100% rename from samples/cudaGraphs/requirements.txt rename to samples/cuda_core/cudaGraphs/requirements.txt diff --git a/samples/customPyTorchKernel/README.md b/samples/cuda_core/customPyTorchKernel/README.md similarity index 97% rename from samples/customPyTorchKernel/README.md rename to samples/cuda_core/customPyTorchKernel/README.md index 502b3b74071..5d767f143a4 100644 --- a/samples/customPyTorchKernel/README.md +++ b/samples/cuda_core/customPyTorchKernel/README.md @@ -16,7 +16,7 @@ This sample demonstrates how to add a custom GPU operation to PyTorch using the ## Installation ```bash -cd python/3_FrameworkInterop/customPyTorchKernel +cd samples/cuda_core/customPyTorchKernel pip install -r requirements.txt ``` diff --git a/samples/customPyTorchKernel/customPyTorchKernel.py b/samples/cuda_core/customPyTorchKernel/customPyTorchKernel.py similarity index 100% rename from samples/customPyTorchKernel/customPyTorchKernel.py rename to samples/cuda_core/customPyTorchKernel/customPyTorchKernel.py diff --git a/samples/customPyTorchKernel/requirements.txt b/samples/cuda_core/customPyTorchKernel/requirements.txt similarity index 100% rename from samples/customPyTorchKernel/requirements.txt rename to samples/cuda_core/customPyTorchKernel/requirements.txt diff --git a/samples/customTensorFlowKernel/README.md b/samples/cuda_core/customTensorFlowKernel/README.md similarity index 97% rename from samples/customTensorFlowKernel/README.md rename to samples/cuda_core/customTensorFlowKernel/README.md index 77192b487ef..b525ee20d3a 100644 --- a/samples/customTensorFlowKernel/README.md +++ b/samples/cuda_core/customTensorFlowKernel/README.md @@ -29,7 +29,7 @@ Learn how to add a custom GPU operation to TensorFlow using `cuda.core` with `tf ## Installation ```bash -cd python/3_FrameworkInterop/customTensorFlowKernel +cd samples/cuda_core/customTensorFlowKernel pip install -r requirements.txt ``` diff --git a/samples/customTensorFlowKernel/customTensorFlowKernel.py b/samples/cuda_core/customTensorFlowKernel/customTensorFlowKernel.py similarity index 100% rename from samples/customTensorFlowKernel/customTensorFlowKernel.py rename to samples/cuda_core/customTensorFlowKernel/customTensorFlowKernel.py diff --git a/samples/customTensorFlowKernel/requirements.txt b/samples/cuda_core/customTensorFlowKernel/requirements.txt similarity index 100% rename from samples/customTensorFlowKernel/requirements.txt rename to samples/cuda_core/customTensorFlowKernel/requirements.txt diff --git a/samples/deviceQuery/README.md b/samples/cuda_core/deviceQuery/README.md similarity index 98% rename from samples/deviceQuery/README.md rename to samples/cuda_core/deviceQuery/README.md index afc79b87c9d..d89359744f4 100644 --- a/samples/deviceQuery/README.md +++ b/samples/cuda_core/deviceQuery/README.md @@ -109,7 +109,7 @@ The sample has two output modes: Install the required packages from requirements.txt: ```bash -cd cuda-samples/python/1_GettingStarted/deviceQuery +cd /path/to/cuda-python/samples/cuda_core/deviceQuery pip install -r requirements.txt ``` @@ -122,7 +122,7 @@ The requirements.txt installs: ### Basic usage: ```bash -cd cuda-samples/python/1_GettingStarted/deviceQuery +cd samples/cuda_core/deviceQuery python deviceQuery.py ``` diff --git a/samples/deviceQuery/deviceQuery.py b/samples/cuda_core/deviceQuery/deviceQuery.py similarity index 100% rename from samples/deviceQuery/deviceQuery.py rename to samples/cuda_core/deviceQuery/deviceQuery.py diff --git a/samples/deviceQuery/requirements.txt b/samples/cuda_core/deviceQuery/requirements.txt similarity index 100% rename from samples/deviceQuery/requirements.txt rename to samples/cuda_core/deviceQuery/requirements.txt diff --git a/samples/fftSignalAnalysis/README.md b/samples/cuda_core/fftSignalAnalysis/README.md similarity index 100% rename from samples/fftSignalAnalysis/README.md rename to samples/cuda_core/fftSignalAnalysis/README.md diff --git a/samples/fftSignalAnalysis/fftSignalAnalysis.py b/samples/cuda_core/fftSignalAnalysis/fftSignalAnalysis.py similarity index 100% rename from samples/fftSignalAnalysis/fftSignalAnalysis.py rename to samples/cuda_core/fftSignalAnalysis/fftSignalAnalysis.py diff --git a/samples/fftSignalAnalysis/requirements.txt b/samples/cuda_core/fftSignalAnalysis/requirements.txt similarity index 100% rename from samples/fftSignalAnalysis/requirements.txt rename to samples/cuda_core/fftSignalAnalysis/requirements.txt diff --git a/samples/glInteropFluid/README.md b/samples/cuda_core/glInteropFluid/README.md similarity index 89% rename from samples/glInteropFluid/README.md rename to samples/cuda_core/glInteropFluid/README.md index fe436d7be56..6167cfc1079 100644 --- a/samples/glInteropFluid/README.md +++ b/samples/cuda_core/glInteropFluid/README.md @@ -70,7 +70,7 @@ python glInteropFluid.py - [CUDA Python Documentation](https://nvidia.github.io/cuda-python/) - [`cuda.core.texture` API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#module-cuda.core.texture) -- [`samples/glInteropPlasma/`](../glInteropPlasma/) — simpler OpenGL interop example -- [`samples/glInteropMipmapLod/`](../glInteropMipmapLod/) — mipmap / LOD texture demo -- [`samples/textureSample/`](../textureSample/) — minimal texture sampling +- [`samples/cuda_core/glInteropPlasma/`](../glInteropPlasma/) — simpler OpenGL interop example +- [`samples/cuda_core/glInteropMipmapLod/`](../glInteropMipmapLod/) — mipmap / LOD texture demo +- [`samples/cuda_core/textureSample/`](../textureSample/) — minimal texture sampling - [Jos Stam, *Stable Fluids* (SIGGRAPH '99)](https://www.dgp.toronto.edu/people/stam/reality/Research/pdf/ns.pdf) diff --git a/samples/glInteropFluid/glInteropFluid.py b/samples/cuda_core/glInteropFluid/glInteropFluid.py similarity index 100% rename from samples/glInteropFluid/glInteropFluid.py rename to samples/cuda_core/glInteropFluid/glInteropFluid.py diff --git a/samples/glInteropFluid/requirements.txt b/samples/cuda_core/glInteropFluid/requirements.txt similarity index 100% rename from samples/glInteropFluid/requirements.txt rename to samples/cuda_core/glInteropFluid/requirements.txt diff --git a/samples/glInteropFluidNumbaCudaMlir/README.md b/samples/cuda_core/glInteropFluidNumbaCudaMlir/README.md similarity index 87% rename from samples/glInteropFluidNumbaCudaMlir/README.md rename to samples/cuda_core/glInteropFluidNumbaCudaMlir/README.md index bb2ab8ad678..513f9cb0f01 100644 --- a/samples/glInteropFluidNumbaCudaMlir/README.md +++ b/samples/cuda_core/glInteropFluidNumbaCudaMlir/README.md @@ -3,7 +3,7 @@ ## Description A [numba-cuda-mlir](https://github.com/NVIDIA/numba-cuda) port of the -[`samples/glInteropFluid/`](../glInteropFluid/) Stable Fluids demo. Same +[`samples/cuda_core/glInteropFluid/`](../glInteropFluid/) Stable Fluids demo. Same physics; the memory model changes. The `cuda.core` version binds each field as a `cudaArray` and reads it @@ -49,5 +49,5 @@ python glInteropFluidNumbaCudaMlir.py ## See Also -- [`samples/glInteropFluid/`](../glInteropFluid/) — `cuda.core` version using textures / surfaces +- [`samples/cuda_core/glInteropFluid/`](../glInteropFluid/) — `cuda.core` version using textures / surfaces - [numba-cuda](https://github.com/NVIDIA/numba-cuda) diff --git a/samples/glInteropFluidNumbaCudaMlir/glInteropFluidNumbaCudaMlir.py b/samples/cuda_core/glInteropFluidNumbaCudaMlir/glInteropFluidNumbaCudaMlir.py similarity index 100% rename from samples/glInteropFluidNumbaCudaMlir/glInteropFluidNumbaCudaMlir.py rename to samples/cuda_core/glInteropFluidNumbaCudaMlir/glInteropFluidNumbaCudaMlir.py diff --git a/samples/glInteropFluidNumbaCudaMlir/requirements.txt b/samples/cuda_core/glInteropFluidNumbaCudaMlir/requirements.txt similarity index 100% rename from samples/glInteropFluidNumbaCudaMlir/requirements.txt rename to samples/cuda_core/glInteropFluidNumbaCudaMlir/requirements.txt diff --git a/samples/glInteropMipmapLod/README.md b/samples/cuda_core/glInteropMipmapLod/README.md similarity index 86% rename from samples/glInteropMipmapLod/README.md rename to samples/cuda_core/glInteropMipmapLod/README.md index a7994cf0ad7..b7d206567bc 100644 --- a/samples/glInteropMipmapLod/README.md +++ b/samples/cuda_core/glInteropMipmapLod/README.md @@ -6,7 +6,7 @@ Demonstrates the new ``cuda.core.texture`` stack — ``MipmappedArray``, ``SurfaceObject``, and a ``TextureObject`` that does **trilinear** (LINEAR mipmap + LINEAR filter) sampling with user-controlled LOD bias — rendered live to an OpenGL window with the same interop pattern as -[`samples/glInteropPlasma/`](../glInteropPlasma/). +[`samples/cuda_core/glInteropPlasma/`](../glInteropPlasma/). The sample: @@ -64,5 +64,5 @@ python glInteropMipmapLod.py ## See Also - [`cuda.core.texture` API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#module-cuda.core.texture) -- [`samples/glInteropFluid/`](../glInteropFluid/) — Stable Fluids demo (also uses TextureObject / SurfaceObject) -- [`samples/textureSample/`](../textureSample/) — minimal texture sampling +- [`samples/cuda_core/glInteropFluid/`](../glInteropFluid/) — Stable Fluids demo (also uses TextureObject / SurfaceObject) +- [`samples/cuda_core/textureSample/`](../textureSample/) — minimal texture sampling diff --git a/samples/glInteropMipmapLod/glInteropMipmapLod.py b/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py similarity index 100% rename from samples/glInteropMipmapLod/glInteropMipmapLod.py rename to samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py diff --git a/samples/glInteropMipmapLod/requirements.txt b/samples/cuda_core/glInteropMipmapLod/requirements.txt similarity index 100% rename from samples/glInteropMipmapLod/requirements.txt rename to samples/cuda_core/glInteropMipmapLod/requirements.txt diff --git a/samples/glInteropPlasma/README.md b/samples/cuda_core/glInteropPlasma/README.md similarity index 100% rename from samples/glInteropPlasma/README.md rename to samples/cuda_core/glInteropPlasma/README.md diff --git a/samples/glInteropPlasma/glInteropPlasma.py b/samples/cuda_core/glInteropPlasma/glInteropPlasma.py similarity index 100% rename from samples/glInteropPlasma/glInteropPlasma.py rename to samples/cuda_core/glInteropPlasma/glInteropPlasma.py diff --git a/samples/glInteropPlasma/requirements.txt b/samples/cuda_core/glInteropPlasma/requirements.txt similarity index 100% rename from samples/glInteropPlasma/requirements.txt rename to samples/cuda_core/glInteropPlasma/requirements.txt diff --git a/samples/greenContext/README.md b/samples/cuda_core/greenContext/README.md similarity index 98% rename from samples/greenContext/README.md rename to samples/cuda_core/greenContext/README.md index 3afd80831d0..a1ab7101ca9 100644 --- a/samples/greenContext/README.md +++ b/samples/cuda_core/greenContext/README.md @@ -101,7 +101,7 @@ partition. The reference row lets you separate those two effects: Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/greenContext +cd /path/to/cuda-python/samples/cuda_core/greenContext pip install -r requirements.txt ``` @@ -119,7 +119,7 @@ reported `min_partition_size`. When that happens the sample prints a `Note:` line with the granularity it landed on. ```bash -cd cuda-samples/python/2_CoreConcepts/greenContext +cd samples/cuda_core/greenContext python greenContext.py ``` diff --git a/samples/greenContext/greenContext.py b/samples/cuda_core/greenContext/greenContext.py similarity index 100% rename from samples/greenContext/greenContext.py rename to samples/cuda_core/greenContext/greenContext.py diff --git a/samples/greenContext/requirements.txt b/samples/cuda_core/greenContext/requirements.txt similarity index 100% rename from samples/greenContext/requirements.txt rename to samples/cuda_core/greenContext/requirements.txt diff --git a/samples/ipcMemoryPool/README.md b/samples/cuda_core/ipcMemoryPool/README.md similarity index 95% rename from samples/ipcMemoryPool/README.md rename to samples/cuda_core/ipcMemoryPool/README.md index cfecb531681..f74834eb752 100644 --- a/samples/ipcMemoryPool/README.md +++ b/samples/cuda_core/ipcMemoryPool/README.md @@ -76,7 +76,7 @@ round-trip test: Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/4_DistributedComputing/ipcMemoryPool +cd /path/to/cuda-python/samples/cuda_core/ipcMemoryPool pip install -r requirements.txt ``` @@ -91,7 +91,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/4_DistributedComputing/ipcMemoryPool +cd samples/cuda_core/ipcMemoryPool python ipcMemoryPool.py ``` @@ -130,7 +130,7 @@ based on your system. - `ipcMemoryPool.py` - Python implementation using `cuda.core` IPC memory pools - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/ipcMemoryPool/ipcMemoryPool.py b/samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py similarity index 100% rename from samples/ipcMemoryPool/ipcMemoryPool.py rename to samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py diff --git a/samples/ipcMemoryPool/requirements.txt b/samples/cuda_core/ipcMemoryPool/requirements.txt similarity index 100% rename from samples/ipcMemoryPool/requirements.txt rename to samples/cuda_core/ipcMemoryPool/requirements.txt diff --git a/samples/jitLtoLinking/README.md b/samples/cuda_core/jitLtoLinking/README.md similarity index 95% rename from samples/jitLtoLinking/README.md rename to samples/cuda_core/jitLtoLinking/README.md index 84385391529..234d364c834 100644 --- a/samples/jitLtoLinking/README.md +++ b/samples/cuda_core/jitLtoLinking/README.md @@ -79,7 +79,7 @@ mode are verified against a NumPy reference. Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/jitLtoLinking +cd /path/to/cuda-python/samples/cuda_core/jitLtoLinking pip install -r requirements.txt ``` @@ -94,7 +94,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/jitLtoLinking +cd samples/cuda_core/jitLtoLinking python jitLtoLinking.py ``` @@ -133,7 +133,7 @@ PTX, LTO, and plug-in-swap linked kernels all produced matching results. Done - `jitLtoLinking.py` - Python implementation using `cuda.core.Linker` - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/jitLtoLinking/jitLtoLinking.py b/samples/cuda_core/jitLtoLinking/jitLtoLinking.py similarity index 100% rename from samples/jitLtoLinking/jitLtoLinking.py rename to samples/cuda_core/jitLtoLinking/jitLtoLinking.py diff --git a/samples/jitLtoLinking/requirements.txt b/samples/cuda_core/jitLtoLinking/requirements.txt similarity index 100% rename from samples/jitLtoLinking/requirements.txt rename to samples/cuda_core/jitLtoLinking/requirements.txt diff --git a/samples/kernelNsysProfile/README.md b/samples/cuda_core/kernelNsysProfile/README.md similarity index 100% rename from samples/kernelNsysProfile/README.md rename to samples/cuda_core/kernelNsysProfile/README.md diff --git a/samples/kernelNsysProfile/kernelNsysProfile.py b/samples/cuda_core/kernelNsysProfile/kernelNsysProfile.py similarity index 100% rename from samples/kernelNsysProfile/kernelNsysProfile.py rename to samples/cuda_core/kernelNsysProfile/kernelNsysProfile.py diff --git a/samples/kernelNsysProfile/requirements.txt b/samples/cuda_core/kernelNsysProfile/requirements.txt similarity index 100% rename from samples/kernelNsysProfile/requirements.txt rename to samples/cuda_core/kernelNsysProfile/requirements.txt diff --git a/samples/launchConfigTuning/README.md b/samples/cuda_core/launchConfigTuning/README.md similarity index 100% rename from samples/launchConfigTuning/README.md rename to samples/cuda_core/launchConfigTuning/README.md diff --git a/samples/launchConfigTuning/launchConfigTuning.py b/samples/cuda_core/launchConfigTuning/launchConfigTuning.py similarity index 100% rename from samples/launchConfigTuning/launchConfigTuning.py rename to samples/cuda_core/launchConfigTuning/launchConfigTuning.py diff --git a/samples/launchConfigTuning/requirements.txt b/samples/cuda_core/launchConfigTuning/requirements.txt similarity index 100% rename from samples/launchConfigTuning/requirements.txt rename to samples/cuda_core/launchConfigTuning/requirements.txt diff --git a/samples/matrixMulSharedMem/README.md b/samples/cuda_core/matrixMulSharedMem/README.md similarity index 99% rename from samples/matrixMulSharedMem/README.md rename to samples/cuda_core/matrixMulSharedMem/README.md index 6de9f690c7c..fb2e8f1e97d 100644 --- a/samples/matrixMulSharedMem/README.md +++ b/samples/cuda_core/matrixMulSharedMem/README.md @@ -55,7 +55,7 @@ Demonstrates efficient matrix multiplication using nvmath-python APIs and custom ## Installation ```bash -cd cuda-samples/python/2_CoreConcepts/matrixMulSharedMem +cd samples/cuda_core/matrixMulSharedMem python -m venv venv source venv/bin/activate pip install -r requirements.txt diff --git a/samples/matrixMulSharedMem/matrixMulSharedMem.py b/samples/cuda_core/matrixMulSharedMem/matrixMulSharedMem.py similarity index 100% rename from samples/matrixMulSharedMem/matrixMulSharedMem.py rename to samples/cuda_core/matrixMulSharedMem/matrixMulSharedMem.py diff --git a/samples/matrixMulSharedMem/requirements.txt b/samples/cuda_core/matrixMulSharedMem/requirements.txt similarity index 100% rename from samples/matrixMulSharedMem/requirements.txt rename to samples/cuda_core/matrixMulSharedMem/requirements.txt diff --git a/samples/memoryResources/README.md b/samples/cuda_core/memoryResources/README.md similarity index 96% rename from samples/memoryResources/README.md rename to samples/cuda_core/memoryResources/README.md index 893f2208276..d3c4ac2073d 100644 --- a/samples/memoryResources/README.md +++ b/samples/cuda_core/memoryResources/README.md @@ -98,7 +98,7 @@ unavailable. Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/memoryResources +cd /path/to/cuda-python/samples/cuda_core/memoryResources pip install -r requirements.txt ``` @@ -113,7 +113,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/memoryResources +cd samples/cuda_core/memoryResources python memoryResources.py ``` @@ -158,7 +158,7 @@ Done - `memoryResources.py` - Python implementation using `cuda.core` memory resources - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/memoryResources/memoryResources.py b/samples/cuda_core/memoryResources/memoryResources.py similarity index 100% rename from samples/memoryResources/memoryResources.py rename to samples/cuda_core/memoryResources/memoryResources.py diff --git a/samples/memoryResources/requirements.txt b/samples/cuda_core/memoryResources/requirements.txt similarity index 100% rename from samples/memoryResources/requirements.txt rename to samples/cuda_core/memoryResources/requirements.txt diff --git a/samples/multiGPUGradientAverage/README.md b/samples/cuda_core/multiGPUGradientAverage/README.md similarity index 100% rename from samples/multiGPUGradientAverage/README.md rename to samples/cuda_core/multiGPUGradientAverage/README.md diff --git a/samples/multiGPUGradientAverage/multiGPUGradientAverage.py b/samples/cuda_core/multiGPUGradientAverage/multiGPUGradientAverage.py similarity index 100% rename from samples/multiGPUGradientAverage/multiGPUGradientAverage.py rename to samples/cuda_core/multiGPUGradientAverage/multiGPUGradientAverage.py diff --git a/samples/multiGPUGradientAverage/requirements.txt b/samples/cuda_core/multiGPUGradientAverage/requirements.txt similarity index 100% rename from samples/multiGPUGradientAverage/requirements.txt rename to samples/cuda_core/multiGPUGradientAverage/requirements.txt diff --git a/samples/numpyVsCupy/README.md b/samples/cuda_core/numpyVsCupy/README.md similarity index 92% rename from samples/numpyVsCupy/README.md rename to samples/cuda_core/numpyVsCupy/README.md index 28a42848b72..a673f7880f0 100644 --- a/samples/numpyVsCupy/README.md +++ b/samples/cuda_core/numpyVsCupy/README.md @@ -47,14 +47,14 @@ Basic usage: ```bash # Pre-steps: export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH -# Run from the Python directory: -cd /path/to/numpyVsCupy/Python -python -m 1_GettingStarted.numpyVsCupy.numpyVsCupy +# Run from the repository root: +cd samples/cuda_core/numpyVsCupy +python numpyVsCupy.py ``` With custom parameters: ```bash -python -m 1_GettingStarted.numpyVsCupy.numpyVsCupy --n_size 5000 +python numpyVsCupy.py --n_size 5000 ``` ### Command line arguments diff --git a/samples/numpyVsCupy/numpyVsCupy.py b/samples/cuda_core/numpyVsCupy/numpyVsCupy.py similarity index 100% rename from samples/numpyVsCupy/numpyVsCupy.py rename to samples/cuda_core/numpyVsCupy/numpyVsCupy.py diff --git a/samples/numpyVsCupy/requirements.txt b/samples/cuda_core/numpyVsCupy/requirements.txt similarity index 100% rename from samples/numpyVsCupy/requirements.txt rename to samples/cuda_core/numpyVsCupy/requirements.txt diff --git a/samples/pageRank/README.md b/samples/cuda_core/pageRank/README.md similarity index 98% rename from samples/pageRank/README.md rename to samples/cuda_core/pageRank/README.md index d0dddca1ab3..6f0cb43077f 100644 --- a/samples/pageRank/README.md +++ b/samples/cuda_core/pageRank/README.md @@ -79,7 +79,7 @@ install that cannot succeed. ## Installation ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/pageRank +cd /path/to/cuda-python/samples/cuda_core/pageRank python3 -m venv venv source venv/bin/activate pip install -r requirements.txt diff --git a/samples/pageRank/pageRank.py b/samples/cuda_core/pageRank/pageRank.py similarity index 100% rename from samples/pageRank/pageRank.py rename to samples/cuda_core/pageRank/pageRank.py diff --git a/samples/pageRank/requirements.txt b/samples/cuda_core/pageRank/requirements.txt similarity index 100% rename from samples/pageRank/requirements.txt rename to samples/cuda_core/pageRank/requirements.txt diff --git a/samples/parallelHistogram/README.md b/samples/cuda_core/parallelHistogram/README.md similarity index 100% rename from samples/parallelHistogram/README.md rename to samples/cuda_core/parallelHistogram/README.md diff --git a/samples/parallelHistogram/parallelHistogram.py b/samples/cuda_core/parallelHistogram/parallelHistogram.py similarity index 100% rename from samples/parallelHistogram/parallelHistogram.py rename to samples/cuda_core/parallelHistogram/parallelHistogram.py diff --git a/samples/parallelHistogram/requirements.txt b/samples/cuda_core/parallelHistogram/requirements.txt similarity index 100% rename from samples/parallelHistogram/requirements.txt rename to samples/cuda_core/parallelHistogram/requirements.txt diff --git a/samples/parallelReduction/README.md b/samples/cuda_core/parallelReduction/README.md similarity index 100% rename from samples/parallelReduction/README.md rename to samples/cuda_core/parallelReduction/README.md diff --git a/samples/parallelReduction/parallelReduction.py b/samples/cuda_core/parallelReduction/parallelReduction.py similarity index 100% rename from samples/parallelReduction/parallelReduction.py rename to samples/cuda_core/parallelReduction/parallelReduction.py diff --git a/samples/parallelReduction/requirements.txt b/samples/cuda_core/parallelReduction/requirements.txt similarity index 100% rename from samples/parallelReduction/requirements.txt rename to samples/cuda_core/parallelReduction/requirements.txt diff --git a/samples/prefixSum/README.md b/samples/cuda_core/prefixSum/README.md similarity index 100% rename from samples/prefixSum/README.md rename to samples/cuda_core/prefixSum/README.md diff --git a/samples/prefixSum/prefixSum.py b/samples/cuda_core/prefixSum/prefixSum.py similarity index 100% rename from samples/prefixSum/prefixSum.py rename to samples/cuda_core/prefixSum/prefixSum.py diff --git a/samples/prefixSum/requirements.txt b/samples/cuda_core/prefixSum/requirements.txt similarity index 100% rename from samples/prefixSum/requirements.txt rename to samples/cuda_core/prefixSum/requirements.txt diff --git a/samples/processCheckpoint/README.md b/samples/cuda_core/processCheckpoint/README.md similarity index 99% rename from samples/processCheckpoint/README.md rename to samples/cuda_core/processCheckpoint/README.md index 74c4f2c3086..50d2623a747 100644 --- a/samples/processCheckpoint/README.md +++ b/samples/cuda_core/processCheckpoint/README.md @@ -105,7 +105,7 @@ running ---------> locked ------------> checkpointed -----------> locked ------- Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/processCheckpoint +cd /path/to/cuda-python/samples/cuda_core/processCheckpoint pip install -r requirements.txt ``` diff --git a/samples/processCheckpoint/processCheckpoint.py b/samples/cuda_core/processCheckpoint/processCheckpoint.py similarity index 100% rename from samples/processCheckpoint/processCheckpoint.py rename to samples/cuda_core/processCheckpoint/processCheckpoint.py diff --git a/samples/processCheckpoint/requirements.txt b/samples/cuda_core/processCheckpoint/requirements.txt similarity index 100% rename from samples/processCheckpoint/requirements.txt rename to samples/cuda_core/processCheckpoint/requirements.txt diff --git a/samples/reduction/README.md b/samples/cuda_core/reduction/README.md similarity index 100% rename from samples/reduction/README.md rename to samples/cuda_core/reduction/README.md diff --git a/samples/reduction/reduction.py b/samples/cuda_core/reduction/reduction.py similarity index 100% rename from samples/reduction/reduction.py rename to samples/cuda_core/reduction/reduction.py diff --git a/samples/reduction/requirements.txt b/samples/cuda_core/reduction/requirements.txt similarity index 100% rename from samples/reduction/requirements.txt rename to samples/cuda_core/reduction/requirements.txt diff --git a/samples/reductionMultiBlockCG/README.md b/samples/cuda_core/reductionMultiBlockCG/README.md similarity index 100% rename from samples/reductionMultiBlockCG/README.md rename to samples/cuda_core/reductionMultiBlockCG/README.md diff --git a/samples/reductionMultiBlockCG/reductionMultiBlockCG.py b/samples/cuda_core/reductionMultiBlockCG/reductionMultiBlockCG.py similarity index 100% rename from samples/reductionMultiBlockCG/reductionMultiBlockCG.py rename to samples/cuda_core/reductionMultiBlockCG/reductionMultiBlockCG.py diff --git a/samples/reductionMultiBlockCG/requirements.txt b/samples/cuda_core/reductionMultiBlockCG/requirements.txt similarity index 100% rename from samples/reductionMultiBlockCG/requirements.txt rename to samples/cuda_core/reductionMultiBlockCG/requirements.txt diff --git a/samples/simpleMultiGpu/README.md b/samples/cuda_core/simpleMultiGpu/README.md similarity index 100% rename from samples/simpleMultiGpu/README.md rename to samples/cuda_core/simpleMultiGpu/README.md diff --git a/samples/simpleMultiGpu/requirements.txt b/samples/cuda_core/simpleMultiGpu/requirements.txt similarity index 100% rename from samples/simpleMultiGpu/requirements.txt rename to samples/cuda_core/simpleMultiGpu/requirements.txt diff --git a/samples/simpleMultiGpu/simpleMultiGpu.py b/samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py similarity index 100% rename from samples/simpleMultiGpu/simpleMultiGpu.py rename to samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py diff --git a/samples/simpleP2P/README.md b/samples/cuda_core/simpleP2P/README.md similarity index 100% rename from samples/simpleP2P/README.md rename to samples/cuda_core/simpleP2P/README.md diff --git a/samples/simpleP2P/requirements.txt b/samples/cuda_core/simpleP2P/requirements.txt similarity index 100% rename from samples/simpleP2P/requirements.txt rename to samples/cuda_core/simpleP2P/requirements.txt diff --git a/samples/simpleP2P/simpleP2P.py b/samples/cuda_core/simpleP2P/simpleP2P.py similarity index 100% rename from samples/simpleP2P/simpleP2P.py rename to samples/cuda_core/simpleP2P/simpleP2P.py diff --git a/samples/simplePrint/README.md b/samples/cuda_core/simplePrint/README.md similarity index 99% rename from samples/simplePrint/README.md rename to samples/cuda_core/simplePrint/README.md index 350694b06da..3ff97645176 100644 --- a/samples/simplePrint/README.md +++ b/samples/cuda_core/simplePrint/README.md @@ -251,7 +251,7 @@ Try modifying: ### CUDA Python (cuda.core): - [cuda.core Documentation](https://nvidia.github.io/cuda-python/) -- [CUDA Python Examples](https://github.com/NVIDIA/cuda-python/tree/main/cuda_core/examples) +- [CUDA Python Samples](https://github.com/NVIDIA/cuda-python/tree/main/samples/cuda_core) ### Numba CUDA: - [Numba CUDA Documentation](https://nvidia.github.io/numba-cuda/) diff --git a/samples/simplePrint/requirements.txt b/samples/cuda_core/simplePrint/requirements.txt similarity index 100% rename from samples/simplePrint/requirements.txt rename to samples/cuda_core/simplePrint/requirements.txt diff --git a/samples/simplePrint/simplePrint.py b/samples/cuda_core/simplePrint/simplePrint.py similarity index 100% rename from samples/simplePrint/simplePrint.py rename to samples/cuda_core/simplePrint/simplePrint.py diff --git a/samples/simpleZeroCopy/README.md b/samples/cuda_core/simpleZeroCopy/README.md similarity index 100% rename from samples/simpleZeroCopy/README.md rename to samples/cuda_core/simpleZeroCopy/README.md diff --git a/samples/simpleZeroCopy/requirements.txt b/samples/cuda_core/simpleZeroCopy/requirements.txt similarity index 100% rename from samples/simpleZeroCopy/requirements.txt rename to samples/cuda_core/simpleZeroCopy/requirements.txt diff --git a/samples/simpleZeroCopy/simpleZeroCopy.py b/samples/cuda_core/simpleZeroCopy/simpleZeroCopy.py similarity index 100% rename from samples/simpleZeroCopy/simpleZeroCopy.py rename to samples/cuda_core/simpleZeroCopy/simpleZeroCopy.py diff --git a/samples/streamingCopyComputeOverlap/README.md b/samples/cuda_core/streamingCopyComputeOverlap/README.md similarity index 100% rename from samples/streamingCopyComputeOverlap/README.md rename to samples/cuda_core/streamingCopyComputeOverlap/README.md diff --git a/samples/streamingCopyComputeOverlap/requirements.txt b/samples/cuda_core/streamingCopyComputeOverlap/requirements.txt similarity index 100% rename from samples/streamingCopyComputeOverlap/requirements.txt rename to samples/cuda_core/streamingCopyComputeOverlap/requirements.txt diff --git a/samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py b/samples/cuda_core/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py similarity index 100% rename from samples/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py rename to samples/cuda_core/streamingCopyComputeOverlap/streamingCopyComputeOverlap.py diff --git a/samples/stridedMemoryViewConstructors/README.md b/samples/cuda_core/stridedMemoryViewConstructors/README.md similarity index 100% rename from samples/stridedMemoryViewConstructors/README.md rename to samples/cuda_core/stridedMemoryViewConstructors/README.md diff --git a/samples/stridedMemoryViewConstructors/requirements.txt b/samples/cuda_core/stridedMemoryViewConstructors/requirements.txt similarity index 100% rename from samples/stridedMemoryViewConstructors/requirements.txt rename to samples/cuda_core/stridedMemoryViewConstructors/requirements.txt diff --git a/samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py b/samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py similarity index 100% rename from samples/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py rename to samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py diff --git a/samples/stridedMemoryViewCpu/README.md b/samples/cuda_core/stridedMemoryViewCpu/README.md similarity index 100% rename from samples/stridedMemoryViewCpu/README.md rename to samples/cuda_core/stridedMemoryViewCpu/README.md diff --git a/samples/stridedMemoryViewCpu/requirements.txt b/samples/cuda_core/stridedMemoryViewCpu/requirements.txt similarity index 100% rename from samples/stridedMemoryViewCpu/requirements.txt rename to samples/cuda_core/stridedMemoryViewCpu/requirements.txt diff --git a/samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py b/samples/cuda_core/stridedMemoryViewCpu/stridedMemoryViewCpu.py similarity index 100% rename from samples/stridedMemoryViewCpu/stridedMemoryViewCpu.py rename to samples/cuda_core/stridedMemoryViewCpu/stridedMemoryViewCpu.py diff --git a/samples/stridedMemoryViewGpu/README.md b/samples/cuda_core/stridedMemoryViewGpu/README.md similarity index 100% rename from samples/stridedMemoryViewGpu/README.md rename to samples/cuda_core/stridedMemoryViewGpu/README.md diff --git a/samples/stridedMemoryViewGpu/requirements.txt b/samples/cuda_core/stridedMemoryViewGpu/requirements.txt similarity index 100% rename from samples/stridedMemoryViewGpu/requirements.txt rename to samples/cuda_core/stridedMemoryViewGpu/requirements.txt diff --git a/samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py b/samples/cuda_core/stridedMemoryViewGpu/stridedMemoryViewGpu.py similarity index 100% rename from samples/stridedMemoryViewGpu/stridedMemoryViewGpu.py rename to samples/cuda_core/stridedMemoryViewGpu/stridedMemoryViewGpu.py diff --git a/samples/systemInfo/README.md b/samples/cuda_core/systemInfo/README.md similarity index 97% rename from samples/systemInfo/README.md rename to samples/cuda_core/systemInfo/README.md index 2e93196418d..e8acdcfac02 100644 --- a/samples/systemInfo/README.md +++ b/samples/cuda_core/systemInfo/README.md @@ -70,7 +70,7 @@ Import stable symbols from the top-level `cuda.core` package (not `cuda.core.exp Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/1_GettingStarted/systemInfo +cd /path/to/cuda-python/samples/cuda_core/systemInfo pip install -r requirements.txt ``` @@ -84,7 +84,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/1_GettingStarted/systemInfo +cd samples/cuda_core/systemInfo python systemInfo.py ``` diff --git a/samples/systemInfo/requirements.txt b/samples/cuda_core/systemInfo/requirements.txt similarity index 100% rename from samples/systemInfo/requirements.txt rename to samples/cuda_core/systemInfo/requirements.txt diff --git a/samples/systemInfo/systemInfo.py b/samples/cuda_core/systemInfo/systemInfo.py similarity index 100% rename from samples/systemInfo/systemInfo.py rename to samples/cuda_core/systemInfo/systemInfo.py diff --git a/samples/textureSample/README.md b/samples/cuda_core/textureSample/README.md similarity index 87% rename from samples/textureSample/README.md rename to samples/cuda_core/textureSample/README.md index ffd88814503..725034bf424 100644 --- a/samples/textureSample/README.md +++ b/samples/cuda_core/textureSample/README.md @@ -55,5 +55,5 @@ python textureSample.py ## See Also - [`cuda.core.texture` API](https://nvidia.github.io/cuda-python/cuda-core/latest/api.html#module-cuda.core.texture) -- [`samples/glInteropFluid/`](../glInteropFluid/) — larger demo using TextureObject + SurfaceObject -- [`samples/glInteropMipmapLod/`](../glInteropMipmapLod/) — mipmap / LOD demo +- [`samples/cuda_core/glInteropFluid/`](../glInteropFluid/) — larger demo using TextureObject + SurfaceObject +- [`samples/cuda_core/glInteropMipmapLod/`](../glInteropMipmapLod/) — mipmap / LOD demo diff --git a/samples/textureSample/requirements.txt b/samples/cuda_core/textureSample/requirements.txt similarity index 100% rename from samples/textureSample/requirements.txt rename to samples/cuda_core/textureSample/requirements.txt diff --git a/samples/textureSample/textureSample.py b/samples/cuda_core/textureSample/textureSample.py similarity index 100% rename from samples/textureSample/textureSample.py rename to samples/cuda_core/textureSample/textureSample.py diff --git a/samples/threadBlockCluster/README.md b/samples/cuda_core/threadBlockCluster/README.md similarity index 100% rename from samples/threadBlockCluster/README.md rename to samples/cuda_core/threadBlockCluster/README.md diff --git a/samples/threadBlockCluster/requirements.txt b/samples/cuda_core/threadBlockCluster/requirements.txt similarity index 100% rename from samples/threadBlockCluster/requirements.txt rename to samples/cuda_core/threadBlockCluster/requirements.txt diff --git a/samples/threadBlockCluster/threadBlockCluster.py b/samples/cuda_core/threadBlockCluster/threadBlockCluster.py similarity index 100% rename from samples/threadBlockCluster/threadBlockCluster.py rename to samples/cuda_core/threadBlockCluster/threadBlockCluster.py diff --git a/samples/tmaTensorMap/README.md b/samples/cuda_core/tmaTensorMap/README.md similarity index 95% rename from samples/tmaTensorMap/README.md rename to samples/cuda_core/tmaTensorMap/README.md index 2260a0c47d0..e30d7717690 100644 --- a/samples/tmaTensorMap/README.md +++ b/samples/cuda_core/tmaTensorMap/README.md @@ -81,7 +81,7 @@ The sample: Install the required packages from `requirements.txt`: ```bash -cd /path/to/cuda-samples/python/2_CoreConcepts/tmaTensorMap +cd /path/to/cuda-python/samples/cuda_core/tmaTensorMap pip install -r requirements.txt ``` @@ -96,7 +96,7 @@ The `requirements.txt` installs: ### Basic usage ```bash -cd cuda-samples/python/2_CoreConcepts/tmaTensorMap +cd samples/cuda_core/tmaTensorMap python tmaTensorMap.py ``` @@ -129,7 +129,7 @@ replace_address verified: descriptor reused with new source tensor - `tmaTensorMap.py` - Python implementation using `cuda.core` TMA APIs - `README.md` - This file - `requirements.txt` - Sample dependencies -- `../../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` - Common utilities (imported by this sample) ## See Also diff --git a/samples/tmaTensorMap/requirements.txt b/samples/cuda_core/tmaTensorMap/requirements.txt similarity index 100% rename from samples/tmaTensorMap/requirements.txt rename to samples/cuda_core/tmaTensorMap/requirements.txt diff --git a/samples/tmaTensorMap/tmaTensorMap.py b/samples/cuda_core/tmaTensorMap/tmaTensorMap.py similarity index 98% rename from samples/tmaTensorMap/tmaTensorMap.py rename to samples/cuda_core/tmaTensorMap/tmaTensorMap.py index 50dffa4e5e4..f42cd31b255 100644 --- a/samples/tmaTensorMap/tmaTensorMap.py +++ b/samples/cuda_core/tmaTensorMap/tmaTensorMap.py @@ -50,8 +50,8 @@ On GPUs older than Hopper (sm < 90), the sample prints a diagnostic and exits cleanly. -Ported from ``cuda_core/examples/tma_tensor_map.py`` in the -`cuda-python` repository. +Migrated from the former ``cuda_core/examples/tma_tensor_map.py`` location in +the `cuda-python` repository. """ import os diff --git a/samples/vectorAdd/README.md b/samples/cuda_core/vectorAdd/README.md similarity index 95% rename from samples/vectorAdd/README.md rename to samples/cuda_core/vectorAdd/README.md index 92da961f7ab..3d3e843547b 100644 --- a/samples/vectorAdd/README.md +++ b/samples/cuda_core/vectorAdd/README.md @@ -84,7 +84,7 @@ Import stable symbols from the top-level package (not `cuda.core.experimental`). Install the required packages from requirements.txt: ```bash -cd /path/to/cuda-samples/python/1_GettingStarted/vectorAdd +cd /path/to/cuda-python/samples/cuda_core/vectorAdd pip install -r requirements.txt ``` @@ -99,7 +99,7 @@ The requirements.txt installs: ### Basic usage ```bash -cd samples/python/1_GettingStarted/vectorAdd +cd samples/cuda_core/vectorAdd python vectorAdd.py ``` @@ -145,7 +145,7 @@ Done - `vectorAdd.py` — Python implementation using cuda.core API - `README.md` — This file - `requirements.txt` — Sample dependencies -- `../../Utilities/cuda_samples_utils.py` — Common utilities (imported by this sample) +- `../Utilities/cuda_samples_utils.py` — Common utilities (imported by this sample) ## See Also diff --git a/samples/vectorAdd/requirements.txt b/samples/cuda_core/vectorAdd/requirements.txt similarity index 100% rename from samples/vectorAdd/requirements.txt rename to samples/cuda_core/vectorAdd/requirements.txt diff --git a/samples/vectorAdd/vectorAdd.py b/samples/cuda_core/vectorAdd/vectorAdd.py similarity index 100% rename from samples/vectorAdd/vectorAdd.py rename to samples/cuda_core/vectorAdd/vectorAdd.py From c93cc2d171ae15767cda65b050e837898f79fd40 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Fri, 17 Jul 2026 12:48:36 -0500 Subject: [PATCH 10/11] Review --- .../tests/example_tests/test_args.json | 9 +- .../example_tests/test_cuda_bindings_utils.py | 68 ++++++++++ .../test_interactive_sample_configuration.py | 39 ++++++ cuda_core/tests/example_tests/test_args.json | 15 +++ .../test_interactive_sample_configuration.py | 64 ++++++++++ .../tests/example_tests/test_run_samples.py | 116 ++++++++++++++++++ .../cuda_python_test_helpers/sample_runner.py | 59 +++++++-- .../globalToShmemAsyncCopy/README.md | 2 +- .../Utilities/cuda_bindings_utils.py | 39 ++++-- .../extra/isoFdModelling/README.md | 11 +- .../extra/isoFdModelling/isoFdModelling.py | 19 ++- .../extra/isoFdModelling/requirements.txt | 5 +- samples/cuda_core/glInteropFluid/README.md | 3 +- .../glInteropFluid/glInteropFluid.py | 93 +++++++++----- .../cuda_core/glInteropMipmapLod/README.md | 3 +- .../glInteropMipmapLod/glInteropMipmapLod.py | 46 +++++-- .../glInteropPlasma/glInteropPlasma.py | 21 +++- 17 files changed, 537 insertions(+), 75 deletions(-) create mode 100644 cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py create mode 100644 cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py create mode 100644 cuda_core/tests/example_tests/test_interactive_sample_configuration.py diff --git a/cuda_bindings/tests/example_tests/test_args.json b/cuda_bindings/tests/example_tests/test_args.json index 0967ef424bc..a0e2f2da8dd 100644 --- a/cuda_bindings/tests/example_tests/test_args.json +++ b/cuda_bindings/tests/example_tests/test_args.json @@ -1 +1,8 @@ -{} +{ + "cuda_bindings/extra/isoFdModelling": { + "min_gpus": 2, + "python": { + "args": ["--no-display"] + } + } +} diff --git a/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py b/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py new file mode 100644 index 00000000000..ca606da9de3 --- /dev/null +++ b/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py @@ -0,0 +1,68 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +"""Unit tests for the shared cuda.bindings sample helpers.""" + +from __future__ import annotations + +import sys +from pathlib import Path + +import pytest + +_UTILITIES_DIR = Path(__file__).resolve().parents[3] / "samples" / "cuda_bindings" / "Utilities" +sys.path.insert(0, str(_UTILITIES_DIR)) + +from cuda_bindings_utils import check_cmd_line_flag, get_cmd_line_argument_int + + +@pytest.mark.parametrize( + "argument, flag, expected", + ( + ("--device=3", "device=", 3), + ("device=3", "device=", 3), + ("--kernel=7", "kernel=", 7), + ("kernel=7", "kernel=", 7), + ), +) +@pytest.mark.agent_authored(model="gpt-5") +def test_value_flag_accepts_documented_and_legacy_forms( + monkeypatch: pytest.MonkeyPatch, argument: str, flag: str, expected: int +) -> None: + monkeypatch.setattr(sys, "argv", ["sample.py", argument]) + + assert check_cmd_line_flag(flag) + assert get_cmd_line_argument_int(flag) == expected + + +@pytest.mark.agent_authored(model="gpt-5") +def test_flag_parameter_accepts_leading_dashes(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setattr(sys, "argv", ["sample.py", "--device=4"]) + + assert check_cmd_line_flag("--device=") + assert get_cmd_line_argument_int("--device=") == 4 + + +@pytest.mark.agent_authored(model="gpt-5") +def test_bare_flag_accepts_documented_and_legacy_forms(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setattr(sys, "argv", ["sample.py", "--help", "?"]) + + assert check_cmd_line_flag("help") + assert check_cmd_line_flag("?") + + +@pytest.mark.agent_authored(model="gpt-5") +def test_flags_do_not_match_option_prefixes(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setattr(sys, "argv", ["sample.py", "--device-name=3", "--helpful"]) + + assert not check_cmd_line_flag("device=") + assert not check_cmd_line_flag("help") + assert get_cmd_line_argument_int("device=") == 0 + + +@pytest.mark.parametrize("argument", ("--device=", "--device=invalid")) +@pytest.mark.agent_authored(model="gpt-5") +def test_invalid_integer_value_preserves_zero_default(monkeypatch: pytest.MonkeyPatch, argument: str) -> None: + monkeypatch.setattr(sys, "argv", ["sample.py", argument]) + + assert check_cmd_line_flag("device=") + assert get_cmd_line_argument_int("device=") == 0 diff --git a/cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py b/cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py new file mode 100644 index 00000000000..37975e9f724 --- /dev/null +++ b/cuda_bindings/tests/example_tests/test_interactive_sample_configuration.py @@ -0,0 +1,39 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import json +import subprocess +import sys +from pathlib import Path + +import pytest + +REPO_ROOT = Path(__file__).resolve().parents[3] +CONFIG_PATH = Path(__file__).with_name("test_args.json") +SAMPLE_KEY = "cuda_bindings/extra/isoFdModelling" + + +@pytest.mark.agent_authored(model="gpt-5") +def test_iso_fd_modelling_exposes_no_display_option() -> None: + sample = REPO_ROOT / "samples" / "cuda_bindings" / "extra" / "isoFdModelling" / "isoFdModelling.py" + + result = subprocess.run( # noqa: S603 - executes a repository-owned sample + [sys.executable, str(sample), "--help"], + check=False, + capture_output=True, + text=True, + timeout=10, + ) + + assert result.returncode == 0, result.stderr + assert "--no-display" in result.stdout + + +@pytest.mark.agent_authored(model="gpt-5") +def test_iso_fd_modelling_has_headless_test_configuration() -> None: + config = json.loads(CONFIG_PATH.read_text(encoding="utf-8")) + + assert config[SAMPLE_KEY]["min_gpus"] == 2 + assert config[SAMPLE_KEY]["python"]["args"] == ["--no-display"] diff --git a/cuda_core/tests/example_tests/test_args.json b/cuda_core/tests/example_tests/test_args.json index dda4bdefb15..afa4084b917 100644 --- a/cuda_core/tests/example_tests/test_args.json +++ b/cuda_core/tests/example_tests/test_args.json @@ -5,6 +5,21 @@ "cuda_core/simpleMultiGpu": { "min_gpus": 2 }, + "cuda_core/glInteropFluid": { + "python": { + "args": ["--frames", "3"] + } + }, + "cuda_core/glInteropMipmapLod": { + "python": { + "args": ["--frames", "3"] + } + }, + "cuda_core/glInteropPlasma": { + "python": { + "args": ["--frames", "3"] + } + }, "cuda_core/reductionMultiBlockCG": { "python": { "args": ["--cuda-include-dir=$CUDA_HOME/include:$CUDA_HOME/include/cccl"] diff --git a/cuda_core/tests/example_tests/test_interactive_sample_configuration.py b/cuda_core/tests/example_tests/test_interactive_sample_configuration.py new file mode 100644 index 00000000000..6195a6dc800 --- /dev/null +++ b/cuda_core/tests/example_tests/test_interactive_sample_configuration.py @@ -0,0 +1,64 @@ +# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +from __future__ import annotations + +import ast +import json +import subprocess +import sys +from pathlib import Path + +import pytest + +REPO_ROOT = Path(__file__).resolve().parents[3] +CONFIG_PATH = Path(__file__).with_name("test_args.json") + + +def _dotted_name(node: ast.expr) -> str: + if isinstance(node, ast.Name): + return node.id + if isinstance(node, ast.Attribute): + prefix = _dotted_name(node.value) + return f"{prefix}.{node.attr}" if prefix else node.attr + return "" + + +@pytest.mark.parametrize("sample_name", ("glInteropFluid", "glInteropMipmapLod", "glInteropPlasma")) +@pytest.mark.agent_authored(model="gpt-5") +def test_interactive_gl_sample_exposes_frame_limit(sample_name: str) -> None: + sample = REPO_ROOT / "samples" / "cuda_core" / sample_name / f"{sample_name}.py" + + result = subprocess.run( # noqa: S603 - executes a repository-owned sample + [sys.executable, str(sample), "--help"], + check=False, + capture_output=True, + text=True, + timeout=10, + ) + + assert result.returncode == 0, result.stderr + assert "--frames" in result.stdout + + +@pytest.mark.parametrize("sample_name", ("glInteropFluid", "glInteropMipmapLod", "glInteropPlasma")) +@pytest.mark.agent_authored(model="gpt-5") +def test_interactive_gl_sample_has_bounded_test_configuration(sample_name: str) -> None: + config = json.loads(CONFIG_PATH.read_text(encoding="utf-8")) + + args = config[f"cuda_core/{sample_name}"]["python"]["args"] + + assert args[0] == "--frames" + assert int(args[1]) > 0 + + +@pytest.mark.parametrize("sample_name", ("glInteropFluid", "glInteropMipmapLod", "glInteropPlasma")) +@pytest.mark.agent_authored(model="gpt-5") +def test_frame_limit_exits_after_current_draw_before_closing_window(sample_name: str) -> None: + sample = REPO_ROOT / "samples" / "cuda_core" / sample_name / f"{sample_name}.py" + tree = ast.parse(sample.read_text(encoding="utf-8")) + on_draw = next(node for node in ast.walk(tree) if isinstance(node, ast.FunctionDef) and node.name == "on_draw") + calls = {_dotted_name(node.func) for node in ast.walk(on_draw) if isinstance(node, ast.Call)} + + assert "pyglet.app.exit" in calls + assert "window.close" not in calls diff --git a/cuda_core/tests/example_tests/test_run_samples.py b/cuda_core/tests/example_tests/test_run_samples.py index 8cce88c9f10..ec39888c6a3 100644 --- a/cuda_core/tests/example_tests/test_run_samples.py +++ b/cuda_core/tests/example_tests/test_run_samples.py @@ -4,6 +4,7 @@ from __future__ import annotations import importlib.metadata +import subprocess import sys from email.message import Message from pathlib import Path @@ -61,6 +62,121 @@ def _sample_entry(root: Path, category: str, name: str) -> Path: return entry +def _runtime_module(result: tuple[object, int | None] | BaseException) -> ModuleType: + runtime = ModuleType("cuda.bindings.runtime") + + def get_device_count() -> tuple[object, int | None]: + if isinstance(result, BaseException): + raise result + return result + + runtime.cudaGetDeviceCount = get_device_count + return runtime + + +@pytest.mark.parametrize( + ("result", "expected"), + [ + ((0, 3), 3), + ((100, None), 0), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_runtime_gpu_count_uses_runtime_result( + monkeypatch: pytest.MonkeyPatch, + result: tuple[object, int | None], + expected: int, +) -> None: + runtime = _runtime_module(result) + monkeypatch.setattr(run_samples._runner.importlib, "import_module", lambda _name: runtime) + + assert run_samples._runner._runtime_gpu_count() == expected + + +@pytest.mark.agent_authored(model="gpt-5") +def test_gpu_count_prefers_cuda_runtime_over_host_gpu_count(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.setenv("CUDA_VISIBLE_DEVICES", "GPU-visible") + monkeypatch.setattr(run_samples._runner, "_runtime_gpu_count", lambda: 1) + + def unexpected_nvidia_smi(*args, **kwargs): + raise AssertionError("nvidia-smi must not run when the CUDA Runtime is available") + + monkeypatch.setattr(run_samples._runner.subprocess, "run", unexpected_nvidia_smi) + + assert run_samples.get_gpu_count() == 1 + + +@pytest.mark.parametrize( + ("visible", "expected"), + [ + ("", 0), + (" ", 0), + ("-1", 0), + ("none", 0), + ("0", 1), + ("0, 2", 2), + ("GPU-01234567-89ab-cdef-0123-456789abcdef", 1), + ("MIG-GPU-01234567-89ab-cdef-0123-456789abcdef/1/2", 1), + ("MIG-01234567-89ab-cdef-0123-456789abcdef", 1), + ("NoDevFiles", 0), + ("0,-1,2", 1), + ("0,invalid,2", 1), + (",0", 0), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_gpu_count_honors_explicit_cuda_visible_devices_without_runtime( + monkeypatch: pytest.MonkeyPatch, visible: str, expected: int +) -> None: + monkeypatch.setenv("CUDA_VISIBLE_DEVICES", visible) + monkeypatch.setattr(run_samples._runner, "_runtime_gpu_count", lambda: None) + + def unexpected_nvidia_smi(*args, **kwargs): + raise AssertionError("nvidia-smi must not override CUDA_VISIBLE_DEVICES") + + monkeypatch.setattr(run_samples._runner.subprocess, "run", unexpected_nvidia_smi) + + assert run_samples.get_gpu_count() == expected + + +@pytest.mark.parametrize("exception", [ImportError("missing extension"), OSError("loader failure")]) +@pytest.mark.agent_authored(model="gpt-5") +def test_runtime_gpu_count_handles_expected_import_failures( + monkeypatch: pytest.MonkeyPatch, exception: BaseException +) -> None: + def fail_import(name: str) -> ModuleType: + raise exception + + monkeypatch.setattr(run_samples._runner.importlib, "import_module", fail_import) + + assert run_samples._runner._runtime_gpu_count() is None + + +@pytest.mark.parametrize("exception", [OSError("loader failure"), RuntimeError("runtime unavailable")]) +@pytest.mark.agent_authored(model="gpt-5") +def test_runtime_gpu_count_handles_expected_call_failures( + monkeypatch: pytest.MonkeyPatch, exception: BaseException +) -> None: + runtime = _runtime_module(exception) + monkeypatch.setattr(run_samples._runner.importlib, "import_module", lambda _name: runtime) + + assert run_samples._runner._runtime_gpu_count() is None + + +@pytest.mark.agent_authored(model="gpt-5") +def test_gpu_count_uses_nvidia_smi_only_when_visibility_is_unspecified(monkeypatch: pytest.MonkeyPatch) -> None: + monkeypatch.delenv("CUDA_VISIBLE_DEVICES", raising=False) + monkeypatch.setattr(run_samples._runner, "_runtime_gpu_count", lambda: None) + smi = subprocess.CompletedProcess( + ["nvidia-smi", "-L"], + 0, + stdout="GPU 0: first\nGPU 1: second\n MIG 1g.10gb Device 0: child\n", + ) + monkeypatch.setattr(run_samples._runner.subprocess, "run", lambda *_args, **_kwargs: smi) + + assert run_samples.get_gpu_count() == 2 + + @pytest.mark.agent_authored(model="gpt-5") def test_collection_preserves_duplicate_leaf_names_with_path_aware_ids(tmp_path: Path) -> None: _sample_entry(tmp_path, "first", "duplicate") diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py index 696df3c88c4..f8f48d214b5 100644 --- a/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py +++ b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py @@ -124,12 +124,61 @@ def load_config(config_path: Path) -> dict[str, Any]: return {k: v for k, v in data.items() if not k.startswith("_")} +def _runtime_gpu_count() -> int | None: + """Return the CUDA Runtime's visible device count, or ``None`` if unavailable.""" + try: + runtime = importlib.import_module("cuda.bindings.runtime") + except (ImportError, OSError): + return None + + try: + error, count = runtime.cudaGetDeviceCount() + except (OSError, RuntimeError): + return None + + if int(error) != 0: + return 0 + return int(count) + + +def _visible_devices_gpu_count() -> int | None: + """Return the count implied by ``CUDA_VISIBLE_DEVICES``, if it is set.""" + visible = os.environ.get("CUDA_VISIBLE_DEVICES") + if visible is None: + return None + + count = 0 + for raw_token in visible.split(","): + token = raw_token.strip() + if not token or token.lower() in {"-1", "no", "none"}: + break + if token.isascii() and token.isdecimal(): + count += 1 + continue + if token.startswith(("GPU-", "MIG-")) and len(token) > 4: + count += 1 + continue + # CUDA stops enumerating at the first invalid device identifier. + break + return count + + def get_gpu_count() -> int: - """Return the visible CUDA GPU count, conservatively 0 on error. + """Return the number of GPUs visible to CUDA, conservatively 0 on error. - Matches cuda-samples/run_tests.py::get_gpu_count(): uses ``nvidia-smi -L`` - first and falls back to ``CUDA_VISIBLE_DEVICES``. + Prefer the CUDA Runtime because it applies the driver's complete visibility + rules, including UUIDs and MIG devices. When the runtime bindings are not + available, an explicitly set ``CUDA_VISIBLE_DEVICES`` remains authoritative; + ``nvidia-smi`` is only a last-resort estimate when visibility is unspecified. """ + runtime_count = _runtime_gpu_count() + if runtime_count is not None: + return runtime_count + + visible_count = _visible_devices_gpu_count() + if visible_count is not None: + return visible_count + try: smi = subprocess.run( ["nvidia-smi", "-L"], # noqa: S607 @@ -144,10 +193,6 @@ def get_gpu_count() -> int: pass except OSError: pass - - visible = os.environ.get("CUDA_VISIBLE_DEVICES", "").strip() - if visible and visible.lower() not in {"no", "none"}: - return len([v for v in visible.split(",") if v]) return 0 diff --git a/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md index 1f1baf6b1b6..d4a7c1d0ff7 100644 --- a/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md +++ b/samples/cuda_bindings/3_CUDA_Features/globalToShmemAsyncCopy/README.md @@ -84,7 +84,7 @@ pip install -r requirements.txt ```bash python globalToShmemAsyncCopy.py # default variant -python globalToShmemAsyncCopy.py --kernel=6 # NaiveLargeChunk +python globalToShmemAsyncCopy.py --kernel=7 # NaiveLargeChunk python globalToShmemAsyncCopy.py --wA=1024 --wB=1024 # bigger matrices ``` diff --git a/samples/cuda_bindings/Utilities/cuda_bindings_utils.py b/samples/cuda_bindings/Utilities/cuda_bindings_utils.py index 66b049132de..7212874e32a 100644 --- a/samples/cuda_bindings/Utilities/cuda_bindings_utils.py +++ b/samples/cuda_bindings/Utilities/cuda_bindings_utils.py @@ -69,21 +69,40 @@ # --------------------------------------------------------------------------- +def _parse_cmd_line_option(option: str) -> tuple[str, str | None]: + """Return an option name and its optional value, ignoring leading dashes.""" + name, separator, value = option.lstrip("-").partition("=") + return name, value if separator else None + + def check_cmd_line_flag(flag: str) -> bool: - """Return True when any argv entry starts with ``flag`` (e.g. ``device=``).""" - return any(arg.startswith(flag) for arg in sys.argv[1:]) + """Return whether ``flag`` is present, with or without leading dashes. + + A trailing ``=`` denotes a value-taking option. Matching the normalized + option name exactly prevents flags such as ``--device-name`` from being + mistaken for ``--device``. + """ + normalized_flag = flag.lstrip("-") + expects_value = normalized_flag.endswith("=") + flag_name = normalized_flag.removesuffix("=") + + for arg in sys.argv[1:]: + arg_name, value = _parse_cmd_line_option(arg) + if arg_name == flag_name and (value is not None) == expects_value: + return True + return False def get_cmd_line_argument_int(flag: str) -> int: - """Return the integer following ``flag=`` in argv, or 0 if not present.""" + """Return the integer following ``flag=`` in argv, or 0 if invalid or absent.""" + flag_name = flag.lstrip("-").removesuffix("=") for arg in sys.argv[1:]: - if arg.startswith(flag): - _, _, value = arg.partition("=") - if value: - try: - return int(value) - except ValueError: - return 0 + arg_name, value = _parse_cmd_line_option(arg) + if arg_name == flag_name and value is not None: + try: + return int(value) + except ValueError: + return 0 return 0 diff --git a/samples/cuda_bindings/extra/isoFdModelling/README.md b/samples/cuda_bindings/extra/isoFdModelling/README.md index bb610d855d6..9c34300c253 100644 --- a/samples/cuda_bindings/extra/isoFdModelling/README.md +++ b/samples/cuda_bindings/extra/isoFdModelling/README.md @@ -22,9 +22,9 @@ pattern: per-device contexts, halo exchange via ``cuMemcpyPeerAsync``, and compute/comm overlap on two streams per device. Waives with exit code 2 unless there are 2+ CUDA devices with -peer-to-peer access enabled between them. The sample optionally displays -the final wavefield with ``matplotlib`` if available; the display is -skipped when ``matplotlib`` is not installed. +peer-to-peer access enabled between them. The sample displays the final +wavefield with ``matplotlib`` by default; pass ``--no-display`` for a +non-interactive run. ## What You'll Learn @@ -43,7 +43,7 @@ skipped when ``matplotlib`` is not installed. - [`cuda.bindings`](https://nvidia.github.io/cuda-python/cuda-bindings/latest/) - driver + runtime bindings - `numpy` - array plumbing on the host -- `matplotlib` (optional) - final-wavefield display +- `matplotlib` - final-wavefield display ## Key APIs @@ -83,7 +83,8 @@ pip install -r requirements.txt ## How to Run ```bash -python isoFdModelling.py +python isoFdModelling.py # Display the final wavefield +python isoFdModelling.py --no-display # Run without opening a plot ``` ## Expected Output diff --git a/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py b/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py index c01e75337f4..c53bc2ec2c0 100644 --- a/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py +++ b/samples/cuda_bindings/extra/isoFdModelling/isoFdModelling.py @@ -41,11 +41,11 @@ pattern: per-device contexts, halo exchange via cuMemcpyPeerAsync, and compute/comm overlap on two streams per device. -Note: the sample optionally displays the final wavefield with matplotlib -if it is available; when running as a smoke test in CI you can pass ---no-display (default behavior). +By default, the sample displays the final wavefield with matplotlib. When +running as a smoke test in CI, pass --no-display to skip the plot. """ +import argparse import sys from pathlib import Path @@ -208,6 +208,16 @@ verbose_prints = False +def parse_args(argv=None): + parser = argparse.ArgumentParser(description="Multi-GPU isotropic finite-difference wave propagation") + parser.add_argument( + "--no-display", + action="store_true", + help="Skip the final matplotlib wavefield display", + ) + return parser.parse_args(argv) + + def align_nx(nx, blk, nops): n_align = (int)((nx - 1) / blk) + 1 n_align *= blk @@ -833,6 +843,7 @@ def main(): if __name__ == "__main__": - display_graph = True + args = parse_args() + display_graph = not args.no_display verbose_prints = True main() diff --git a/samples/cuda_bindings/extra/isoFdModelling/requirements.txt b/samples/cuda_bindings/extra/isoFdModelling/requirements.txt index 05f280873bb..9feed4c10ca 100644 --- a/samples/cuda_bindings/extra/isoFdModelling/requirements.txt +++ b/samples/cuda_bindings/extra/isoFdModelling/requirements.txt @@ -3,7 +3,6 @@ cuda-python>=13.0.0 numpy>=1.24 -# Optional: matplotlib enables the wavefield display at the end of the run. -# The sample runs without it; the display is skipped when matplotlib is not -# available. +# Required for the default wavefield display; pass --no-display for CI or +# other non-interactive runs. matplotlib diff --git a/samples/cuda_core/glInteropFluid/README.md b/samples/cuda_core/glInteropFluid/README.md index 6167cfc1079..d6b9badbaa5 100644 --- a/samples/cuda_core/glInteropFluid/README.md +++ b/samples/cuda_core/glInteropFluid/README.md @@ -57,7 +57,8 @@ pip install -r requirements.txt ## How to Run ```bash -python glInteropFluid.py +python glInteropFluid.py # Run until the window is closed +python glInteropFluid.py --frames 3 # Render three frames, then exit ``` ## Files diff --git a/samples/cuda_core/glInteropFluid/glInteropFluid.py b/samples/cuda_core/glInteropFluid/glInteropFluid.py index aeb5864fc82..326bb710904 100644 --- a/samples/cuda_core/glInteropFluid/glInteropFluid.py +++ b/samples/cuda_core/glInteropFluid/glInteropFluid.py @@ -90,6 +90,7 @@ # dependencies = ["cuda_bindings", "cuda_core>0.6.0", "pyglet"] # /// +import argparse import colorsys import ctypes import math @@ -527,7 +528,16 @@ def seed_field(stream, kernels, config, vel_surf, dye_surf, prs_surf, seed_value # ================================== main() ================================== -def main(): +def main(argv=None): + parser = argparse.ArgumentParser(description="CUDA/OpenGL interop Stable Fluids demo") + parser.add_argument( + "--frames", + type=int, + default=None, + help="Number of frames to render before exiting (default: run until the window is closed)", + ) + args = parser.parse_args(argv) + # Waive when no display is available (headless CI, Wayland-only, etc.). import os import platform @@ -634,8 +644,43 @@ def dye_live_surf(): # --- Step 9: Render loop --- start_time = time.monotonic() frame_count = 0 + frames_rendered = 0 fps_time = start_time clock = {"last": start_time} # wall-clock time of the previous frame + resources_closed = False + + def close_resources(): + nonlocal resources_closed + if resources_closed: + return + resources_closed = True + + # Release everything we opened, in reverse order. Each of these is a + # context manager too, but pyglet owns the event loop here so we + # release explicitly to be deterministic about ordering. + resource.close() + dye_tex_a.close() + dye_tex_b.close() + dye_surf_a.close() + dye_surf_b.close() + div_tex.close() + div_surf.close() + prs_tex_a.close() + prs_tex_b.close() + prs_surf_a.close() + prs_surf_b.close() + vel_tex_a.close() + vel_tex_b.close() + vel_surf_a.close() + vel_surf_b.close() + dye_a.close() + dye_b.close() + div.close() + prs_a.close() + prs_b.close() + vel_a.close() + vel_b.close() + stream.close() def _window_to_sim(x, y): # Window: y = 0 at bottom. Simulation: y = 0 at top. Flip vertically. @@ -647,8 +692,8 @@ def _window_to_sim(x, y): def on_key_press(symbol, _modifiers): key = pyglet.window.key if symbol == key.ESCAPE: - window.close() - return + pyglet.app.exit() + return pyglet.event.EVENT_HANDLED if symbol == key.R: state["seed"] += 1 seed_field( @@ -688,7 +733,7 @@ def on_mouse_drag(x, y, dx, dy, _buttons, _modifiers): @window.event def on_draw(): - nonlocal frame_count, fps_time + nonlocal frame_count, frames_rendered, fps_time window.clear() now_t = time.monotonic() @@ -897,6 +942,7 @@ def on_draw(): # FPS counter (shown in window title) frame_count += 1 + frames_rendered += 1 now = time.monotonic() if now - fps_time >= 1.0: fps = frame_count / (now - fps_time) @@ -910,38 +956,23 @@ def on_draw(): frame_count = 0 fps_time = now + if args.frames is not None and frames_rendered >= args.frames: + # Let pyglet finish the current refresh/flip before tearing down + # the GL context and registered CUDA graphics resource. + pyglet.app.exit() + @window.event def on_close(): - # Release everything we opened, in reverse order. Each of these is a - # context manager too, but pyglet owns the event loop here so we - # release explicitly to be deterministic about ordering. - resource.close() - dye_tex_a.close() - dye_tex_b.close() - dye_surf_a.close() - dye_surf_b.close() - div_tex.close() - div_surf.close() - prs_tex_a.close() - prs_tex_b.close() - prs_surf_a.close() - prs_surf_b.close() - vel_tex_a.close() - vel_tex_b.close() - vel_surf_a.close() - vel_surf_b.close() - dye_a.close() - dye_b.close() - div.close() - prs_a.close() - prs_b.close() - vel_a.close() - vel_b.close() - stream.close() + close_resources() # Render as fast as the GPU allows; the per-step rates are scaled by real # elapsed time (see REF_FPS) so the look is frame-rate independent. - pyglet.app.run(interval=0) + try: + pyglet.app.run(interval=0) + finally: + close_resources() + window.close() + print(f"\nRendered {frames_rendered} fluid simulation frames. Done") # ======================== GPU code (CUDA + GLSL) ============================ diff --git a/samples/cuda_core/glInteropMipmapLod/README.md b/samples/cuda_core/glInteropMipmapLod/README.md index b7d206567bc..c3a47b22bd4 100644 --- a/samples/cuda_core/glInteropMipmapLod/README.md +++ b/samples/cuda_core/glInteropMipmapLod/README.md @@ -52,7 +52,8 @@ pip install -r requirements.txt ## How to Run ```bash -python glInteropMipmapLod.py +python glInteropMipmapLod.py # Run until the window is closed +python glInteropMipmapLod.py --frames 3 # Render three frames, then exit ``` ## Files diff --git a/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py b/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py index c4c1ff4afd2..f2a4fdefd5e 100644 --- a/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py +++ b/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py @@ -85,6 +85,7 @@ # dependencies = ["cuda_bindings", "cuda_core>0.6.0", "pyglet"] # /// +import argparse import ctypes import math import sys @@ -401,7 +402,16 @@ def draw_fullscreen_quad(gl, shader_prog, vao_id, tex_id): # ================================== main() ================================== -def main(): +def main(argv=None): + parser = argparse.ArgumentParser(description="CUDA/OpenGL interop mipmapped LOD demo") + parser.add_argument( + "--frames", + type=int, + default=None, + help="Number of frames to render before exiting (default: run until the window is closed)", + ) + args = parser.parse_args(argv) + # Waive when no display is available (headless CI, Wayland-only, etc.). import os import platform @@ -463,7 +473,9 @@ def main(): state = {"zoom": 1.0, "lod_bias": 0.0} start_time = time.monotonic() frame_count = [0] + frames_rendered = [0] fps_time = [start_time] + resources_closed = [False] block = (16, 16, 1) grid = ( @@ -473,6 +485,18 @@ def main(): ) config = LaunchConfig(grid=grid, block=block) + def close_resources(): + if resources_closed[0]: + return + resources_closed[0] = True + + # Release CUDA-side resources in reverse construction order. GL + # objects clean up via pyglet on window close. + resource.close() + display_tex.close() + mip.close() + stream.close() + def effective_lod(): # Same formula the display kernel uses, clamped to the legal range so # the window title matches what the GPU actually sees. @@ -505,6 +529,7 @@ def on_draw(): draw_fullscreen_quad(gl, shader_prog, quad_vao, tex_id) frame_count[0] += 1 + frames_rendered[0] += 1 now = time.monotonic() if now - fps_time[0] >= 1.0: fps = frame_count[0] / (now - fps_time[0]) @@ -518,6 +543,11 @@ def on_draw(): frame_count[0] = 0 fps_time[0] = now + if args.frames is not None and frames_rendered[0] >= args.frames: + # Let pyglet finish the current refresh/flip before tearing down + # the GL context and registered CUDA graphics resource. + pyglet.app.exit() + @window.event def on_mouse_scroll(_x, _y, _scroll_x, scroll_y): # One wheel step changes zoom by ~12.5%. Clamped to keep LOD in range. @@ -539,14 +569,14 @@ def on_key_press(symbol, _modifiers): @window.event def on_close(): - # Release CUDA-side resources in reverse construction order. GL - # objects clean up via pyglet on window close. - resource.close() - display_tex.close() - mip.close() - stream.close() + close_resources() - pyglet.app.run(interval=0) + try: + pyglet.app.run(interval=0) + finally: + close_resources() + window.close() + print(f"\nRendered {frames_rendered[0]} mipmapped LOD frames. Done") # ======================== GPU code (CUDA + GLSL) ============================ diff --git a/samples/cuda_core/glInteropPlasma/glInteropPlasma.py b/samples/cuda_core/glInteropPlasma/glInteropPlasma.py index 7d447ceebe8..c890809b2bb 100644 --- a/samples/cuda_core/glInteropPlasma/glInteropPlasma.py +++ b/samples/cuda_core/glInteropPlasma/glInteropPlasma.py @@ -333,6 +333,15 @@ def main(): frame_count = 0 fps_time = start_time frames_rendered = 0 + resources_closed = False + + def close_resources(): + nonlocal resources_closed + if resources_closed: + return + resources_closed = True + resource.close() + stream.close() @window.event def on_draw(): @@ -380,13 +389,19 @@ def on_draw(): # Terminate after --frames iterations when not interactive. if not args.interactive and frames_rendered >= args.frames: - window.close() + # Let pyglet finish the current refresh/flip before tearing down + # the GL context and registered CUDA graphics resource. + pyglet.app.exit() @window.event def on_close(): - resource.close() + close_resources() - pyglet.app.run(interval=0) + try: + pyglet.app.run(interval=0) + finally: + close_resources() + window.close() print(f"\nRendered {frames_rendered} frames via CUDA/OpenGL interop. Done") return 0 From 035cf3292883ffac589ae124092961bea14a2858 Mon Sep 17 00:00:00 2001 From: Daniel Rodriguez Date: Fri, 17 Jul 2026 14:07:03 -0500 Subject: [PATCH 11/11] Fix sample runner error and waiver handling --- .../example_tests/test_cuda_bindings_utils.py | 33 ++- .../tests/example_tests/test_run_samples.py | 188 ++++++++++++++++++ .../example_tests/test_sample_verification.py | 86 ++++++++ .../cuda_python_test_helpers/sample_runner.py | 145 +++++++++++--- samples/cuda_bindings/Utilities/README.md | 8 +- .../Utilities/cuda_bindings_utils.py | 17 +- .../blurImageUnifiedMemory/README.md | 4 +- .../blurImageUnifiedMemory.py | 6 +- .../glInteropFluid/glInteropFluid.py | 11 +- .../glInteropMipmapLod/glInteropMipmapLod.py | 9 +- .../glInteropPlasma/glInteropPlasma.py | 4 +- samples/cuda_core/ipcMemoryPool/README.md | 2 +- .../cuda_core/ipcMemoryPool/ipcMemoryPool.py | 8 +- .../cuda_core/launchConfigTuning/README.md | 3 +- .../launchConfigTuning/launchConfigTuning.py | 6 +- samples/cuda_core/memoryResources/README.md | 4 +- .../memoryResources/memoryResources.py | 6 +- samples/cuda_core/pageRank/README.md | 4 +- samples/cuda_core/pageRank/pageRank.py | 7 +- samples/cuda_core/processCheckpoint/README.md | 3 + .../processCheckpoint/processCheckpoint.py | 8 +- samples/cuda_core/simpleMultiGpu/README.md | 2 +- .../simpleMultiGpu/simpleMultiGpu.py | 6 +- samples/cuda_core/simpleP2P/simpleP2P.py | 7 +- .../stridedMemoryViewConstructors.py | 6 +- .../cuda_core/threadBlockCluster/README.md | 2 +- .../threadBlockCluster/threadBlockCluster.py | 4 +- samples/cuda_core/tmaTensorMap/README.md | 2 +- .../cuda_core/tmaTensorMap/tmaTensorMap.py | 7 +- 29 files changed, 510 insertions(+), 88 deletions(-) diff --git a/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py b/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py index ca606da9de3..81f581cf619 100644 --- a/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py +++ b/cuda_bindings/tests/example_tests/test_cuda_bindings_utils.py @@ -12,7 +12,12 @@ _UTILITIES_DIR = Path(__file__).resolve().parents[3] / "samples" / "cuda_bindings" / "Utilities" sys.path.insert(0, str(_UTILITIES_DIR)) -from cuda_bindings_utils import check_cmd_line_flag, get_cmd_line_argument_int +from cuda_bindings_utils import ( + WAIVER_EXIT_CODE_ENV, + check_cmd_line_flag, + get_cmd_line_argument_int, + requirement_not_met, +) @pytest.mark.parametrize( @@ -66,3 +71,29 @@ def test_invalid_integer_value_preserves_zero_default(monkeypatch: pytest.Monkey assert check_cmd_line_flag("device=") assert get_cmd_line_argument_int("device=") == 0 + + +@pytest.mark.agent_authored(model="gpt-5") +def test_requirement_not_met_uses_standalone_waiver_code( + monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str] +) -> None: + monkeypatch.delenv(WAIVER_EXIT_CODE_ENV, raising=False) + + with pytest.raises(SystemExit) as exc_info: + requirement_not_met("unsupported configuration") + + assert exc_info.value.code == 2 + assert capsys.readouterr().err == "unsupported configuration\n" + + +@pytest.mark.agent_authored(model="gpt-5") +def test_requirement_not_met_uses_negotiated_waiver_code( + monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str] +) -> None: + monkeypatch.setenv(WAIVER_EXIT_CODE_ENV, "77") + + with pytest.raises(SystemExit) as exc_info: + requirement_not_met("unsupported configuration") + + assert exc_info.value.code == 77 + assert capsys.readouterr().err == "unsupported configuration\n" diff --git a/cuda_core/tests/example_tests/test_run_samples.py b/cuda_core/tests/example_tests/test_run_samples.py index ec39888c6a3..0b2e1344ce3 100644 --- a/cuda_core/tests/example_tests/test_run_samples.py +++ b/cuda_core/tests/example_tests/test_run_samples.py @@ -4,6 +4,7 @@ from __future__ import annotations import importlib.metadata +import json import subprocess import sys from email.message import Message @@ -231,6 +232,193 @@ def test_namespaced_config_lookup_falls_back_to_legacy_leaf_key(tmp_path: Path) assert plan.args == ["compatible"] +@pytest.mark.agent_authored(model="gpt-5") +def test_load_config_accepts_valid_schema_and_ignores_comments(tmp_path: Path) -> None: + config_path = tmp_path / "test_args.json" + config_path.write_text( + json.dumps( + { + "_comment": None, + "sample": { + "skip": False, + "min_gpus": 2, + "python": {"args": ["--option", "value"], "launcher": ["mpirun", "-np", "2"]}, + }, + } + ), + encoding="utf-8", + ) + + assert run_samples.load_config(config_path) == { + "sample": { + "skip": False, + "min_gpus": 2, + "python": {"args": ["--option", "value"], "launcher": ["mpirun", "-np", "2"]}, + } + } + + +@pytest.mark.agent_authored(model="gpt-5") +def test_load_config_rejects_missing_file(tmp_path: Path) -> None: + config_path = tmp_path / "missing.json" + + with pytest.raises(run_samples._runner.InvalidSampleConfig, match="cannot read configuration"): + run_samples.load_config(config_path) + + +@pytest.mark.parametrize( + ("payload", "message"), + [ + ("{", "invalid JSON"), + ("[]", "must contain a JSON object"), + ("null", "must contain a JSON object"), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_load_config_rejects_malformed_or_non_object_json(tmp_path: Path, payload: str, message: str) -> None: + config_path = tmp_path / "test_args.json" + config_path.write_text(payload, encoding="utf-8") + + with pytest.raises(run_samples._runner.InvalidSampleConfig, match=message): + run_samples.load_config(config_path) + + +@pytest.mark.parametrize( + ("entry", "message"), + [ + (None, "must be an object"), + ({"unknown": True}, "unknown field"), + ({"skip": None}, "'skip' must be a boolean"), + ({"skip": 1}, "'skip' must be a boolean"), + ({"min_gpus": True}, "'min_gpus' must be a positive integer"), + ({"min_gpus": 0}, "'min_gpus' must be a positive integer"), + ({"min_gpus": "2"}, "'min_gpus' must be a positive integer"), + ({"python": None}, "'python' must be an object"), + ({"python": []}, "'python' must be an object"), + ({"python": {"unknown": []}}, "'python' has unknown field"), + ({"python": {"args": None}}, "'args' must be a list of strings"), + ({"python": {"args": "--option"}}, "'args' must be a list of strings"), + ({"python": {"args": ["--option", 1]}}, "'args' must be a list of strings"), + ({"python": {"launcher": None}}, "'launcher' must be a list of strings"), + ({"python": {"launcher": ["mpirun", 2]}}, "'launcher' must be a list of strings"), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_load_config_rejects_invalid_entry_schema(tmp_path: Path, entry: object, message: str) -> None: + config_path = tmp_path / "test_args.json" + config_path.write_text(json.dumps({"sample": entry}), encoding="utf-8") + + with pytest.raises(run_samples._runner.InvalidSampleConfig, match=message): + run_samples.load_config(config_path) + + +@pytest.mark.parametrize( + "config", + [ + {"sample": {"skip": True, "python": {"args": None}}}, + {"sample": {"min_gpus": 2, "python": {"args": None}}}, + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_build_run_plan_validates_config_before_skip_or_gpu_gating(tmp_path: Path, config: dict[str, object]) -> None: + sample = tmp_path / "sample" / "sample.py" + sample.parent.mkdir() + sample.write_text("print('not executed')\n", encoding="utf-8") + + with pytest.raises(run_samples._runner.InvalidSampleConfig, match="'args' must be a list of strings"): + run_samples.build_run_plan(sample, config, gpu_count=0) + + +@pytest.mark.parametrize("timeout", [True, 0, -1, 1.5, "10"]) +@pytest.mark.agent_authored(model="gpt-5") +def test_build_run_plan_rejects_invalid_timeout(tmp_path: Path, timeout: object) -> None: + sample = tmp_path / "sample" / "sample.py" + sample.parent.mkdir() + sample.write_text("print('not executed')\n", encoding="utf-8") + + with pytest.raises(run_samples._runner.InvalidSampleConfig, match="timeout must be a positive integer"): + run_samples.build_run_plan(sample, {}, gpu_count=1, timeout=timeout) + + +@pytest.mark.agent_authored(model="gpt-5") +def test_cli_reports_invalid_config_before_detecting_gpus( + tmp_path: Path, monkeypatch: pytest.MonkeyPatch, capsys: pytest.CaptureFixture[str] +) -> None: + samples_dir = tmp_path / "samples" + _sample_entry(samples_dir, "category", "sample") + config_path = tmp_path / "test_args.json" + config_path.write_text('{"sample": {"python": {"args": null}}}', encoding="utf-8") + + def unexpected_gpu_detection() -> int: + raise AssertionError("GPU detection must not run for invalid configuration") + + monkeypatch.setattr(run_samples._runner, "get_gpu_count", unexpected_gpu_detection) + + return_code = run_samples._runner.main( + ["--config", str(config_path)], + default_samples_dir=samples_dir, + default_config=config_path, + ) + + assert return_code == 1 + assert "Error: invalid sample configuration" in capsys.readouterr().out + + +@pytest.mark.parametrize( + "option", + [ + ["--parallel", "0"], + ["--parallel", "-1"], + ["--parallel", "many"], + ["--timeout", "0"], + ["--timeout", "-1"], + ["--timeout", "forever"], + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_cli_rejects_non_positive_parallelism_and_timeout(tmp_path: Path, option: list[str]) -> None: + with pytest.raises(SystemExit) as exc_info: + run_samples._runner.main( + option, + default_samples_dir=tmp_path / "samples", + default_config=tmp_path / "test_args.json", + ) + + assert exc_info.value.code == 2 + + +@pytest.mark.agent_authored(model="gpt-5") +def test_child_argparse_exit_code_is_a_failure(tmp_path: Path) -> None: + sample = tmp_path / "sample.py" + sample.write_text( + "import argparse\n" + "parser = argparse.ArgumentParser()\n" + "parser.add_argument('--required', required=True)\n" + "parser.parse_args()\n", + encoding="utf-8", + ) + + result = run_samples.run_sample(run_samples.RunPlan(sample, [], [], timeout=10)) + + assert result.status == "FAIL" + assert result.return_code == 2 + + +@pytest.mark.agent_authored(model="gpt-5") +def test_runner_propagates_negotiated_waiver_exit_code(tmp_path: Path) -> None: + sample = tmp_path / "sample.py" + sample.write_text( + "import os\nraise SystemExit(int(os.environ['CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE']))\n", + encoding="utf-8", + ) + + result = run_samples.run_sample(run_samples.RunPlan(sample, [], [], timeout=10)) + + assert result.status == "WAIVED" + assert result.return_code == 77 + assert result.detail == "sample-reported" + + @pytest.mark.parametrize( ("version", "requirement", "is_met"), [ diff --git a/cuda_core/tests/example_tests/test_sample_verification.py b/cuda_core/tests/example_tests/test_sample_verification.py index 059f11cf926..7fc27a63302 100644 --- a/cuda_core/tests/example_tests/test_sample_verification.py +++ b/cuda_core/tests/example_tests/test_sample_verification.py @@ -3,6 +3,7 @@ from __future__ import annotations +import ast from pathlib import Path import numpy as np @@ -12,6 +13,91 @@ REPO_ROOT = Path(__file__).resolve().parents[3] UTILITIES_DIR = REPO_ROOT / "samples" / "cuda_core" / "Utilities" +WAIVER_SAMPLE_NAMES = ( + "blurImageUnifiedMemory", + "glInteropFluid", + "glInteropMipmapLod", + "glInteropPlasma", + "ipcMemoryPool", + "launchConfigTuning", + "memoryResources", + "pageRank", + "processCheckpoint", + "simpleMultiGpu", + "simpleP2P", + "stridedMemoryViewConstructors", + "threadBlockCluster", + "tmaTensorMap", +) + + +@pytest.mark.parametrize("sample_name", WAIVER_SAMPLE_NAMES) +@pytest.mark.agent_authored(model="gpt-5") +def test_core_sample_waivers_use_negotiated_exit_code( + sample_name: str, +) -> None: + sample_path = REPO_ROOT / "samples" / "cuda_core" / sample_name / f"{sample_name}.py" + tree = ast.parse(sample_path.read_text(encoding="utf-8"), filename=str(sample_path)) + + assignments = [ + node + for node in tree.body + if isinstance(node, ast.Assign) + and any(isinstance(target, ast.Name) and target.id == "EXIT_WAIVED" for target in node.targets) + ] + assert len(assignments) == 1 + expected_assignment = ast.parse( + 'EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2"))' + ).body[0] + assert isinstance(expected_assignment, ast.Assign) + assert ast.dump(assignments[0].value) == ast.dump(expected_assignment.value) + + legacy_waivers = [] + for node in ast.walk(tree): + if (isinstance(node, ast.Return) and isinstance(node.value, ast.Constant) and node.value.value == 2) or ( + isinstance(node, ast.Call) + and isinstance(node.func, ast.Attribute) + and isinstance(node.func.value, ast.Name) + and node.func.value.id == "sys" + and node.func.attr == "exit" + and node.args + and isinstance(node.args[0], ast.Constant) + and node.args[0].value == 2 + ): + legacy_waivers.append(node.lineno) + assert not legacy_waivers, f"literal exit-2 waivers remain at lines {legacy_waivers}" + + +@pytest.mark.parametrize( + ("sample_name", "unsupported_condition"), + [ + ("ipcMemoryPool", "not check_ipc_support(device)"), + ("processCheckpoint", 'sys.platform != "linux"'), + ("processCheckpoint", "device.properties.integrated"), + ("tmaTensorMap", "arch < (9, 0)"), + ], +) +@pytest.mark.agent_authored(model="gpt-5") +def test_unsupported_core_sample_paths_return_waiver( + sample_name: str, + unsupported_condition: str, +) -> None: + sample_path = REPO_ROOT / "samples" / "cuda_core" / sample_name / f"{sample_name}.py" + tree = ast.parse(sample_path.read_text(encoding="utf-8"), filename=str(sample_path)) + expected_condition = ast.parse(unsupported_condition, mode="eval").body + + matching_branches = [ + node + for node in ast.walk(tree) + if isinstance(node, ast.If) and ast.dump(node.test) == ast.dump(expected_condition) + ] + assert len(matching_branches) == 1 + waiver_returns = [ + node + for node in matching_branches[0].body + if isinstance(node, ast.Return) and isinstance(node.value, ast.Name) and node.value.id == "EXIT_WAIVED" + ] + assert len(waiver_returns) == 1 @pytest.mark.agent_authored(model="gpt-5") diff --git a/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py index f8f48d214b5..4956e91b347 100644 --- a/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py +++ b/cuda_python_test_helpers/cuda_python_test_helpers/sample_runner.py @@ -6,9 +6,9 @@ Package-owned wrappers provide their sample root, namespace, and ``test_args.json`` path. Samples are executed in isolated subprocesses. -Exit-code contract (matches cuda-samples): +Exit-code contract: 0 -> sample passed - 2 -> sample waived (missing dependency / unmet hardware requirement) + 77 -> sample waived when negotiated through the runner environment * -> sample failed """ @@ -37,7 +37,8 @@ # Default timeout per sample run (seconds). Match cuda-samples. DEFAULT_TIMEOUT = 300 -EXIT_WAIVED = 2 +EXIT_WAIVED = 77 +WAIVER_EXIT_CODE_ENV = "CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE" _print_lock = threading.Lock() @@ -108,20 +109,78 @@ def collect_sample_entries(samples_dir: Path, namespace: str | None = None) -> d # --------------------------------------------------------------------------- +class InvalidSampleConfig(ValueError): # noqa: N818 - requested public exception name + """The sample runner configuration does not match its expected schema.""" + + +_ENTRY_FIELDS = frozenset({"skip", "min_gpus", "python"}) +_PYTHON_FIELDS = frozenset({"args", "launcher"}) + + +def _validate_string_list(value: Any, *, field: str, location: str) -> list[str]: + if not isinstance(value, list) or any(not isinstance(item, str) for item in value): + raise InvalidSampleConfig(f"{location}: {field!r} must be a list of strings") + return value + + +def _validate_config_entry(key: str, value: Any, *, source: str) -> dict[str, Any]: + location = f"{source}: entry {key!r}" + if not isinstance(value, dict): + raise InvalidSampleConfig(f"{location} must be an object") + + unknown_fields = set(value) - _ENTRY_FIELDS + if unknown_fields: + fields = ", ".join(repr(field) for field in sorted(unknown_fields)) + raise InvalidSampleConfig(f"{location} has unknown field(s): {fields}") + + if "skip" in value and not isinstance(value["skip"], bool): + raise InvalidSampleConfig(f"{location}: 'skip' must be a boolean") + + if "min_gpus" in value: + min_gpus = value["min_gpus"] + if isinstance(min_gpus, bool) or not isinstance(min_gpus, int) or min_gpus < 1: + raise InvalidSampleConfig(f"{location}: 'min_gpus' must be a positive integer") + + if "python" in value: + python_cfg = value["python"] + if not isinstance(python_cfg, dict): + raise InvalidSampleConfig(f"{location}: 'python' must be an object") + + unknown_python_fields = set(python_cfg) - _PYTHON_FIELDS + if unknown_python_fields: + fields = ", ".join(repr(field) for field in sorted(unknown_python_fields)) + raise InvalidSampleConfig(f"{location}: 'python' has unknown field(s): {fields}") + + for field in _PYTHON_FIELDS: + if field in python_cfg: + _validate_string_list(python_cfg[field], field=field, location=f"{location}: 'python'") + + return value + + +def _validate_config(data: Any, *, source: str) -> dict[str, Any]: + if not isinstance(data, dict): + raise InvalidSampleConfig(f"{source} must contain a JSON object") + + config: dict[str, Any] = {} + for key, value in data.items(): + if not isinstance(key, str): + raise InvalidSampleConfig(f"{source} contains a non-string entry name") + if key.startswith("_"): + continue + config[key] = _validate_config_entry(key, value, source=source) + return config + + def load_config(config_path: Path) -> dict[str, Any]: - if not config_path.is_file(): - return {} try: - with open(config_path, encoding="utf-8") as fh: + with config_path.open(encoding="utf-8") as fh: data = json.load(fh) except json.JSONDecodeError as exc: - _safe_print(f"Warning: failed to parse {config_path}: {exc}") - return {} - if not isinstance(data, dict): - _safe_print(f"Warning: {config_path} must contain a JSON object") - return {} - # Drop any keys starting with '_' (used for comments). - return {k: v for k, v in data.items() if not k.startswith("_")} + raise InvalidSampleConfig(f"{config_path}: invalid JSON: {exc}") from exc + except OSError as exc: + raise InvalidSampleConfig(f"{config_path}: cannot read configuration: {exc}") from exc + return _validate_config(data, source=str(config_path)) def _runtime_gpu_count() -> int | None: @@ -352,12 +411,20 @@ def build_run_plan( The returned plan carries either a ``skip_reason`` (sample must be waived) or the command components to invoke. """ + if isinstance(timeout, bool) or not isinstance(timeout, int) or timeout < 1: + raise InvalidSampleConfig("sample timeout must be a positive integer") + if not isinstance(config, dict): + raise InvalidSampleConfig("sample configuration must be an object") + # Namespaced keys prevent collisions. The leaf fallback keeps existing # cuda-samples-style configuration files compatible. if sample_key is not None and sample_key in config: + config_key = sample_key sample_cfg = config[sample_key] else: - sample_cfg = config.get(sample.parent.name, {}) + config_key = sample.parent.name + sample_cfg = config.get(config_key, {}) + sample_cfg = _validate_config_entry(config_key, sample_cfg, source="sample configuration") if sample_cfg.get("skip"): return RunPlan( @@ -369,7 +436,7 @@ def build_run_plan( sample_key=sample_key, ) - required_gpus = int(sample_cfg.get("min_gpus", 1)) + required_gpus = sample_cfg.get("min_gpus", 1) if required_gpus > gpu_count: return RunPlan( sample, @@ -381,22 +448,13 @@ def build_run_plan( ) python_cfg = sample_cfg.get("python", {}) - raw_args = python_cfg.get("args", []) or [] - raw_launcher = python_cfg.get("launcher", []) or [] - if not isinstance(raw_args, list) or not isinstance(raw_launcher, list): - return RunPlan( - sample, - [], - [], - timeout, - skip_reason="invalid config: 'args' and 'launcher' must be lists", - sample_key=sample_key, - ) + raw_args = python_cfg.get("args", []) + raw_launcher = python_cfg.get("launcher", []) return RunPlan( sample=sample, - args=[_expand_env(str(a)) for a in raw_args], - launcher=[_expand_env(str(a)) for a in raw_launcher], + args=[_expand_env(arg) for arg in raw_args], + launcher=[_expand_env(arg) for arg in raw_launcher], timeout=timeout, sample_key=sample_key, ) @@ -437,6 +495,8 @@ def run_sample(plan: RunPlan) -> RunResult: cmd = list(plan.launcher) + [sys.executable, str(sample)] + list(plan.args) _safe_print(f" [RUN ] {name}: {' '.join(cmd)}") + child_env = os.environ.copy() + child_env[WAIVER_EXIT_CODE_ENV] = str(EXIT_WAIVED) try: proc = subprocess.run( # noqa: S603 @@ -446,6 +506,7 @@ def run_sample(plan: RunPlan) -> RunResult: text=True, timeout=plan.timeout, check=False, + env=child_env, ) except subprocess.TimeoutExpired: _safe_print(f" [TIMEOUT] {name}: exceeded {plan.timeout}s") @@ -476,6 +537,16 @@ def run_sample(plan: RunPlan) -> RunResult: # --------------------------------------------------------------------------- +def _positive_int(value: str) -> int: + try: + parsed = int(value) + except ValueError as exc: + raise argparse.ArgumentTypeError(f"expected a positive integer, got {value!r}") from exc + if parsed < 1: + raise argparse.ArgumentTypeError(f"expected a positive integer, got {value!r}") + return parsed + + def main( argv: list[str] | None = None, *, @@ -498,7 +569,7 @@ def main( ) parser.add_argument( "--parallel", - type=int, + type=_positive_int, default=1, help="Maximum number of samples to run concurrently (default: 1)", ) @@ -510,7 +581,7 @@ def main( ) parser.add_argument( "--timeout", - type=int, + type=_positive_int, default=DEFAULT_TIMEOUT, help=f"Per-sample timeout in seconds (default: {DEFAULT_TIMEOUT})", ) @@ -528,12 +599,22 @@ def main( _safe_print("No samples found.") return 1 - config = load_config(args.config.resolve()) + try: + config = load_config(args.config.resolve()) + except InvalidSampleConfig as exc: + _safe_print(f"Error: invalid sample configuration: {exc}") + return 1 gpu_count = get_gpu_count() _safe_print(f"Detected {gpu_count} GPU(s).") _safe_print(f"Running {len(entries)} sample(s) with parallelism={args.parallel}\n") - plans = [build_run_plan(sample, config, gpu_count, args.timeout, sample_key=key) for key, sample in entries.items()] + try: + plans = [ + build_run_plan(sample, config, gpu_count, args.timeout, sample_key=key) for key, sample in entries.items() + ] + except InvalidSampleConfig as exc: + _safe_print(f"Error: invalid sample configuration: {exc}") + return 1 if args.parallel <= 1: results = [run_sample(plan) for plan in plans] diff --git a/samples/cuda_bindings/Utilities/README.md b/samples/cuda_bindings/Utilities/README.md index 3c983d1947c..b22b4289cab 100644 --- a/samples/cuda_bindings/Utilities/README.md +++ b/samples/cuda_bindings/Utilities/README.md @@ -7,7 +7,8 @@ low-level `cuda.bindings` APIs directly. It provides: - NVRTC compilation and CUDA module loading through `KernelHelper` - Runtime and driver API device selection - Command-line flag helpers used by CUDA sample ports -- Consistent requirement waivers using exit code 2 +- Consistent requirement waivers using exit code 2 standalone, or the distinct + code negotiated by the automated sample runner ## Using the Helpers @@ -33,3 +34,8 @@ python clockNvrtc.py These helpers support the samples and are not part of the public `cuda.bindings` API. + +`requirement_not_met()` reads `CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE` when it is +set by an orchestrator. The repository sample runner sets it to `77`, keeping +intentional waivers distinct from command-line parser errors, which use exit +code `2`. Direct standalone execution retains exit code `2` for compatibility. diff --git a/samples/cuda_bindings/Utilities/cuda_bindings_utils.py b/samples/cuda_bindings/Utilities/cuda_bindings_utils.py index 7212874e32a..aeb1ae14ea6 100644 --- a/samples/cuda_bindings/Utilities/cuda_bindings_utils.py +++ b/samples/cuda_bindings/Utilities/cuda_bindings_utils.py @@ -41,17 +41,19 @@ * ``check_cmd_line_flag(flag)`` / ``get_cmd_line_argument_int(flag)`` -- minimal CLI flag helpers used by the upstream cuda-samples style. * ``requirement_not_met(msg)`` -- print ``msg`` to stderr and exit with the - orchestrator-recognized WAIVED status (exit code 2). + negotiated WAIVED status (exit code 2 when run standalone). * ``check_compute_capability_too_low(dev_id, (major, minor))`` -- waive when the current device is below a required compute capability. These helpers were adapted from the private example-helpers module that -used to ship with ``cuda.bindings`` before the examples migration, with -one difference: ``requirement_not_met`` exits with code 2 (WAIVED, -recognized by the ``samples/`` orchestrator) rather than the historic -code 1. +used to ship with ``cuda.bindings`` before the examples migration. When a +sample is run standalone, ``requirement_not_met`` exits with the historical +WAIVED code 2. The sample runner sets +``CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE`` to a distinct code so command-line +parser failures, which also use code 2, are not mistaken for waivers. """ +import os import sys import numpy as np @@ -62,6 +64,7 @@ from cuda.bindings import runtime as cudart EXIT_WAIVED = 2 +WAIVER_EXIT_CODE_ENV = "CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE" # --------------------------------------------------------------------------- @@ -112,9 +115,9 @@ def get_cmd_line_argument_int(flag: str) -> int: def requirement_not_met(message: str) -> None: - """Print ``message`` to stderr and exit with WAIVED status (exit code 2).""" + """Print ``message`` to stderr and exit with the negotiated WAIVED status.""" print(message, file=sys.stderr) - sys.exit(EXIT_WAIVED) + sys.exit(int(os.environ.get(WAIVER_EXIT_CODE_ENV, EXIT_WAIVED))) # --------------------------------------------------------------------------- diff --git a/samples/cuda_core/blurImageUnifiedMemory/README.md b/samples/cuda_core/blurImageUnifiedMemory/README.md index 5f77f596705..da5b0028cce 100644 --- a/samples/cuda_core/blurImageUnifiedMemory/README.md +++ b/samples/cuda_core/blurImageUnifiedMemory/README.md @@ -116,8 +116,8 @@ This sample relies on `ManagedMemoryResource` with **concurrent host access** to managed allocations while GPU kernels are in flight. That behavior requires the device property `concurrent_managed_access=True`, which is only supported on Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) -the property is `False`, so the sample exits early with a waive message and -exit code `2` instead of attempting a run that would crash the process. +the property is `False`, so the sample exits early with a waive message +instead of attempting a run that would crash the process. ## Installation diff --git a/samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py b/samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py index 062a966552c..a1a1e5ad423 100644 --- a/samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py +++ b/samples/cuda_core/blurImageUnifiedMemory/blurImageUnifiedMemory.py @@ -35,6 +35,7 @@ launch, and unified memory allocation. """ +import os import sys try: @@ -57,6 +58,9 @@ sys.exit(1) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + + # CUDA kernel source code - compiled at runtime by cuda.core.Program BOX_BLUR_KERNEL_CODE = r""" extern "C" __global__ @@ -206,7 +210,7 @@ def main(): "access, which is not supported on Windows " "(concurrent_managed_access=False). Waiving this sample." ) - sys.exit(2) + sys.exit(EXIT_WAIVED) print("=" * 60) print("Image Blur with Unified Memory (cuda.core)") diff --git a/samples/cuda_core/glInteropFluid/glInteropFluid.py b/samples/cuda_core/glInteropFluid/glInteropFluid.py index 326bb710904..0f6b9238594 100644 --- a/samples/cuda_core/glInteropFluid/glInteropFluid.py +++ b/samples/cuda_core/glInteropFluid/glInteropFluid.py @@ -94,6 +94,8 @@ import colorsys import ctypes import math +import os +import platform import random import sys import time @@ -138,6 +140,7 @@ # This is the single extra kernel that turns soft blobs into crisp curling # plumes. Tunable: ~0.1-0.3 reads well at DT=1.0; higher gets turbulent. VORTICITY = 0.28 # confinement strength (0.0 disables it) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) # Auto-bursts keep the simulation alive and colorful without any input: when # the mouse is idle we periodically drop a big blob of a random bright color @@ -539,13 +542,9 @@ def main(argv=None): args = parser.parse_args(argv) # Waive when no display is available (headless CI, Wayland-only, etc.). - import os - import platform - import sys - if platform.system() == "Linux" and not os.environ.get("DISPLAY"): print("No DISPLAY available; waiving glInteropFluid.", file=sys.stderr) - sys.exit(2) + sys.exit(EXIT_WAIVED) # --- Step 1: Set up CUDA (compile kernels, create stream) --- dev, stream, kernels, config = setup_cuda() @@ -555,7 +554,7 @@ def main(argv=None): window, gl, pyglet = create_window() except Exception as exc: print(f"Could not open a pyglet window ({exc}); waiving glInteropFluid.", file=sys.stderr) - sys.exit(2) + sys.exit(EXIT_WAIVED) # --- Step 3: Create GL resources for drawing a texture to screen --- # (Standard OpenGL boilerplate -- not CUDA-specific.) diff --git a/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py b/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py index f2a4fdefd5e..32bc74fe9f2 100644 --- a/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py +++ b/samples/cuda_core/glInteropMipmapLod/glInteropMipmapLod.py @@ -88,6 +88,8 @@ import argparse import ctypes import math +import os +import platform import sys import time @@ -120,6 +122,7 @@ HEIGHT = 600 BASE_SIZE = 512 # Texture base-level edge length (must be a power of two). LOD_BIAS_STEP = 0.25 +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) # ============================= Helper functions ============================= @@ -413,13 +416,9 @@ def main(argv=None): args = parser.parse_args(argv) # Waive when no display is available (headless CI, Wayland-only, etc.). - import os - import platform - import sys - if platform.system() == "Linux" and not os.environ.get("DISPLAY"): print("No DISPLAY available; waiving glInteropMipmapLod.", file=sys.stderr) - sys.exit(2) + sys.exit(EXIT_WAIVED) # --- Step 1: Set up CUDA (compile kernels, create stream) --- dev, stream, kernels, _arch = setup_cuda() diff --git a/samples/cuda_core/glInteropPlasma/glInteropPlasma.py b/samples/cuda_core/glInteropPlasma/glInteropPlasma.py index c890809b2bb..3cbf8db60bb 100644 --- a/samples/cuda_core/glInteropPlasma/glInteropPlasma.py +++ b/samples/cuda_core/glInteropPlasma/glInteropPlasma.py @@ -55,7 +55,7 @@ By default this sample runs for a bounded number of frames so it is CI-friendly; pass ``--interactive`` to run until the window is closed. -Headless environments (no ``DISPLAY``) waive the sample with exit code 2. +Headless environments (no ``DISPLAY``) waive the sample. """ import argparse @@ -88,7 +88,7 @@ # --------------------------------------------------------------------------- WIDTH = 800 HEIGHT = 600 -EXIT_WAIVED = 2 +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) # ============================= Helper functions ============================= diff --git a/samples/cuda_core/ipcMemoryPool/README.md b/samples/cuda_core/ipcMemoryPool/README.md index f74834eb752..65351e4e1e6 100644 --- a/samples/cuda_core/ipcMemoryPool/README.md +++ b/samples/cuda_core/ipcMemoryPool/README.md @@ -106,7 +106,7 @@ python ipcMemoryPool.py --device 1 ``` On platforms or devices that do not support CUDA IPC, the sample -prints a diagnostic and exits cleanly with status 0. +prints a diagnostic and waives. ## Expected Output diff --git a/samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py b/samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py index f0df564bcc2..76aba8522c7 100644 --- a/samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py +++ b/samples/cuda_core/ipcMemoryPool/ipcMemoryPool.py @@ -53,10 +53,11 @@ IPC requires Linux (POSIX file-descriptor handles) and device support for memory pools. On unsupported platforms the sample prints a diagnostic and -exits cleanly. +waives. """ import multiprocessing as mp +import os import platform import sys from pathlib import Path @@ -81,6 +82,7 @@ CHILD_TIMEOUT_SEC = 30 +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) def check_ipc_support(device) -> bool: @@ -150,8 +152,8 @@ def main() -> int: print_gpu_info(device) if not check_ipc_support(device): - print("\nCUDA IPC is not available on this system; exiting cleanly.") - return 0 + print("\nCUDA IPC is not available on this system; waiving this sample.") + return EXIT_WAIVED N = args.elements nbytes = N * np.dtype(np.float32).itemsize diff --git a/samples/cuda_core/launchConfigTuning/README.md b/samples/cuda_core/launchConfigTuning/README.md index 8e909e43fe9..974fd1acf06 100644 --- a/samples/cuda_core/launchConfigTuning/README.md +++ b/samples/cuda_core/launchConfigTuning/README.md @@ -96,8 +96,7 @@ The benchmark loops in this sample read kernel results back from `ManagedMemoryResource` allocations between launches, which requires the device property `concurrent_managed_access=True`. This is only supported on Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) the property -is `False`, so the sample exits early with a waive message and exit code -`2`. +is `False`, so the sample exits early with a waive message. ## Installation diff --git a/samples/cuda_core/launchConfigTuning/launchConfigTuning.py b/samples/cuda_core/launchConfigTuning/launchConfigTuning.py index fd1c3faf235..e946fe26323 100644 --- a/samples/cuda_core/launchConfigTuning/launchConfigTuning.py +++ b/samples/cuda_core/launchConfigTuning/launchConfigTuning.py @@ -36,6 +36,7 @@ "What is the best threads-per-block for my kernel?" """ +import os import sys from pathlib import Path @@ -62,6 +63,9 @@ sys.exit(1) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + + # ============================================================================= # CUDA Kernel Source Code # ============================================================================= @@ -347,7 +351,7 @@ def main(): "access, which is not supported on Windows " "(concurrent_managed_access=False). Waiving this sample." ) - sys.exit(2) + sys.exit(EXIT_WAIVED) print("=" * 60) print("Launch Configuration Tuning (cuda.core)") diff --git a/samples/cuda_core/memoryResources/README.md b/samples/cuda_core/memoryResources/README.md index d3c4ac2073d..efa37106cb7 100644 --- a/samples/cuda_core/memoryResources/README.md +++ b/samples/cuda_core/memoryResources/README.md @@ -87,8 +87,8 @@ The `ManagedMemoryResource` demo in this sample exercises **concurrent host access** to managed allocations while the GPU is active, which requires the device property `concurrent_managed_access=True`. This is only supported on Linux with HMM (Pascal and newer). On Windows (WDDM/MCDM/TCC) the property -is `False`, so the sample exits early with a waive message and exit code -`2`. The `DeviceMemoryResource` + `PinnedMemoryResource` demos in this +is `False`, so the sample exits early with a waive message. The +`DeviceMemoryResource` + `PinnedMemoryResource` demos in this sample would still work on Windows on their own, but to keep the sample self-contained the entire script waives when concurrent managed access is unavailable. diff --git a/samples/cuda_core/memoryResources/memoryResources.py b/samples/cuda_core/memoryResources/memoryResources.py index 92444862063..fe4ee320b6f 100644 --- a/samples/cuda_core/memoryResources/memoryResources.py +++ b/samples/cuda_core/memoryResources/memoryResources.py @@ -55,6 +55,7 @@ each pathway works end-to-end. """ +import os import sys from pathlib import Path @@ -85,6 +86,9 @@ sys.exit(1) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + + SCALE_BIAS_KERNEL = r""" extern "C" __global__ void scale_and_bias(float* data, size_t N, float scale, float bias) { @@ -348,7 +352,7 @@ def main(): "access, which is not supported on Windows " "(concurrent_managed_access=False). Waiving this sample." ) - sys.exit(2) + sys.exit(EXIT_WAIVED) device = Device(args.device) device.set_current() diff --git a/samples/cuda_core/pageRank/README.md b/samples/cuda_core/pageRank/README.md index 6f0cb43077f..b37fc2a06d7 100644 --- a/samples/cuda_core/pageRank/README.md +++ b/samples/cuda_core/pageRank/README.md @@ -73,8 +73,8 @@ Demonstrates GPU-accelerated PageRank computation for graph analysis using RAPID This sample depends on RAPIDS (`cugraph-cu13`, `cudf-cu13`, `dask-cuda`), which is currently published only as **Linux (manylinux) wheels** on `pypi.nvidia.com` — no Windows wheels exist. On Windows the sample exits -early with a waive message and exit code `2` instead of attempting an -install that cannot succeed. +early with a waive message instead of attempting an install that cannot +succeed. ## Installation diff --git a/samples/cuda_core/pageRank/pageRank.py b/samples/cuda_core/pageRank/pageRank.py index da99f7a5c56..dcf5679405d 100644 --- a/samples/cuda_core/pageRank/pageRank.py +++ b/samples/cuda_core/pageRank/pageRank.py @@ -43,6 +43,7 @@ where d = damping factor (typically 0.85), N = number of nodes """ +import os import sys import time from pathlib import Path @@ -50,13 +51,15 @@ sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) from cuda_samples_utils import print_gpu_info, verify_array_result +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + if sys.platform == "win32": print( "This sample depends on RAPIDS (cugraph-cu13 / cudf-cu13), which is " "currently published only as Linux (manylinux) wheels on " "pypi.nvidia.com. Waiving this sample on Windows." ) - sys.exit(2) + sys.exit(EXIT_WAIVED) try: import cudf @@ -232,7 +235,7 @@ def run_pagerank_benchmark( if device.arch in _CUGRAPH_UNSUPPORTED_ARCHES: print(f"RAPIDS cuGraph does not yet ship kernels for sm_{device.arch}, waiving this sample.") stream.close() - sys.exit(2) + sys.exit(EXIT_WAIVED) # Make CuPy/cuDF use our cuda.core stream cp.cuda.Stream.from_external(stream).use() diff --git a/samples/cuda_core/processCheckpoint/README.md b/samples/cuda_core/processCheckpoint/README.md index 50d2623a747..621e172f3ed 100644 --- a/samples/cuda_core/processCheckpoint/README.md +++ b/samples/cuda_core/processCheckpoint/README.md @@ -100,6 +100,9 @@ running ---------> locked ------------> checkpointed -----------> locked ------- - Python 3.10 or newer. - `cuda-core >= 1.0.0`. +On non-Linux platforms and integrated GPUs, the sample prints a diagnostic +and waives without attempting the checkpoint lifecycle. + ## Installation Install the required packages from `requirements.txt`: diff --git a/samples/cuda_core/processCheckpoint/processCheckpoint.py b/samples/cuda_core/processCheckpoint/processCheckpoint.py index 4bb19b10859..06d180bf3f3 100644 --- a/samples/cuda_core/processCheckpoint/processCheckpoint.py +++ b/samples/cuda_core/processCheckpoint/processCheckpoint.py @@ -58,6 +58,8 @@ launch, ) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + # Small fill kernel: deterministic, non-trivial pattern so the before/after # hashes would disagree on any bit flip. KERNEL_SRC = r""" @@ -181,8 +183,8 @@ def main(): args = parser.parse_args() if sys.platform != "linux": - print("Error: CUDA process checkpointing is Linux-only.") - return 1 + print("CUDA process checkpointing is Linux-only; waiving this sample.") + return EXIT_WAIVED if args.buffer_mib <= 0: print("Error: --buffer-mib must be positive") @@ -208,7 +210,7 @@ def main(): print( f"CUDA process checkpointing is not supported on integrated GPUs (sm_{device.arch}), waiving this sample." ) - return 2 + return EXIT_WAIVED print() print("Compiling kernel ...") diff --git a/samples/cuda_core/simpleMultiGpu/README.md b/samples/cuda_core/simpleMultiGpu/README.md index f88110f68e0..523c14689db 100644 --- a/samples/cuda_core/simpleMultiGpu/README.md +++ b/samples/cuda_core/simpleMultiGpu/README.md @@ -50,7 +50,7 @@ input buffers, so the kernels see fully-materialized data. ### Hardware - **At least 2 CUDA-capable devices** in the system. The sample waives - itself (exit code 2) when only one GPU is visible. + itself when only one GPU is visible. - Compute Capability 7.0 or higher on both devices. ### Software diff --git a/samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py b/samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py index 697cf7956f0..490e8b76633 100644 --- a/samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py +++ b/samples/cuda_core/simpleMultiGpu/simpleMultiGpu.py @@ -46,10 +46,10 @@ (CuPy's current stream) into ``cuda.core`` so that memory initialized by CuPy is ordered before the kernel launch on our ``cuda.core`` stream. -Waives with exit code 2 when fewer than 2 CUDA-capable devices are -available. +Waives when fewer than 2 CUDA-capable devices are available. """ +import os import sys try: @@ -63,7 +63,7 @@ sys.exit(1) -EXIT_WAIVED = 2 +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) DTYPE = cp.float32 SIZE = 50000 diff --git a/samples/cuda_core/simpleP2P/simpleP2P.py b/samples/cuda_core/simpleP2P/simpleP2P.py index 42ea028f04d..d2406487fa5 100644 --- a/samples/cuda_core/simpleP2P/simpleP2P.py +++ b/samples/cuda_core/simpleP2P/simpleP2P.py @@ -29,6 +29,7 @@ # /// import argparse +import os import sys from pathlib import Path @@ -56,6 +57,8 @@ sys.path.insert(0, str(Path(__file__).parent.parent / "Utilities")) from cuda_samples_utils import verify_array_result +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + # CUDA kernel for simple P2P operation SIMPLE_P2P_KERNEL = """ extern "C" __global__ @@ -101,7 +104,7 @@ def run(num_elements=1024 * 1024 * 16): if num_devices < 2: print("Two or more GPUs with Peer-to-Peer access capability are required, waiving this sample.") - return 2 + return EXIT_WAIVED # Get device properties devices = [Device(i) for i in range(num_devices)] @@ -140,7 +143,7 @@ def run(num_elements=1024 * 1024 * 16): if p2p_capable_gpus[0] == -1 or p2p_capable_gpus[1] == -1: print("\nTwo or more GPUs with Peer-to-Peer access capability are required.") print("Peer to Peer access is not available amongst GPUs in the system, waiving test.") - return 2 + return EXIT_WAIVED # Use first pair of P2P capable GPUs detected gpuid = [p2p_capable_gpus[0], p2p_capable_gpus[1]] diff --git a/samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py b/samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py index 24b45bc56ec..ca04ab6d473 100644 --- a/samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py +++ b/samples/cuda_core/stridedMemoryViewConstructors/stridedMemoryViewConstructors.py @@ -49,6 +49,7 @@ verify the round-trip. """ +import os import sys try: @@ -64,6 +65,9 @@ sys.exit(1) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) + + def dense_c_strides(shape): """Compute contiguous C strides for ``shape`` (in elements, not bytes).""" if not shape: @@ -82,7 +86,7 @@ def _describe(name, view): def main(): if np.lib.NumpyVersion(np.__version__) < "2.1.0": print("This example requires NumPy 2.1.0 or later", file=sys.stderr) - sys.exit(2) + sys.exit(EXIT_WAIVED) device = Device() device.set_current() diff --git a/samples/cuda_core/threadBlockCluster/README.md b/samples/cuda_core/threadBlockCluster/README.md index 09be51d8dbb..e8764518ab1 100644 --- a/samples/cuda_core/threadBlockCluster/README.md +++ b/samples/cuda_core/threadBlockCluster/README.md @@ -18,7 +18,7 @@ sample: 4. Verifies that `LaunchConfig(grid=G, cluster=C, block=B)` produces `G * C` total blocks — `G` clusters of `C` blocks each. -The sample **waives itself (exit code 2)** when: +The sample **waives itself** when: - the current device has Compute Capability < 9.0, or - neither `CUDA_PATH` nor `CUDA_HOME` points to a CUDA toolkit whose diff --git a/samples/cuda_core/threadBlockCluster/threadBlockCluster.py b/samples/cuda_core/threadBlockCluster/threadBlockCluster.py index f5001974dce..c96223237d9 100644 --- a/samples/cuda_core/threadBlockCluster/threadBlockCluster.py +++ b/samples/cuda_core/threadBlockCluster/threadBlockCluster.py @@ -44,7 +44,7 @@ * Verifies that ``LaunchConfig(grid=G, cluster=C, block=B)`` produces ``G * C`` total blocks arranged as ``G`` clusters of ``C`` blocks each. -Waives with exit code 2 when: +Waives when: * the current device's compute capability is below 9.0, or * ``CUDA_PATH`` / ``CUDA_HOME`` is not set (needed to locate @@ -73,7 +73,7 @@ sys.exit(1) -EXIT_WAIVED = 2 +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) CLUSTER_INFO_KERNEL = r""" diff --git a/samples/cuda_core/tmaTensorMap/README.md b/samples/cuda_core/tmaTensorMap/README.md index e30d7717690..a5797b48c4a 100644 --- a/samples/cuda_core/tmaTensorMap/README.md +++ b/samples/cuda_core/tmaTensorMap/README.md @@ -65,7 +65,7 @@ The sample: ### Hardware - NVIDIA Hopper or newer GPU with Compute Capability 9.0 or higher (H100, H200, B200, ...) -- On GPUs older than Hopper the sample exits cleanly without running the kernel +- On GPUs older than Hopper the sample waives without running the kernel - Minimum GPU memory: 512 MB ### Software diff --git a/samples/cuda_core/tmaTensorMap/tmaTensorMap.py b/samples/cuda_core/tmaTensorMap/tmaTensorMap.py index f42cd31b255..dff3b718be0 100644 --- a/samples/cuda_core/tmaTensorMap/tmaTensorMap.py +++ b/samples/cuda_core/tmaTensorMap/tmaTensorMap.py @@ -48,7 +48,7 @@ ``replace_address()`` to avoid rebuilding it. On GPUs older than Hopper (sm < 90), the sample prints a diagnostic -and exits cleanly. +and waives. Migrated from the former ``cuda_core/examples/tma_tensor_map.py`` location in the `cuda-python` repository. @@ -81,6 +81,7 @@ sys.exit(1) +EXIT_WAIVED = int(os.environ.get("CUDA_PYTHON_SAMPLE_WAIVER_EXIT_CODE", "2")) TILE_SIZE = 128 # elements per tile, must match the kernel constant KERNEL_SRC = r""" @@ -205,9 +206,9 @@ def main() -> int: if arch < (9, 0): print( f"\nTMA requires compute capability >= 9.0 (Hopper or later); " - f"this device is {arch.major}.{arch.minor}. Exiting cleanly." + f"this device is {arch.major}.{arch.minor}. Waiving this sample." ) - return 0 + return EXIT_WAIVED dev.set_current() include_path = _get_cccl_include_paths()