From 6b2c3a36b3e7d69d6cf2c135c777a4c52a978d5d Mon Sep 17 00:00:00 2001 From: bRong Njam Date: Tue, 22 Sep 2026 23:34:23 +0800 Subject: [PATCH 1/2] build: export optional MatrixOne Pixi GPU toolchain --- CMakeLists.txt | 3 +- cmake/export_gpu_toolchain.cmake | 56 + docs/embedding-gpu-toolchain.md | 46 + pixi.lock | 1339 +++++++++++++++++++- pixi.toml | 24 + scripts/export_embed_link.py | 12 + scripts/export_gpu_toolchain.py | 183 +++ scripts/tests/test_export_gpu_toolchain.py | 153 +++ 8 files changed, 1811 insertions(+), 5 deletions(-) create mode 100644 cmake/export_gpu_toolchain.cmake create mode 100644 docs/embedding-gpu-toolchain.md create mode 100644 scripts/export_gpu_toolchain.py create mode 100644 scripts/tests/test_export_gpu_toolchain.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 24ef107fdb..9b82da9cb5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1137,6 +1137,7 @@ target_link_libraries( set_target_properties(sirius_c_smoke PROPERTIES C_STANDARD 99 LINKER_LANGUAGE CXX) target_link_libraries(sirius_c_smoke PRIVATE Sirius::embed) +include(cmake/export_gpu_toolchain.cmake) set_property( TARGET sirius_c_smoke APPEND @@ -1152,7 +1153,7 @@ add_custom_command( "${CMAKE_MAKE_PROGRAM}" --build "${CMAKE_BINARY_DIR}" --consumer "$" --header "${CMAKE_CURRENT_SOURCE_DIR}/src/include/sirius_c.h" --output - "${CMAKE_CURRENT_BINARY_DIR}/embedding-sdk" + "${CMAKE_CURRENT_BINARY_DIR}/embedding-sdk" ${_sirius_gpu_export_args} VERBATIM) # Only the TAE metadata regression includes scanner bind-data headers directly. diff --git a/cmake/export_gpu_toolchain.cmake b/cmake/export_gpu_toolchain.cmake new file mode 100644 index 0000000000..5d6200aa59 --- /dev/null +++ b/cmake/export_gpu_toolchain.cmake @@ -0,0 +1,56 @@ +# Capture the provider used by CMake, rather than the environment of a later +# exporter invocation. This opt-in profile does not affect ordinary SDK builds. +set(_sirius_export_gpu_default OFF) +if("$ENV{PIXI_ENVIRONMENT_NAME}" STREQUAL "mo") + set(_sirius_export_gpu_default ON) +endif() +option(SIRIUS_EXPORT_GPU_TOOLCHAIN + "Export the MatrixOne-compatible Pixi GPU toolchain" + ${_sirius_export_gpu_default}) +if(SIRIUS_EXPORT_GPU_TOOLCHAIN) + foreach(_sirius_gpu_path "$ENV{CONDA_PREFIX}" "${CMAKE_CURRENT_SOURCE_DIR}") + if(NOT "${_sirius_gpu_path}" MATCHES "^/[A-Za-z0-9_./+@-]+$") + message( + FATAL_ERROR + "GPU provider/source paths cannot contain whitespace or metacharacters" + ) + endif() + endforeach() + if(NOT "$ENV{PIXI_ENVIRONMENT_NAME}" STREQUAL "mo" + OR NOT EXISTS "$ENV{CONDA_PREFIX}/conda-meta") + message(FATAL_ERROR "GPU toolchain export requires pixi run --frozen -e mo") + endif() + # cuVS loads C++ targets implicitly, but its C API is an explicit component. + find_package(cuvs REQUIRED CONFIG COMPONENTS c_api) + if(NOT TARGET cuvs::c_api) + message(FATAL_ERROR "The MO SDK requires the shared cuVS C API target") + endif() + set(_sirius_gpu_config "${CMAKE_CURRENT_BINARY_DIR}/gpu-toolchain-build.json") + file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock" _sirius_pixi_lock_hash) + file( + GENERATE + OUTPUT "${_sirius_gpu_config}" + CONTENT + "{\n\ + \"prefix\": \"$ENV{CONDA_PREFIX}\",\n\ + \"environment\": \"mo\",\n\ + \"lockfile\": \"${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock\",\n\ + \"lockfile_sha256\": \"${_sirius_pixi_lock_hash}\",\n\ + \"cc\": \"${CMAKE_C_COMPILER}\",\n\ + \"cxx\": \"${CMAKE_CXX_COMPILER}\",\n\ + \"nvcc\": \"${CMAKE_CUDA_COMPILER}\",\n\ + \"cuda_version\": \"${CUDAToolkit_VERSION}\",\n\ + \"cuda_include_dirs\": \"${CUDAToolkit_INCLUDE_DIRS}\",\n\ + \"cudart\": \"$\",\n\ + \"libcuvs\": \"$\",\n\ + \"libcuvs_c\": \"$\",\n\ + \"libcudf\": \"$\"\n\ +}\n") + set(_sirius_gpu_export_args --gpu-toolchain-config "${_sirius_gpu_config}") + set_property( + TARGET sirius_c_smoke + APPEND + PROPERTY LINK_DEPENDS "${_sirius_gpu_config}" + "${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock" + "${CMAKE_CURRENT_SOURCE_DIR}/scripts/export_gpu_toolchain.py") +endif() diff --git a/docs/embedding-gpu-toolchain.md b/docs/embedding-gpu-toolchain.md new file mode 100644 index 0000000000..8762781399 --- /dev/null +++ b/docs/embedding-gpu-toolchain.md @@ -0,0 +1,46 @@ +# Optional shared GPU toolchain + +Refs [MatrixOne #28966](https://github.com/matrixorigin/matrixone/issues/28966). + +The `mo` Pixi environment provides CUDA 13.3, GCC 14, cuVS/cuDF 26.08.01, +compatible RMM, and packaging tools for the combined MO/Sirius binary. The +default CUDA 13.2 and `cuda12` environments retain their existing selection. +The NVIDIA driver and GPU devices remain host dependencies. + +```sh +pixi install --frozen -e mo +pixi run --frozen -e mo mo-build-embedding-sdk +``` + +The profile-specific configure task disables `sccache` only for CUDA. The +ordinary presets retain their existing launchers; the `mo` SDK avoids the NVCC +temporary-PTX failure observed when CUDA 13.3 is launched through sccache 0.15. + +The `mo` profile enables `SIRIUS_EXPORT_GPU_TOOLCHAIN`. CMake captures the actual +compiler paths, CUDA include directories and imported CUDA/RAPIDS libraries. +The SDK exporter verifies the captured CUDA version, installed package set, +package archive hashes, and lockfile hash before writing `toolchain.json` +beside `link.json`. Other profiles continue exporting the original SDK. + +MO consumes the absolute `GPU_TOOLCHAIN_MANIFEST=/path/to/toolchain.json`. +Provider and source paths must not contain whitespace or shell/Make +metacharacters, matching MO's build contract. +Schema version 1 contains `provider`, `platform`, `prefix`, `compilers` (each +with `path` and `version`), `cuda` (version and separate include, library and +linker-stub directories), `rapids` (directories and package versions), `pixi` +(environment, lockfile and hash), installed `packages`, `runtime_roots`, and +`artifact_sha256`. The SDK's ABI and link schema remain version 1; its added +`gpu_toolchain_manifest` field names the manifest and the SDK fingerprint +includes both that file and its inputs. + +Both `libcuvs.so` and `libcuvs_c.so` are explicit runtime roots; their package +identity is the same `libcuvs` package. cuDF and RMM are also roots. Driver stubs +are recorded only as link inputs and must never be shipped as runtime driver +libraries. Packaging must discover the full dependency closure of the combined +MO binary and `libmo`, preserve the single provider, and resolve deployment +libraries relative to the packaged binary. + +The manifest is build-tree metadata, not a relocatable SDK. Reconfigure and +re-export after changing the Pixi lock or replacing the environment. A manifest +does not establish GPU execution: the combined cuVS/Sirius test with two streams +still requires a working host NVIDIA driver. diff --git a/pixi.lock b/pixi.lock index 95e66adad6..1dcab7e636 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1435,6 +1435,276 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.47.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda - pypi: https://files.pythonhosted.org/packages/ba/ff/77597bc208f92d884eceda704f6b95dbebb08ef5de3a24348d715ed6774e/rumdl-0.2.44-py3-none-manylinux_2_28_aarch64.whl + mo: + channels: + - url: https://conda.anaconda.org/rapidsai/ + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + linux-64-cuda13: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_go_select-2.3.0-cgo.tar.bz2 + - 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/aws-c-auth-0.10.4-hb7a77c6_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.14-h2aa3ae6_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.14.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h720e601_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.7.1-h6ffeea8_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.11.0-h38ae05a_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.27.3-h6f4d18d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.16.0-h21f4ec5_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.12.8-h46fcd08_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.7-h720e601_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h720e601_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.40.1-h102d43b_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.833-hc7390e0_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.3-h206d751_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-h71f81a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.18.0-h74b55db_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.14.0-hf596fc9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.16.0-h1f05bef_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.7.0-py312h3f22e6b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bc-1.07.1-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/binutils-2.46.1-default_h4852527_102.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/binutils_linux-64-2.46.1-default_h4852527_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py312he9c40d5_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_10.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.8-hebe6cf0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.11.0-h4d9bdce_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.1.1-py312h703531f_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-21-21.1.8-default_h6209e06_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-21.1.8-default_cfg_hfed155c_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21-21.1.8-default_h6209e06_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-format-21.1.8-default_hbe8b877_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-scan-deps-21.1.8-default_h6209e06_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang-tools-21.1.8-default_h5c1a867_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/clang_impl_linux-64-21.1.8-default_hbd963a2_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cmake-4.4.3-hff7ac6b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compiler-rt-21.1.8-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/compiler-rt21-21.1.8-h7148c6a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.4.0-h611768e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/croaring-4.4.2-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.4.2-py312h80505a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-core-1.2.0-cuda13_py312hb8f5ef8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.73-ha770c72_1.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/linux-64/cuda-cudart-static-13.3.29-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-13.3.73-hcdd1206_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-13.3.73-h376f20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.73-hecca717_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-13.3.73-hb2fc203_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvml-dev-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-nvrtc-dev-13.3.33-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.73-hb03c661_1.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/linux-64/cuda-sanitizer-api-13.3.75-h10ca0ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dlpack-0.8-h59595ed_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.4.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.4.0-h33e224c_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.4.0-hc469d41_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.3.1-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hb7133d2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/go-1.26.5-h282a287_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/go-cgo-1.26.5-h9564d09_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.4.0-hc6a0c74_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.4.0-hc436dd5_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.4.0-h0047a55_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-py310h44b86e0_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-h7cc23a3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbc21106_2.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/libabseil-20260526.0-cxx17_h0dc7533_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-25.0.0-hcc2f0d9_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-25.0.0-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-25.0.0-h53684a4_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-25.0.0-h635bf11_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-25.0.0-h66fbfdd_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-ha411449_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-h018ffa1_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcap-2.78-h084b8d7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h6209e06_6.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp23.1-23.1.1-default_h0acdd01_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-23.1.1-default_h7037f76_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcompiler-rt-21.1.8-h7148c6a_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.6.0.2-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-dev-13.6.0.2-h676940d_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/libcufile-dev-1.18.1.6-h676940d_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/libcurand-dev-10.4.3.29-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.22.0-ha042cf0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.6.9-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-dev-12.2.6.9-h676940d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.2.51-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-dev-12.8.2.51-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-h5348a74_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.4-hd2095e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.7.0-h81df57d_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.8.0-hbc29df5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.8.0-hdbdcf42_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.82.1-h792040b_0.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/libiconv-1.18-h0cb94f2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libidn2-2.3.8-hfac485b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-h474f4eb_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm23-23.1.1-h474f4eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h74cf4be_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnl-3.11.0-hb03c661_1.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/libnuma-2.0.18-hb03c661_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvcomp-5.3.0.16-h7bcfba5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvcomp-dev-5.3.0.16-h7bcfba5_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.4.92-hd2095e1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-13.3.73-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.27.0-h3133023_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.27.0-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-25.0.0-h7376487_4_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-7.35.1-h622638d_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpsl-0.23.1-hd9e3e90_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpython-3.12.14-h0c77377_3_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h60473fc_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.4.0-hf39dbba_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.4-h13e7031_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-h6154650_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-261.3-h26e0ef7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-261.3-h26e0ef7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/liburing-2.14-hb700be7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.3-hcfc3c73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.52.1-h280c20c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.38-h280c20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.4-hf3af7cc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.4-h7df9aa5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-23.1.1-h7148c6a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-21-21.1.8-h7399f5f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-21.1.8-h7148c6a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-hee9eb32_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.4.1-hb03c661_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mimalloc-3.2.7-h54a6638_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mold-2.40.4-h122c784_3.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_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ninja-1.13.2-h171cf75_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-26.8.2-ha5cdc1e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.3-py312he827f4e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.4-h781a0a9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.1-h443056b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/patchelf-0.19.1-hee9eb32_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-h8b3dc9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h1114479_1013.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-12.4.1-he83fb06_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-h26ae035_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-25.0.0-py312h7900ff3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-25.0.0-py312h2054cf2_0_cpu.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.14-h5f976f7_3_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-duckdb-1.5.5-py312ha6a3dbb_1.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/rdma-core-65.0-h7b4f2e6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h94463f1_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-hd6e31c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rhash-1.4.6-hb03c661_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.98.1-hc89c8c8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.5-h7e3ee7f_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sccache-0.15.0-he64ecbb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h34e00bb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.8.5-h4bd325d_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.4-h9ffa6c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.1.0-hfd44327_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h1df4ec4_4.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/ukkonen-1.1.0-py312hd9148b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/unzip-6.0-hb03c661_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/wget-1.25.0-h653f8fd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-hebe6cf0_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-cpp-0.8.0-h54a6638_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_7.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/boto3-1.43.98-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.43.98-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.7.22-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt21_linux-64-21.1.8-h0e38de2_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/compiler-rt_linux-64-21.1.8-ha770c72_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.12.14-py312hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.73-ha770c72_1.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/noarch/cuda-driver-dev_linux-64-13.3.29-h376f20c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-13.3.73-he91c749_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.73-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.8.2-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/noarch/distlib-0.4.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/duckdb-1.5.5-hff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.32.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.4.1-pyhcf101f3_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/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/identify-2.6.19-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jmespath-1.1.0-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/noarch/libgcc-devel_linux-64-14.4.0-hd9a9cd0_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-13.3.73-ha770c72_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.4.0-ha5b54cb_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nvidia-ml-py-13.610.43-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.11.11-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pre-commit-4.6.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-3.0-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/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.6.1-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.14-hd8ed1ab_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-9_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-src-1.98.1-unix_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.98.1-h2c6d0dc_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-84.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/sysroot_linux-64-2.28-h4ee821c_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2026c-h151e31d_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.9.0-pyh5ded981_0.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libcudf-26.08.01-cuda13_260825_ee6d3d25.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libcuvs-26.08.01-cuda13_260806_25b1be43.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libcuvs-headers-26.08.01-cuda13_260806_25b1be43.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libkvikio-26.08.00-cuda13_260805_5a77056e.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libraft-headers-26.08.00-cuda13_260805_ebf92684.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libraft-headers-only-26.08.00-cuda13_260805_ebf92684.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/librmm-26.08.00-cuda13_260805_42d059f1.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/libucxx-0.51.01-cuda13_260812_2c309cab.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/rapids-logger-0.2.3-h98325ef_0.conda + - conda: https://conda.anaconda.org/rapidsai/linux-64/ucxx-0.51.01-cuda13_cp311_abi3_260812_2c309cab.conda + - pypi: https://files.pythonhosted.org/packages/e5/61/7f9958174c5b969a6a5e94e676364fffcd6fee53e5eef2e98c36d91dfc7a/rumdl-0.2.44-py3-none-manylinux_2_28_x86_64.whl nightly-runner: channels: - url: https://conda.anaconda.org/rapidsai/ @@ -3573,6 +3843,17 @@ packages: run_exports: {} size: 32534 timestamp: 1787617898102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-14.4.0-h611768e_5.conda + sha256: 3dbac842dff67feea7edfeff31ed970c546c06de97c6915091ecb79ef7e3a927 + md5: b21f4b63e9f5745243fa5db8bca95e34 + depends: + - gcc_impl_linux-64 >=14.4.0,<14.4.1.0a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 32630 + timestamp: 1789486292092 - conda: https://conda.anaconda.org/conda-forge/linux-64/conda-gcc-specs-15.3.0-h8846f6e_4.conda sha256: 87ebd4f94c8823763d35adaba292c2dc8c60ddda70e0980f32eae0dbb0e2aa2d md5: 4bfbca2f3bfcdf6d78a339cfd5368fce @@ -3710,6 +3991,30 @@ packages: run_exports: {} size: 4840747 timestamp: 1780110953653 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-bindings-13.4.2-py312h80505a6_0.conda + sha256: 8cc616260d4ee2ab298cf3df32a967801f1ef8e1a7fb99eb40af889fc4bb431b + md5: d0a00f5a9bb075ce1f383f2cb95a0b95 + depends: + - python + - cuda-pathfinder >=1.5.5,<2 + - cuda-version >=13,<14.0a0 + - cuda-nvrtc >=13,<14.0a0 + - cuda-nvvm-impl >=13,<14.0a0 + - libcufile >=1,<2.0a0 + - libnvfatbin >=13.0,<14.0a0 + - libnvjitlink >=13.0,<14.0a0 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - python_abi 3.12.* *_cp312 + constrains: + - cuda-cudart >=13,<14.0a0 + license: LicenseRef-NVIDIA-SOFTWARE-LICENSE + purls: + - pkg:pypi/cuda-bindings?source=compressed-mapping + run_exports: {} + size: 5328832 + timestamp: 1789736052415 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-core-1.2.0-cuda12_py312h7dd41fa_0.conda sha256: b195f76c46da526fdd9b6a6aebee2b49fa3286e940b0e856cbfc384cf22af053 md5: 95e1e12f939fd837cd541148a6388218 @@ -3820,6 +4125,16 @@ packages: run_exports: {} size: 30512 timestamp: 1779905082733 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-crt-tools-13.3.73-ha770c72_1.conda + sha256: 2be2013460c18858cadf54bebe089b7f5a4f0c3e9c7dbb0930b32fe407bffc4f + md5: e98cbf0020c1e3db50b797a229f177a9 + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 30123 + timestamp: 1787703441049 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-cudart-12.9.79-h5888daf_0.conda sha256: 57d1294ecfaf9dc8cdb5fc4be3e63ebc7614538bddb5de53cfd9b1b7de43aed5 md5: cb15315d19b58bd9cd424084e58ad081 @@ -3994,6 +4309,18 @@ packages: run_exports: {} size: 25676 timestamp: 1779909800772 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-13.3.73-hcdd1206_1.conda + sha256: 10910ece3aa4e8ef6e438986d81dd6f78b0343d84409580af341982e86d500f1 + md5: 9e3c48ca714c8e503c45aec042848223 + depends: + - cuda-nvcc_linux-64 13.3.73.* + - gcc_linux-64 + - gxx_linux-64 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 24924 + timestamp: 1787703396389 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-12.9.86-h85509e4_2.conda sha256: 961cf20d411b7685cd744e6c6ed35efea547d095c62151d6f3053d9931bb994d md5: 67458d2685e7503933efa550f3ee40f3 @@ -4048,6 +4375,24 @@ packages: run_exports: {} size: 28672 timestamp: 1779905232747 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-impl-13.3.73-h376f20c_1.conda + sha256: 45e5738d1896ffe517d118210b432b193577f8086cb8be4e2412730f4fa1aa80 + md5: 80b50ecd5cd3bdaf6e006190bfbbbacc + depends: + - cuda-cudart >=13.3.29,<14.0a0 + - cuda-cudart-dev + - cuda-nvcc-dev_linux-64 13.3.73 he91c749_1 + - cuda-nvcc-tools 13.3.73 hecca717_1 + - cuda-nvvm-impl 13.3.73 hb03c661_1 + - cuda-version >=13.3,<13.4.0a0 + - libnvptxcompiler-dev 13.3.73 ha770c72_1 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 28220 + timestamp: 1787703607362 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-12.9.86-he02047a_2.conda sha256: 0e849be7b5e4832ca218ec2c48a9ba3a15a984f629e2e54f38a53f4f57220341 md5: dc256c9864c2e8e9c817fbca1c84a4bc @@ -4099,6 +4444,23 @@ packages: run_exports: {} size: 34635831 timestamp: 1779905180976 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc-tools-13.3.73-hecca717_1.conda + sha256: 6adc60d76af7461812cdb056b8dd9879507ade10ef578cbaee5838a8e8fe205e + md5: 83fb3d735cccb2043389f696e23b416c + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-crt-tools 13.3.73 ha770c72_1 + - cuda-nvvm-tools 13.3.73 hb03c661_1 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 34657421 + timestamp: 1787703548053 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-12.9.86-he0b4e1d_6.conda sha256: c506221dafb7cfd081f7d12d01d8e8ab9b29adfcc7d69d61fedd3232174e4016 md5: 359d05bc3ec5d3a467eb558e3844aea2 @@ -4153,12 +4515,30 @@ packages: - cuda-version >=13.3,<14 size: 27813 timestamp: 1779909800193 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvml-dev-12.9.79-hffce074_1.conda - sha256: 82138fc5a18e0b3204749f8690936976a822d79bac35c525b6fad3554fd19bc3 - md5: bf934cd6425e6fcc02d35815b84947b0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvcc_linux-64-13.3.73-hb2fc203_1.conda + sha256: 96f36641c9082429156fd18a171fde65641b7659ea222be08e7276f9ff84a4e8 + md5: a30b5a17a56514ac14809b03ec3edf4c depends: - __glibc >=2.17,<3.0.a0 - - cuda-version >=12.9,<12.10.0a0 + - cuda-cudart-dev_linux-64 13.3.* + - cuda-driver-dev_linux-64 13.3.* + - cuda-nvcc-dev_linux-64 13.3.73.* + - cuda-nvcc-impl 13.3.73.* + - cuda-nvcc-tools 13.3.73.* + - sysroot_linux-64 >=2.17,<3.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + strong: + - cuda-version >=13.3,<14 + size: 27309 + timestamp: 1787703395844 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvml-dev-12.9.79-hffce074_1.conda + sha256: 82138fc5a18e0b3204749f8690936976a822d79bac35c525b6fad3554fd19bc3 + md5: bf934cd6425e6fcc02d35815b84947b0 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=12.9,<12.10.0a0 - libgcc >=14 - libstdcxx >=14 license: LicenseRef-NVIDIA-End-User-License-Agreement @@ -4321,6 +4701,18 @@ packages: run_exports: {} size: 22428462 timestamp: 1779905092854 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-impl-13.3.73-hb03c661_1.conda + sha256: c34430c589777f2ee16fb4ff90ef8400349fb6cfc36d5303668926e68033fd8a + md5: af6afcc8ed386257e3b2f091e1d14e23 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 22428811 + timestamp: 1787703453005 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-12.9.86-h4bc722e_2.conda sha256: 45f5e881ed0d973132a5475a0b5c066db6e748ef3a831a14dba8374b252e0067 md5: f9af26e4079adcd72688a8e8dbecb229 @@ -4357,6 +4749,18 @@ packages: run_exports: {} size: 29720382 timestamp: 1779905121216 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-nvvm-tools-13.3.73-hb03c661_1.conda + sha256: 808ef346da9669d6e30a07997bf324076793ef5dee020c0e2361021cf3118517 + md5: 9b7d8bc3afef28851e8910be62a050ac + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 29733840 + timestamp: 1787703485138 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-12.9.79-h7938cbb_1.conda sha256: 4f679dfbf2bf2d17abb507f31b0176c0e3572337b5005b9e36179948a53988ac md5: 90d09865fb37d11d510444e34ebe6a09 @@ -4379,6 +4783,17 @@ packages: run_exports: {} size: 24826 timestamp: 1784299565999 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-profiler-api-13.3.27-h7938cbb_0.conda + sha256: 716eb13fe58332ed1d5079edae720177da0aeb3bb51cb5a05072385faa8dd704 + md5: a251ae89c6c9a7f5e8a39adc9a3041bd + depends: + - cuda-cudart-dev + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 25007 + timestamp: 1779913616712 - conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-sanitizer-api-12.9.79-h10ca0ad_1.conda sha256: 7425e9df5c9ce99e595cbc6dc7c632229bc94eee41a108ad7abc5c77e192f42d md5: 0bb642a45a51b1b6a8c44cb4d3fa6799 @@ -4405,6 +4820,19 @@ packages: run_exports: {} size: 9660175 timestamp: 1784261815140 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cuda-sanitizer-api-13.3.75-h10ca0ad_0.conda + sha256: 7d61c7d15dcc6c0b26f7949a9ee373348dce33cbffc7e927876a6191827c963f + md5: 3b6bbdb786bf04328b419b8a54976460 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 9490258 + timestamp: 1782772165529 - conda: https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.11.0-hfcd1e18_0.conda sha256: 3fcc97ae3e89c150401a50a4de58794ffc67b1ed0e1851468fcc376980201e25 md5: 5da8c935dca9186673987f79cef0b2a5 @@ -4491,6 +4919,18 @@ packages: run_exports: {} size: 29352 timestamp: 1787617988030 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-14.4.0-hc6a0c74_5.conda + sha256: 64301db4be5b2da2afd87bb0da962eaaab3ed7dc49b40ffbc4e634b973f61c9a + md5: 9e85f99963e7397d403607656ab85db3 + depends: + - conda-gcc-specs + - gcc_impl_linux-64 14.4.0 h33e224c_5 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 29477 + timestamp: 1789486390393 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc-15.3.0-hc6a0c74_4.conda sha256: f9ee593ac1cbad6633c51c498b0ba8b1da14e6dc22c0cb49a1d158abe8d2cb0f md5: cd390c3b900677ec6b0fdd729173125d @@ -4521,6 +4961,24 @@ packages: run_exports: {} size: 77667192 timestamp: 1778268558509 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.4.0-h33e224c_5.conda + sha256: 78059f130392b81179c3cd35ae317034b6dc13db5da926d50c6149d7e9c49f56 + md5: b5096b4ae06fdd88e4a8e0503e791710 + depends: + - binutils_impl_linux-64 >=2.46.1 + - libgcc >=14.4.0 + - libgcc-devel_linux-64 14.4.0 hd9a9cd0_105 + - libgomp >=14.4.0 + - libsanitizer 14.4.0 hf39dbba_5 + - libstdcxx >=14.4.0 + - libstdcxx-devel_linux-64 14.4.0 ha5b54cb_105 + - sysroot_linux-64 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 79981301 + timestamp: 1789486178649 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-14.4.0-heaf7ae8_4.conda sha256: 598d73603537f206822f081defc8ba81cc3d96392ad897761d7e10acebbbaaef md5: 4f27260a21a28c1814fda15b3dc00672 @@ -4587,6 +5045,21 @@ packages: - libgcc >=14 size: 29787 timestamp: 1787166213180 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-14.4.0-hc469d41_2.conda + sha256: 082fb68319027d485cc9b4d8effc3faa49d2edb13bc530f849acd321c8cfb6c2 + md5: 2dec2e2f6d902853a2b1d9ae91c58cf5 + depends: + - gcc_impl_linux-64 14.4.0.* + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + strong: + - libgcc >=14 + size: 30385 + timestamp: 1789573412378 - conda: https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-15.3.0-h7df7c86_1.conda sha256: 19b19ef4a5f87d3263377244dd96d1854debbf095520149ce783594261cfb2bc md5: c6f07e8a36d9b3cc781e0cb827d82bc0 @@ -4724,6 +5197,19 @@ packages: run_exports: {} size: 28775 timestamp: 1787618022021 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-14.4.0-hc6a0c74_5.conda + sha256: d45836cebeafc78f3f5681e84f66dad33732a2b45e71400cbac8e032fb2918c5 + md5: 9bf14b43afb20e457adacdbf555dc8df + depends: + - conda-gcc-specs + - gcc 14.4.0 hc6a0c74_5 + - gxx_impl_linux-64 14.4.0 hc436dd5_5 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: {} + size: 28912 + timestamp: 1789486429569 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx-15.3.0-hc6a0c74_4.conda sha256: 9ea6ca0830d8fe8ede308b4ab3f206f3504c422f7155981e13f2eca56a5ef9e8 md5: 2264c7beb16d977423e8ebd69f44be88 @@ -4765,6 +5251,20 @@ packages: run_exports: {} size: 15869057 timestamp: 1787617955102 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-14.4.0-hc436dd5_5.conda + sha256: c69e41985fc2ed743c72cfe4063d4424f36f8b79c99306e4d6bf8f9fe6767e17 + md5: 32efbf7afa14875e64e3e27f7766c9bd + depends: + - gcc_impl_linux-64 14.4.0 h33e224c_5 + - libstdcxx-devel_linux-64 14.4.0 ha5b54cb_105 + - sysroot_linux-64 + - tzdata + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 15138010 + timestamp: 1789486359245 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-15.3.0-h90d9265_4.conda sha256: 2b18349ad16f4be8dd9f2afa58d4ab7b9014fc543326ddecd59db215c6dc721d md5: 9a6fbf3da4dd624b8382e096bbca10f4 @@ -4796,6 +5296,23 @@ packages: - libgcc >=14 size: 27854 timestamp: 1781279939286 +- conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.4.0-h0047a55_2.conda + sha256: 9801d3b03494c5530e6574eae1055d8b5bbb99d0ac75d3bca8757c17a2f3a001 + md5: 3cda1392ec0bcd8b908073c6b75e78a4 + depends: + - gxx_impl_linux-64 14.4.0.* + - gcc_linux-64 ==14.4.0 hc469d41_2 + - binutils_linux-64 + - sysroot_linux-64 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + strong: + - libstdcxx >=14 + - libgcc >=14 + size: 28787 + timestamp: 1789573412378 - conda: https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-14.4.0-he93183a_1.conda sha256: cf55c19e7c413dcca673a15c473801528afa61945d01aeecfdb3c498e71e9695 md5: 6116cf8d0380169c4bf0b9f045577c88 @@ -5132,6 +5649,27 @@ packages: - libblas >=3.11.0,<4.0a0 size: 17975 timestamp: 1788076997926 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-11_h4a7cf45_openblas.conda + build_number: 11 + sha256: d942e0c820d60a613a6f786d074f0820fb6343e3f1ccfb110b1d98b44fb75968 + md5: b8cce1486f3c62f33291d6318c193d0d + depends: + - libopenblas >=0.3.34,<0.3.35.0a0 + - libopenblas >=0.3.34,<1.0a0 + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + - mkl <2027 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libblas >=3.11.0,<4.0a0 + size: 18246 + timestamp: 1789061062982 - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-h39a168f_4.conda sha256: c4e9854c585f3ee1785f651287ecdf8c28f30a2ea1b159a513005f8a0f6453a3 md5: df210655e30a05e3b069c91b7aaddd2d @@ -5208,6 +5746,24 @@ packages: - libcblas >=3.11.0,<4.0a0 size: 17959 timestamp: 1788077003985 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-11_h0358290_openblas.conda + build_number: 11 + sha256: f7d1bbdea61cf94ba219d17b2cb571a29830f8025385af799bff5a7ad1ef45e6 + md5: 73a248c30811075059b5aeda766c2624 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - liblapack 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libcblas >=3.11.0,<4.0a0 + size: 18196 + timestamp: 1789061068819 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h6209e06_6.conda sha256: a1b1c85ec3b792dcfb78d13360a49a31ae18fbbe15674c6964042976fcf6d293 md5: be2a683623912c9cbe01f35cd9e03d23 @@ -5275,6 +5831,26 @@ packages: - libclang-cpp23.1 >=23.1.0,<23.2.0a0 size: 25353391 timestamp: 1788037800581 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp23.1-23.1.1-default_h0acdd01_0.conda + sha256: 1a393452606eaed3192783a77acffffce6dec101f44bfa9f1c8b00da0e1b828b + md5: 685684bbe8a2b702db0a664f882a49aa + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libxml2 + - libxml2-16 >=2.15.4 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.2,<2.0a0 + - libllvm23 >=23.1.1,<23.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + weak: + - libclang-cpp23.1 >=23.1.1,<23.2.0a0 + size: 25352464 + timestamp: 1788986724670 - conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-22.1.8-default_h9692865_3.conda sha256: b90ed8467a692788477c06bc0359fac52ed5651d801ddef189ba4b7ecf3ce38c md5: 2a913525f4201f1adab2711fcf6f89b3 @@ -5312,6 +5888,27 @@ packages: - libclang13 >=23.1.0 size: 15442245 timestamp: 1788037800581 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libclang13-23.1.1-default_h7037f76_0.conda + sha256: 89c4968a9eb3c45aa6ecd1e20dcf30419cc52ef756af3bbad5099ae488cb8330 + md5: 477ba0fcc49cbf8dad6fadac96dd87c5 + depends: + - libclang-cpp23.1 ==23.1.1 default_h0acdd01_0 + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libxml2 + - libxml2-16 >=2.15.4 + - zstd >=1.5.7,<1.6.0a0 + - libzlib >=1.3.2,<2.0a0 + - libllvm23 >=23.1.1,<23.2.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + weak: + - libclang13 >=23.1.1 + size: 15440907 + timestamp: 1788986724670 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcompiler-rt-21.1.8-h7148c6a_2.conda sha256: b64e2c32f192fe8acd17094d88182a76a3c030dec56f6ed8be677b6e78a4574b md5: a1922ef32702c1ffa91b3b591f27311d @@ -5388,6 +5985,20 @@ packages: run_exports: {} size: 379359977 timestamp: 1784331491435 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-13.6.0.2-h676940d_0.conda + sha256: d10ce5ea92af1cccc0ed4640506489762f273f2e40debaf6300be2c866f17e8b + md5: b94086b1a487ca78ec1836dfd4a3efca + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-nvrtc + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 384624985 + timestamp: 1782782999955 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-dev-12.9.2.10-h676940d_0.conda sha256: 3a68ef147c0a7fdd59286e49c4dd1a03be9ea6180b12ee5324ecd555c17419bb md5: 7f35376e196eecc81ffe97f63b2b7e3a @@ -5428,6 +6039,26 @@ packages: - libcublas >=13.4.1.3,<14.0a0 size: 96273 timestamp: 1784331851326 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcublas-dev-13.6.0.2-h676940d_0.conda + sha256: 66fdcc04eb03d968d25d9a383b59c132b393514db8871956c836974151876af5 + md5: b9c580bb2555671b132582b680441774 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-crt-dev_linux-64 + - cuda-cudart-dev_linux-64 + - cuda-version >=13.3,<13.4.0a0 + - libcublas 13.6.0.2 h676940d_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcublas-static >=13.6.0.2 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + weak: + - libcublas >=13.6.0.2,<14.0a0 + size: 96817 + timestamp: 1782783444671 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-1.14.1.1-hbc026e6_1.conda sha256: 5fa43e8a8d335fc0c3a6aeb2e7b0debc7d8495b8a60a56ac30f23b0e852ab74a md5: cab1818eada3952ed09c8dcbb7c26af7 @@ -5456,6 +6087,20 @@ packages: run_exports: {} size: 1082447 timestamp: 1776110053053 +- 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 >=63.0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 1117538 + timestamp: 1782772352403 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.14.1.1-hecca717_1.conda sha256: 3a7c726419017319df149ff67ea3efae37d668ecfc1aa2ac3273b21c4c76d68b md5: 74a93e4c8fd24d535abc546c6fee2155 @@ -5492,6 +6137,24 @@ packages: - libcufile >=1.17.1.22,<2.0a0 size: 43365 timestamp: 1776110088237 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcufile-dev-1.18.1.6-h676940d_0.conda + sha256: 52dc8675f15f5831b6a6854e00f56ac8ff5d5c86adc8f6c86bd03fc5320cd8f9 + md5: b942c9fa0929a283f89841c811adcb68 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libcufile 1.18.1.6 h053a66a_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcufile-static >=1.18.1.6 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + weak: + - libcufile >=1.18.1.6,<2.0a0 + size: 43551 + timestamp: 1782772370844 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.3.10.19-h676940d_1.conda sha256: 3d40daf956b220cc367a6306ede1e259446fb844051bcfed87c46539cc1aaf03 md5: 2a91559a9345bedf09af8b7903deb6e6 @@ -5518,6 +6181,19 @@ packages: run_exports: {} size: 43882729 timestamp: 1784261940412 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-10.4.3.29-h676940d_0.conda + sha256: 9a1615a44f0d01fcc23b4f1be4c8f86b2e19e3974481e826180dd261b67dcad6 + md5: 6172124b5a746cc1f3f9fc7fac9f6740 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 43805393 + timestamp: 1779897559895 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-dev-10.3.10.19-h676940d_1.conda sha256: b506f93e7bea6d0e060f09f4bac6db3f57586084ac309db0d44b3756f5b0bc80 md5: fc716aaff5af15b80ccbd28b3e67672c @@ -5554,6 +6230,24 @@ packages: - libcurand >=10.4.2.66,<11.0a0 size: 263682 timestamp: 1784262000226 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurand-dev-10.4.3.29-h676940d_0.conda + sha256: 5f1ad7adcb482f246d207409b1db36d5a6d5a91844e8cb74c76393358ab5ce18 + md5: ea57e481652c4663c42be59a6857faf1 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libcurand 10.4.3.29 h676940d_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcurand-static >=10.4.3.29 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + weak: + - libcurand >=10.4.3.29,<11.0a0 + size: 254305 + timestamp: 1779897620210 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-hcf29cc6_0.conda sha256: 93ab25f02666eb8696fa70d9c920f2e3b370742ee17e2758705038a72e11147f md5: dcd79cabd5d435f48d75db3d81cb5874 @@ -5627,6 +6321,22 @@ packages: run_exports: {} size: 178745582 timestamp: 1784345529567 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-12.2.6.9-h676940d_0.conda + sha256: c72cb48bd4983527ec78972fcb982b197250d3f0144461a4500c4dde2da36af8 + md5: c2b24b3215b808a2b74d5a72f9af66b6 + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libcublas >=13.6.0.2,<13.7.0a0 + - libcusparse >=12.8.2.51,<12.9.0a0 + - libgcc >=14 + - libnvjitlink >=13.3.33,<14.0a0 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 197068627 + timestamp: 1782788745128 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-dev-11.7.5.82-h676940d_2.conda sha256: f2a974af90ecf6e47c2780741b5351c5f21d20bf6b9fb4448966f07d23ad27b8 md5: 0fe12e558abf507458bcec839e29778d @@ -5663,6 +6373,24 @@ packages: - libcusolver >=12.2.0.11,<13.0a0 size: 62459 timestamp: 1784345630119 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusolver-dev-12.2.6.9-h676940d_0.conda + sha256: 89203a0bcab81e673e43663164969b6eaa95a7fc048a84ca2a6bf989d81e3fe2 + md5: a2406e3b46559e36feaa573f12f4bf9c + depends: + - __glibc >=2.28,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libcusolver 12.2.6.9 h676940d_0 + - libgcc >=14 + - libstdcxx >=14 + constrains: + - libcusolver-static >=12.2.6.9 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + weak: + - libcusolver >=12.2.6.9,<13.0a0 + size: 62593 + timestamp: 1782788857339 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.5.10.65-hecca717_2.conda sha256: 7b511549a22df408d36dadbeabdfd9c35b124d9d6f000b29ffcbe4b38b7faeb7 md5: 890ebfaad48c887d3d82847ec9d6bc79 @@ -5691,6 +6419,20 @@ packages: run_exports: {} size: 141814354 timestamp: 1784268382703 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-12.8.2.51-hecca717_0.conda + sha256: 23ed1ae0414d204615fece50c58a80462193c08b4da6f177a4a134447c62efff + md5: 0ee8865db10f700dd542ac18126d0cbb + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=14 + - libnvjitlink >=13.3.33,<14.0a0 + - libstdcxx >=14 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 145373224 + timestamp: 1782772363943 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-dev-12.5.10.65-hecca717_2.conda sha256: c6d7ec3ccef6dce988c3acc93198973ec9ff5aa9ffe99e07dd953c2d3b409a3b md5: db94469fbd554c107acc3afd0af5d8ec @@ -5729,6 +6471,25 @@ packages: - libcusparse >=12.7.10.12,<13.0a0 size: 54261 timestamp: 1784268462836 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcusparse-dev-12.8.2.51-hecca717_0.conda + sha256: c472d4f6687017a42b1a392ba4064dbe07ee499d77a61558c04bfd7e6b81b163 + md5: 25ace7ea7bcd64c4821e2034588b5448 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13.3,<13.4.0a0 + - libcusparse 12.8.2.51 hecca717_0 + - libgcc >=14 + - libnvjitlink >=13.3.33,<14.0a0 + - libstdcxx >=14 + constrains: + - libcusparse-static >=12.8.2.51 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: + weak: + - libcusparse >=12.8.2.51,<13.0a0 + size: 54443 + timestamp: 1782772472146 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h373387f_1.conda sha256: 6473eb8caf2aae830f37caa93db9b26dddf7ac84b63229e8bf7fc0e5c3ab95b0 md5: 50708d3b951d0f8e2d7f2df5b5edc040 @@ -5817,6 +6578,20 @@ packages: run_exports: {} size: 77856 timestamp: 1781203599810 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.8.4-hd2095e1_0.conda + sha256: 2f5e90b621f7bf64c35d5c972bd85a645555d82404130569149a129dcbc8b8dd + md5: a77b44d6cbaad97f3ad050ab35fad55a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + constrains: + - expat 2.8.4.* + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 77595 + timestamp: 1790073019208 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -5875,6 +6650,21 @@ packages: run_exports: {} size: 1058083 timestamp: 1787618680111 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-16.2.0-ha9f2e26_5.conda + sha256: 33d1b5d57c5a55a474330c5ec41fe7001a5aa600d9639389e8ce5edafae216a4 + md5: 3b62b92f0f082b67c59618ebf07617a7 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==16.2.0=*_5 + - libgomp 16.2.0 he0feb66_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 1057064 + timestamp: 1789485807107 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_19.conda sha256: 9dcf54adfaa5e861123c2da4f2f0451a685464ea7e5a41ad91cf67b31d658d98 md5: 331ee9b72b9dff570d56b1302c5ab37d @@ -5901,6 +6691,19 @@ packages: - libgcc size: 28403 timestamp: 1787618684957 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-16.2.0-h69a702a_5.conda + sha256: d298972e17697a5e96806d5f2c151c53efd0afa0ef10db5d6757a5b186817219 + md5: e7c34906139296448e3554fafa3dbec2 + depends: + - libgcc 16.2.0 ha9f2e26_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libgcc + size: 28535 + timestamp: 1789485811332 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_4.conda sha256: 7653be4d88a4d74676c38dd892914d027dcecc0c65c406be772d31cb641f8cfd md5: 5e92b8413fd1c8f8f3006f4661b12def @@ -5914,6 +6717,19 @@ packages: run_exports: {} size: 28377 timestamp: 1787618711732 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-16.2.0-h69a702a_5.conda + sha256: 7e694578cbabd46251d7a069d89da6479c5edd962d78bbc66a847c1b722a8365 + md5: 34ddf93e56ee44924ce76a614e5fb379 + depends: + - libgfortran5 16.2.0 h6b99dfc_5 + constrains: + - libgfortran-ng ==16.2.0=*_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 28520 + timestamp: 1789485833036 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_4.conda sha256: a5510cbcea3b9e9ab24b336429de997fa727af1dba323031500a962a20e38600 md5: c22348a769bb072b6184eb6f7f05e4f2 @@ -5928,6 +6744,20 @@ packages: run_exports: {} size: 2526008 timestamp: 1787618692926 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-16.2.0-h6b99dfc_5.conda + sha256: cc767363e3148a18d3a3015eeaed722bbf8ca0acc3a29157df2965e97caa9803 + md5: a7eb3f9540094247ec8a2fa800cf9bbf + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=16.2.0 + constrains: + - libgfortran 16.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 2528103 + timestamp: 1789485817694 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_19.conda sha256: 5abe4ab9d93f6c9757d654f1969ae2267d4505315c1f2f8fe705fd60af084f1b md5: faac990cb7aedc7f3a2224f2c9b0c26c @@ -5954,6 +6784,19 @@ packages: - _openmp_mutex >=4.5 size: 639968 timestamp: 1787618616266 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-16.2.0-he0feb66_5.conda + sha256: 224a5a09e258a1a257089a9af310e9336e1d36834959718a9fab8679742dd822 + md5: af44890f8a2beefd3a83805a59a65014 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - _openmp_mutex >=4.5 + size: 641644 + timestamp: 1789485759120 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.8.0-hbc29df5_0.conda sha256: 46126b858d173d6808262e39e3a8aa39946d39aebb5ffb720984dc44f74feafe md5: 60ff8935e16bf2fd302289ec4f129df8 @@ -6100,6 +6943,24 @@ packages: - liblapack >=3.11.0,<3.12.0a0 size: 17978 timestamp: 1788077010883 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-11_h47877c9_openblas.conda + build_number: 11 + sha256: 1ad3f43c9319ef398a8ef45989f4903a06e3965b51e77fc669a4c894168a8411 + md5: 5622a13917855ce4b953b9e655cf9262 + depends: + - libblas 3.11.0 11_h4a7cf45_openblas + constrains: + - blas 2.311 openblas + - libcblas 3.11.0 11*_openblas + - liblapacke 3.11.0 11*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - liblapack >=3.11.0,<3.12.0a0 + size: 18227 + timestamp: 1789061073957 - conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-h474f4eb_1.conda sha256: b007641e1da9de002af0518b89b07d4c59e513a6f465c9da86f24685ef86cc8b md5: 580bc512b273f4236bb37031620c091f @@ -6176,6 +7037,25 @@ packages: - libllvm23 >=23.1.0,<23.2.0a0 size: 45046595 timestamp: 1787716721647 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libllvm23-23.1.1-h474f4eb_0.conda + sha256: 5c716beeb80cd420c37cb811102a9e76c66072f47ed319de1a931ecdd98c9e6b + md5: d96e790721dd4e9af624acbf46cdd818 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15 + - libstdcxx >=15 + - libxml2 + - libxml2-16 >=2.15.4 + - libzlib >=1.3.2,<2.0a0 + - zstd >=1.5.7,<1.6.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + run_exports: + weak: + - libllvm23 >=23.1.1,<23.2.0a0 + size: 45065095 + timestamp: 1788900116889 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda sha256: ec30e52a3c1bf7d0425380a189d209a52baa03f22fb66dd3eb587acaa765bd6d md5: b88d90cad08e6bc8ad540cb310a761fb @@ -6382,6 +7262,19 @@ packages: run_exports: {} size: 469229 timestamp: 1784261884234 +- 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 + purls: [] + run_exports: {} + size: 470857 + timestamp: 1782920237017 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-12.9.86-hecca717_2.conda sha256: 3b1c851f4fc42d347ce1c1606bdd195343a47f121e0fceb7a1f1e5aa1d497da9 md5: 3461b0f2d5cbb7973d361f9e85241d98 @@ -6408,6 +7301,19 @@ packages: run_exports: {} size: 31168008 timestamp: 1779897778168 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-13.4.92-hd2095e1_0.conda + sha256: 012e5d23799b63f4537baed0e9ec8a3dbdb834584275c00a8821d1cefe7abb02 + md5: c957b18c69a615602f25168465a27643 + depends: + - __glibc >=2.17,<3.0.a0 + - cuda-version >=13,<13.5.0a0 + - libgcc >=15 + - libstdcxx >=15 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 32458616 + timestamp: 1789607057313 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnvjitlink-dev-12.9.86-hecca717_2.conda sha256: 5656c1b2f12a64725377c25cae3c90c97a2240036981ecb0dbab4715ed0f2fb7 md5: dd4790eefcadc269770d795bfaf6865c @@ -6477,6 +7383,17 @@ packages: run_exports: {} size: 28446 timestamp: 1779905221482 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libnvptxcompiler-dev-13.3.73-ha770c72_1.conda + sha256: 385a2e60cb2f6854134daafac9935335a2c10237f6fd83e7b1137a3d7c846354 + md5: 367de9671743bf515680d8d7e41514ce + depends: + - cuda-version >=13.3,<13.4.0a0 + - libnvptxcompiler-dev_linux-64 13.3.73 ha770c72_1 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 27739 + timestamp: 1787703595006 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hcf972fe_1.conda sha256: b2846ca0b00cc08d248589d289ba891856d4b42da4a3c823be6b2d660bd80a83 md5: 25994250f54292352a82eb05ab4499ba @@ -6495,6 +7412,24 @@ packages: - libopenblas >=0.3.34,<1.0a0 size: 5994112 timestamp: 1788056652715 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.34-pthreads_hf13c14d_2.conda + sha256: 69a722751e14eab2eb3bfdcb9acb1187afbd962b0c49b48d829341e0f6787f60 + md5: 7e19fcd73d7f0997d3cb3326d2586a86 + depends: + - libgfortran5 >=15.3.0 + - libgfortran + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + constrains: + - openblas >=0.3.34,<0.3.35.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + run_exports: + weak: + - libopenblas >=0.3.34,<1.0a0 + size: 6845411 + timestamp: 1789141490688 - conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.27.0-h3133023_1.conda sha256: 8f9281133322e9eb0bd4a5b11330db1c14f3b40c409639dd3805251151ca52e2 md5: f749f223bede1bac7724e49d686ac598 @@ -6691,6 +7626,21 @@ packages: - libsanitizer 14.4.0 size: 7500513 timestamp: 1787617784552 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-14.4.0-hf39dbba_5.conda + sha256: e04e99cd8fce9eba69fd4cc00d51de5adcff7343dc0bd878bf7d093371a789cc + md5: 9bad873a00cc65f871c93397e128fccc + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14.4.0 + - libstdcxx >=14.4.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + weak: + - libsanitizer 14.4.0 + size: 7961071 + timestamp: 1789486132076 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-15.3.0-h54950a5_4.conda sha256: 074869ef41874beec0ffee576fdd809f72eb8a4196fe2fa4d1a922c9a0742572 md5: 306fcd92c8f1cd7049bc6e361bd37f09 @@ -6796,6 +7746,20 @@ packages: run_exports: {} size: 6613148 timestamp: 1787618704262 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-16.2.0-h934c35e_5.conda + sha256: 38cadde30fad8f7c101f9eec79f60bf03fc99310c7195d23f8b30832516d666f + md5: 75b43a2912a0354204696708e4f34b8d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 16.2.0 ha9f2e26_5 + constrains: + - libstdcxx-ng ==16.2.0=*_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 6618916 + timestamp: 1789485826390 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_4.conda sha256: 4cdebd87b76cf53a58a08ebd6d15336daa79c5f0aa34d83a895ac503c0203632 md5: de0dceacf3e33c5fc88e167885dc8274 @@ -6809,6 +7773,19 @@ packages: - libstdcxx size: 28459 timestamp: 1787618737021 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-16.2.0-hdf11a46_5.conda + sha256: 855cee8f4b7abe06dc5918a66e0009492964926d5f5d6a033438dd6cab4e91e4 + md5: c37fb00cb15b16cf1601914d68a509ea + depends: + - libstdcxx 16.2.0 h934c35e_5 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: + strong: + - libstdcxx + size: 28561 + timestamp: 1789485853984 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-257.13-h084b8d7_1.conda sha256: 2293884d59cf0436c37fc0a4bad71011a8de2a6913610d1c701a7703377c1f75 md5: ea0da9c20bbb221b530810c3c68bbe62 @@ -6821,6 +7798,18 @@ packages: run_exports: {} size: 493022 timestamp: 1780084748140 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-261.3-h26e0ef7_1.conda + sha256: c98e646ae3807a04f2607cc61392d0b055e0d47cc10b78b4f5d3703b9350af07 + md5: 3b6703a55a108ba956a1813cb1b41931 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=15 + license: LGPL-2.1-or-later + purls: [] + run_exports: {} + size: 587155 + timestamp: 1790045351740 - conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h7d032f7_2.conda sha256: af6025aa4a4fc3f4e71334000d2739d927e2f678607b109ec630cc17d716918a md5: b6e326fbe1e3948da50ec29cee0380db @@ -6851,6 +7840,18 @@ packages: run_exports: {} size: 145969 timestamp: 1780084753104 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libudev1-261.3-h26e0ef7_1.conda + sha256: 635057e7321d3204bd243c5db21d7265662479a563bc44031a6e6a777837f5b6 + md5: 5aba206dc07c6fc94300ddec22cc1323 + depends: + - __glibc >=2.17,<3.0.a0 + - libcap >=2.78,<2.79.0a0 + - libgcc >=15 + license: LGPL-2.1-or-later + purls: [] + run_exports: {} + size: 200833 + timestamp: 1790045358193 - conda: https://conda.anaconda.org/conda-forge/linux-64/libunistring-0.9.10-h7f98852_0.tar.bz2 sha256: e88c45505921db29c08df3439ddb7f771bbff35f95e7d3103bf365d5d6ce2a6d md5: 7245a044b4a1980ed83196176b78b73a @@ -7103,6 +8104,24 @@ packages: - _openmp_mutex * *_llvm size: 6117432 timestamp: 1787722419188 +- conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-23.1.1-h7148c6a_0.conda + sha256: 4d6dab4691baec13109bc251506a74da448340b6a5de92de30563871105f8e7c + md5: d976d1fcca0f3c861f02aff9fb95508f + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - intel-openmp <0.0a0 + - openmp 23.1.1|23.1.1.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + run_exports: + strong: + - llvm-openmp >=23.1.1 + - _openmp_mutex >=4.5 + - _openmp_mutex * *_llvm + size: 6120459 + timestamp: 1788967391838 - conda: https://conda.anaconda.org/conda-forge/linux-64/llvm-tools-21-21.1.8-h3b15d91_0.conda sha256: c9299569ea3a4eb13830108383db155d46230ecbdab0f46074acb7440169b0d6 md5: 4c7b24da8391333b3726bcea610d4a1e @@ -7382,6 +8401,34 @@ packages: - nodejs >=26.8.1,<27.0a0 size: 20236637 timestamp: 1788585655289 +- conda: https://conda.anaconda.org/conda-forge/linux-64/nodejs-26.8.2-ha5cdc1e_0.conda + sha256: d2ffa873e897f12ba93ed14074264175dbe3476f0481dcdb8e9346d05a93f183 + md5: 1ef968c9c9786e55fcf7636eceb5f007 + depends: + - libstdcxx >=15 + - libgcc >=15 + - __glibc >=2.28,<3.0.a0 + - libsqlite >=3.53.4,<4.0a0 + - libbrotlicommon >=1.2.0,<1.3.0a0 + - libbrotlienc >=1.2.0,<1.3.0a0 + - libbrotlidec >=1.2.0,<1.3.0a0 + - zstd >=1.5.7,<1.6.0a0 + - icu >=78.3,<79.0a0 + - libnghttp2 >=1.68.1,<2.0a0 + - libzlib >=1.3.2,<2.0a0 + - libabseil >=20260526.0,<20260527.0a0 + - libabseil * cxx17* + - openssl >=3.5.8,<4.0a0 + - c-ares >=1.34.8,<2.0a0 + - libuv >=1.52.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - nodejs >=26.8.2,<27.0a0 + size: 20242351 + timestamp: 1789241571430 - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.5.3-py312he827f4e_0.conda sha256: 5b0e4c7757a2df883c5615a8f64bc4c113c4cd303ae6caa3ada5d397d114ce2a md5: 5abf073f2cf066f2f3d28229b3cbe94d @@ -7578,6 +8625,39 @@ packages: run_exports: {} size: 31836132 timestamp: 1788875605151 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pnpm-12.4.1-he83fb06_0.conda + sha256: 915f778070789fef8e795d6d21b339f059770c7ed9ea2d7aada154b19101615c + md5: bc7a0f521e93ac3466adb0de8f0796cb + depends: + - nodejs + - libgcc >=15 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=15 + - nodejs >=26.8.1,<27.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 31900772 + timestamp: 1789131070876 +- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-h26ae035_1.conda + sha256: a8114acfa58fe3c3f7d7c5cc5212db82d013aa1037ecf6fd28a76ed51d0e5841 + md5: dded2177cb0602c33ef3fe6b08acf4dc + depends: + - __glibc >=2.17,<3.0.a0 + - libcurl >=8.22.0,<9.0a0 + - libgcc >=15 + - libstdcxx >=15 + - libzlib >=1.3.2,<2.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + run_exports: + weak: + - prometheus-cpp >=1.3.0,<1.4.0a0 + size: 195623 + timestamp: 1789346214059 - conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda sha256: 013669433eb447548f21c3c6b16b2ed64356f726b5f77c1b39d5ba17a8a4b8bc md5: a83f6a2fdc079e643237887a37460668 @@ -7923,6 +9003,24 @@ packages: - __glibc >=2.17 size: 173800787 timestamp: 1788835185068 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rust-1.98.1-hc89c8c8_2.conda + sha256: f5616bd0732c8ba5b6146d9141d5ad2719546fa35379656bb96cd3ef7449ed5e + md5: 248193fbaef32172d879f03478dc8181 + depends: + - __glibc >=2.17,<3.0.a0 + - gcc_impl_linux-64 + - libgcc >=15 + - libzlib >=1.3.2,<2.0a0 + - rust-std-x86_64-unknown-linux-gnu 1.98.1 h2c6d0dc_2 + - sysroot_linux-64 >=2.17 + license: MIT + license_family: MIT + purls: [] + run_exports: + strong_constrains: + - __glibc >=2.17 + size: 173347196 + timestamp: 1788888331501 - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.5-h7e3ee7f_1.conda sha256: 7369ac21f3561e2203f5b1600ef0671270057380783ca4b9e15f679ba25db575 md5: fa1c00d999e83ec20173c9775f71a1f1 @@ -7984,6 +9082,20 @@ packages: - snappy >=1.2.2,<1.3.0a0 size: 45829 timestamp: 1762948049098 +- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h34e00bb_2.conda + sha256: 8635d10c7f127808b09c0c8e77b21a255829e0934e49326548c949f7e0551f09 + md5: 2b7e31ffbd476eecf33b3b833692339c + depends: + - libgcc >=15 + - libstdcxx >=15 + - __glibc >=2.17,<3.0.a0 + license: BSD-3-Clause + purls: [] + run_exports: + weak: + - snappy >=1.2.2,<1.3.0a0 + size: 45695 + timestamp: 1790063285616 - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.8.5-h4bd325d_1.tar.bz2 sha256: 39f34b2b618b22f94bc0e903f7375f8b1691c0b9d6c7fa4b993871a4d907d312 md5: 404ad1ceb7469412fe0632299dcf7b7b @@ -14161,6 +15273,21 @@ packages: run_exports: {} size: 88789 timestamp: 1788818295292 +- conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.98-pyhd8ed1ab_0.conda + sha256: f30b37ea758e2e7fadbf899e9720de8b595f75934f6504753deebb8e080ce2b8 + md5: 147edc8a07c19bcb331e4300380984c5 + depends: + - botocore >=1.43.98,<1.44.0 + - jmespath >=0.7.1,<2.0.0 + - python >=3.11 + - s3transfer >=0.19.0,<0.20.0 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/boto3?source=compressed-mapping + run_exports: {} + size: 88226 + timestamp: 1790011122493 - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.43.68-pyhd8ed1ab_0.conda sha256: 906981683370c5aa5315bf172bd95f963c6477e80f75c12736d50fb7c6884753 md5: 164de1155056dba716cb47eb772f6ed5 @@ -14191,6 +15318,21 @@ packages: run_exports: {} size: 9070608 timestamp: 1788809284852 +- conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.43.98-pyhd8ed1ab_0.conda + sha256: bed0db7429cb6e0b30dcbcd7d59b5c873c71b6d1b6c91cd662d65fd95aa31114 + md5: f8fa12f83ee2d1d031c0a2755f0a4338 + depends: + - jmespath >=0.7.1,<2.0.0 + - python >=3.10 + - python-dateutil >=2.1,<3.0.0 + - urllib3 >=1.25.4,!=2.2.0,<3 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/botocore?source=compressed-mapping + run_exports: {} + size: 9105600 + timestamp: 1789937194374 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda sha256: f8e3c730fa14ee3f170493779f06522c4acf89169f43db4f039727709b6419cf md5: a9965dd99f683c5f444428f896635716 @@ -14385,6 +15527,16 @@ packages: run_exports: {} size: 1472271 timestamp: 1779895496841 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-64-13.3.3.4.1-ha770c72_1.conda + sha256: fa44586fc308d0089fb5f014d5b53cbea19a2e83cd7bbd1e19c79140293be9a3 + md5: 199a317645eac1a18745d05dc551ab6e + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 1486700 + timestamp: 1785874560026 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-cccl_linux-aarch64-12.9.27-h579c4fd_0.conda sha256: b4efaee8fa95b9ec97a462dc343914a138ece704895e33caa52ac55968f7adfa md5: 71e4d87a72bf003bd05f05a502288b2a @@ -14448,6 +15600,16 @@ packages: run_exports: {} size: 116655 timestamp: 1779905079263 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-64-13.3.73-ha770c72_1.conda + sha256: 1e1036f983ff02151bf72eec86103f3303883eaaa9e752c797f98bfd64cb5e28 + md5: 8862ed846a781454e3901d8ee8c6558b + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 116442 + timestamp: 1787703437645 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-crt-dev_linux-aarch64-12.9.86-h579c4fd_2.conda sha256: 1db1f3ff4b0f445ce4064eb323733f7612ce28bc879dd6849e162b1504b7474a md5: 86be43a4154301b74f823bc6fe476629 @@ -14811,6 +15973,22 @@ packages: run_exports: {} size: 29519 timestamp: 1779905228399 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-64-13.3.73-he91c749_1.conda + sha256: 3cb2699a5e2ef6e71da807f171f099b9957514f0a88aac31e780a304983ce6d6 + md5: 6c0f9ff98b17ffdd35a91f016bb68176 + depends: + - cuda-crt-dev_linux-64 13.3.73 ha770c72_1 + - cuda-nvvm-dev_linux-64 13.3.73 ha770c72_1 + - cuda-version >=13.3,<13.4.0a0 + - libgcc >=6 + - libnvptxcompiler-dev_linux-64 13.3.73 ha770c72_1 + constrains: + - gcc_impl_linux-64 >=6,<16.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 29326 + timestamp: 1787703602069 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvcc-dev_linux-aarch64-12.9.86-h4310d6a_2.conda sha256: f4b2917f38867dd1ad9cfb029c790cfdbee89f79919cd43b7ce0142cc77bfd35 md5: e508550bd3d76ef97eaf5aab9ca757cd @@ -14892,6 +16070,16 @@ packages: run_exports: {} size: 28476 timestamp: 1779905085657 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-64-13.3.73-ha770c72_1.conda + sha256: ca8069929ad3540d06cc668cb4d0db9677adae088fbde451764423e73b96feb1 + md5: e091b729c9abfa28c4168653c68baca8 + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 27872 + timestamp: 1787703444057 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-nvvm-dev_linux-aarch64-12.9.86-h579c4fd_2.conda sha256: 5f27299818ecef44d6cf46a99465671744f6074c14618b5f8491a03a62942a7f md5: c59b036058d7bf78ac0a99618c321e85 @@ -14939,6 +16127,20 @@ packages: run_exports: {} size: 53370 timestamp: 1788375531780 +- conda: https://conda.anaconda.org/conda-forge/noarch/cuda-pathfinder-1.8.2-pyhc364b38_0.conda + sha256: 9805ab2f7f6c1a220380dd6291373351615872b8b52f9b12fced97285cbad425 + md5: 9fd49f91d0b0b7efa7801865d31cf97b + depends: + - python >=3.10 + - cuda-version >=12.0,<14 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/cuda-pathfinder?source=compressed-mapping + run_exports: {} + size: 53406 + timestamp: 1789685846628 - conda: https://conda.anaconda.org/conda-forge/noarch/cuda-version-12.9-h4f385c5_3.conda sha256: 5f5f428031933f117ff9f7fcc650e6ea1b3fef5936cf84aa24af79167513b656 md5: b6d5d7f1c171cbd228ea06b556cfa859 @@ -15043,6 +16245,17 @@ packages: run_exports: {} size: 78858 timestamp: 1788217445739 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.32.6-pyhd8ed1ab_0.conda + sha256: f20f0d74a3e31131ec02e24dc555bcf1446bd275c968fc601ec86a8633f7608d + md5: 42afc06f6512975dc9ee5afc15dcc3ee + depends: + - python >=3.11 + license: Unlicense + purls: + - pkg:pypi/filelock?source=compressed-mapping + run_exports: {} + size: 78889 + timestamp: 1788940924870 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.4.1-pyhcf101f3_0.conda sha256: 307dd6ec90140c3cf4171071b0e5e870abec314f4565c1edd5bc433e942cdcc0 md5: e652ac7756069c456d0da2a922cd7df5 @@ -15205,6 +16418,17 @@ packages: run_exports: {} size: 3092281 timestamp: 1787617687992 +- conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-14.4.0-hd9a9cd0_105.conda + sha256: d674014e6d723224ec57f33809251417d59356839666816044abaf7b44bf679f + md5: c793952e81fa5041802e69355b0bd85e + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 3091146 + timestamp: 1789486011931 - conda: https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-15.3.0-h2b852eb_104.conda sha256: 83221295f52a5ac410f092b4fe1415052b8542f76ddf9ee9949a3571d19e1d43 md5: b206066f9a3900bf869ac1a964686c9c @@ -15279,6 +16503,16 @@ packages: run_exports: {} size: 10959803 timestamp: 1779905159430 +- conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-64-13.3.73-ha770c72_1.conda + sha256: fbc919f6bff53456580086f6980cf71dbb01abe6b3833e2c3794784e0b37054f + md5: 877d95c63e88fc34739e98b266815ca2 + depends: + - cuda-version >=13.3,<13.4.0a0 + license: LicenseRef-NVIDIA-End-User-License-Agreement + purls: [] + run_exports: {} + size: 11022914 + timestamp: 1787703524254 - conda: https://conda.anaconda.org/conda-forge/noarch/libnvptxcompiler-dev_linux-aarch64-12.9.86-h579c4fd_2.conda sha256: 0b0b96f4bb99d9f9fccfcd34fcb5b0f465c05373c9628ffa32951ed5fc7ab379 md5: 3f6edd278c0a724f427d2655111c1c72 @@ -15334,6 +16568,17 @@ packages: run_exports: {} size: 20415656 timestamp: 1787617707715 +- conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-14.4.0-ha5b54cb_105.conda + sha256: 1dc5feb8f9bc7b061deeb8fa81227717f8dc69632cc966b48735f16ecd82d8d2 + md5: e34e58f938cdf475026923c6a270fd55 + depends: + - __unix + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + run_exports: {} + size: 19597678 + timestamp: 1789486035239 - conda: https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-15.3.0-hb2c5482_104.conda sha256: 42de47979a998f594c378498ebdf2f1c833e6a4611dd2ddda56f1ba2d1515c7f md5: c428c727fc8697f18a140c676032f8f5 @@ -15470,6 +16715,19 @@ packages: run_exports: {} size: 26308 timestamp: 1779972894916 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.11.11-pyh5ded981_0.conda + sha256: ba9e3a7ba041b569fb1c369ad5d16e47d79a0768b7a3a9bf469a5730c1c90cd8 + md5: 8fbbcac647ae8d387f011d2f0fe9041c + depends: + - python >=3.11 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + run_exports: {} + size: 28536 + timestamp: 1789914745574 - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.11.6-pyh5ded981_0.conda sha256: 8fe66c78f015fecfe096e4ff78a2626c4d926cde9b6951cf3b8e1ff0aaeb0a6c md5: fb0f75910f804de1d8c6e91f73673d11 @@ -15646,6 +16904,20 @@ packages: run_exports: {} size: 38928 timestamp: 1787953569064 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-discovery-1.6.1-pyh5ded981_0.conda + sha256: 396bf7b5a62eb3a12d20e16962acf36f9018332b2842d29548399df03b9deaa4 + md5: ae0feb6a3f297952bd4f4270fe77f530 + depends: + - python >=3.11 + - filelock >=3.15.4 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/python-discovery?source=compressed-mapping + run_exports: {} + size: 39252 + timestamp: 1789811798811 - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.12.14-hd8ed1ab_3.conda sha256: 7096d98d7dd0cdb9256c5714d7228a8ce7aca3bd014304ea5c1673c259df72ef md5: 7fafcd204183cfa7c1ae4ad9c2d8d414 @@ -15742,6 +17014,19 @@ packages: run_exports: {} size: 7105936 timestamp: 1788834513682 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-src-1.98.1-unix_2.conda + sha256: 7301a75d54d8f7022358cc13b8d1422a526a3af1a0cb9605573888f68f4301ed + md5: 7c3ae3b5ef88a5b52d9c192eba916dac + depends: + - __unix + constrains: + - rust >=1.98.1,<1.98.2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 7133672 + timestamp: 1788887486694 - conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-aarch64-unknown-linux-gnu-1.96.0-hbe8e118_0.conda sha256: 8e86745ce1655e126d52b6a1908e4cd8721dc031fc944dbc5ba12838f6f945a5 md5: c6a198001bc91ef594731364d10dbce3 @@ -15792,6 +17077,19 @@ packages: run_exports: {} size: 36561589 timestamp: 1788835117680 +- conda: https://conda.anaconda.org/conda-forge/noarch/rust-std-x86_64-unknown-linux-gnu-1.98.1-h2c6d0dc_2.conda + sha256: 0b174b85c848fb74994debad1590dd13b2245daadc4b244a3d4e5f044ccd7759 + md5: d26821c482dd4577f7bca11d4f34a460 + depends: + - __unix + constrains: + - rust >=1.98.1,<1.98.2.0a0 + license: MIT + license_family: MIT + purls: [] + run_exports: {} + size: 36854225 + timestamp: 1788888197535 - conda: https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.2-pyhd8ed1ab_0.conda sha256: ce9bb74b5628398aeee08563a73b33dbbd31e0bbdd0f776c06094903276d3a14 md5: 5548801d61c206d492b85613a02a87e3 @@ -15995,6 +17293,22 @@ packages: run_exports: {} size: 103560 timestamp: 1778188657149 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.8.0-pyhd8ed1ab_0.conda + sha256: c5511c190ab55168ca412f3c54592fbf677ae6250784cb72b227a7cf3f538f7d + md5: 407a3d3778570bae8e8fcf554e803e43 + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.11 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=compressed-mapping + run_exports: {} + size: 107485 + timestamp: 1789566710244 - conda: https://conda.anaconda.org/conda-forge/noarch/vcs_versioning-2.2.0-pyhcf101f3_0.conda sha256: 2c1e6b47728b0400932cbf70626868296d462249f6b641ab5bb6a54c27179a34 md5: e161e3b199d9978454b5744ae883dcf2 @@ -16047,6 +17361,23 @@ packages: run_exports: {} size: 3895299 timestamp: 1788296993944 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-21.9.0-pyh5ded981_0.conda + sha256: 568a27218e2494f812401eb4a7e24ad88ead88ccb2b76e55984b9660ffe50bd1 + md5: e5f0d028a80952fd4c500bb96da6f398 + depends: + - python >=3.11 + - distlib >=0.3.7,<1 + - filelock >=3.24.2,<4 + - platformdirs >=3.9.1,<5 + - python-discovery >=1.6 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=compressed-mapping + run_exports: {} + size: 3991037 + timestamp: 1789975521980 - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.14-pyhd8ed1ab_0.conda sha256: e311b64e46c6739e2a35ab8582c20fa30eb608da130625ed379f4467219d4813 md5: 7e1e5ff31239f9cd5855714df8a3783d diff --git a/pixi.toml b/pixi.toml index 94c00c64a2..4fd817ceea 100644 --- a/pixi.toml +++ b/pixi.toml @@ -103,6 +103,29 @@ libcuvs = "==26.08.01" CUDAARCHS = "75-real;80-real;86-real;89-real;90a-real" VCPKG_CUDA_VERSION = "12" +# Optional MatrixOne embedding profile. The ordinary Sirius profiles retain +# their existing toolkit selection; MO and Sirius share this locked provider. +[feature.mo] +platforms = ["linux-64-cuda13"] + +[feature.mo.dependencies] +cuda-version = "13.3.*" +libcudf = "==26.08.01" +libcuvs = "==26.08.01" +librmm = "26.08.*" +gcc_linux-64 = "14.*" +gxx_linux-64 = "14.*" +patchelf = "*" +pyyaml = "*" + +[feature.mo.activation.env] +CUDAARCHS = "75-real;80-real;86-real;89-real;90a-real;100f-real;120a-real;120" +VCPKG_CUDA_VERSION = "13" + +[feature.mo.tasks] +mo-configure-embedding-sdk = "cmake --preset release -S duckdb -B build/mo -DCMAKE_CUDA_COMPILER_LAUNCHER= -DEXPORT_DYNAMIC_SYMBOLS=OFF -DSIRIUS_BUILD_S3_TESTS=OFF" +mo-build-embedding-sdk = { cmd = "cmake --build build/mo --target sirius_c_smoke", depends-on = ["mo-configure-embedding-sdk"] } + [feature.vcpkg.dependencies] # Enable S3 use for vcpkg cache awscli = "*" @@ -142,6 +165,7 @@ nightly-run = "scripts/generate_nightly_env.sh && env -u PIXI_ENVIRONMENT_NAME p [environments] default = ["dev-libs", "cuda13"] +mo = ["dev-libs", "mo"] cuda12 = ["dev-libs", "cuda12"] duckdb-python = ["duckdb-python"] vcpkg = ["vcpkg", "cuda13"] diff --git a/scripts/export_embed_link.py b/scripts/export_embed_link.py index 45c2bbfd2b..c4ecfd4204 100644 --- a/scripts/export_embed_link.py +++ b/scripts/export_embed_link.py @@ -208,6 +208,7 @@ def main(): parser.add_argument("--consumer", type=Path, required=True) parser.add_argument("--header", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) + parser.add_argument("--gpu-toolchain-config", type=Path) args = parser.parse_args() build = args.build.resolve() commands = subprocess.run( @@ -241,6 +242,17 @@ def main(): manifest["artifact_sha256"][str((args.output / "sirius_c.h").resolve())] = sha256( args.output / "sirius_c.h" ) + if args.gpu_toolchain_config: + from export_gpu_toolchain import export_toolchain + + toolchain = export_toolchain( + args.gpu_toolchain_config, c_compiler_path, compiler + ) + toolchain_path = (args.output / "toolchain.json").resolve() + toolchain_path.write_text(json.dumps(toolchain, indent=2) + "\n") + manifest["gpu_toolchain_manifest"] = str(toolchain_path) + manifest["artifact_sha256"][str(toolchain_path)] = sha256(toolchain_path) + manifest["artifact_sha256"].update(toolchain["artifact_sha256"]) (args.output / "link.json").write_text(json.dumps(manifest, indent=2) + "\n") # GCC/Clang response files accept quoted arguments with backslash escapes. response = "\n".join( diff --git a/scripts/export_gpu_toolchain.py b/scripts/export_gpu_toolchain.py new file mode 100644 index 0000000000..8c9b6b1da0 --- /dev/null +++ b/scripts/export_gpu_toolchain.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +# Copyright 2026 Sirius Contributors. +# SPDX-License-Identifier: Apache-2.0 +"""Export a build-bound, optional Pixi GPU provider for MatrixOne. + +The schema is shared with MO's standalone exporter. Absolute paths describe a +build installation; runtime packaging must discover the combined ELF closure. +""" + +import hashlib +import json +import os +from pathlib import Path +import re +import subprocess + +import yaml + + +def sha256(path): + with open(path, "rb") as source: + return hashlib.file_digest(source, "sha256").hexdigest() + + +def export_toolchain(configuration, cc, cxx): + config = json.loads(Path(configuration).read_text()) + prefix = Path(config["prefix"]) + if not prefix.is_absolute() or not (prefix / "conda-meta").is_dir(): + raise RuntimeError("GPU provider must be an absolute Pixi prefix") + prefix = prefix.resolve() + artifacts = {} + + def inside(value, directory=False): + path = Path(value) + if not re.fullmatch(r"/[A-Za-z0-9_./+@-]+", str(path)): + raise RuntimeError( + "GPU artifact path contains whitespace or metacharacters" + ) + if not path.is_absolute() or not path.resolve().is_relative_to(prefix): + raise RuntimeError( + "GPU artifact escapes the configured provider: " + str(path) + ) + path = path.resolve() + if not (path.is_dir() if directory else path.is_file()): + raise RuntimeError("missing GPU provider artifact: " + str(path)) + if not directory: + artifacts[str(path)] = sha256(path) + return path + + lockfile = Path(config["lockfile"]) + if ( + config["environment"] != "mo" + or not lockfile.is_absolute() + or sha256(lockfile) != config["lockfile_sha256"] + ): + raise RuntimeError("Pixi lock changed since CMake configuration; reconfigure") + artifacts[str(lockfile.resolve())] = sha256(lockfile) + lock = yaml.safe_load(lockfile.read_text()) + selected = { + entry["conda"] + for entry in lock["environments"]["mo"]["packages"]["linux-64-cuda13"] + if "conda" in entry + } + locked_hashes = { + entry["conda"]: entry["sha256"] + for entry in lock["packages"] + if entry.get("conda") in selected + } + packages = [] + records = {} + for metadata in sorted((prefix / "conda-meta").glob("*.json")): + record = json.loads(metadata.read_text()) + if record["name"] in records: + raise RuntimeError("duplicate installed package: " + record["name"]) + records[record["name"]] = record + archive_hash = record.get("sha256", "") + if not re.fullmatch(r"[0-9a-f]{64}", archive_hash): + raise RuntimeError("missing package SHA256: " + record["name"]) + packages.append( + {key: record[key] for key in ("name", "version", "build", "url", "sha256")} + ) + if locked_hashes.get(record["url"]) != archive_hash: + raise RuntimeError( + "installed package disagrees with Pixi lock: " + record["name"] + ) + inside(metadata) + if {record["url"] for record in records.values()} != selected: + raise RuntimeError("installed package set disagrees with Pixi lock") + + def version(name, expected): + record = records.get(name) + if record is None or not ( + record["version"].startswith(expected) + if expected.endswith(".") + else record["version"] == expected + ): + raise RuntimeError("incompatible or missing GPU package: " + name) + return record["version"] + + cuda_version = version("cuda-version", "13.3") + if not config["cuda_version"].startswith("13.3."): + raise RuntimeError("CMake selected an incompatible CUDA toolkit") + versions = { + "libcuvs": version("libcuvs", "26.08.01"), + "libcudf": version("libcudf", "26.08.01"), + "librmm": version("librmm", "26.08."), + } + # Both cuVS shared libraries belong to the libcuvs package. + versions["libcuvs_c"] = versions["libcuvs"] + version("gcc_linux-64", "14.") + version("gxx_linux-64", "14.") + compilers = {} + for name in ("cc", "cxx", "nvcc"): + path = inside(config[name]) + if not os.access(path, os.X_OK): + raise RuntimeError("GPU compiler is not executable: " + str(path)) + if ( + name in ("cc", "cxx") + and path != Path({"cc": cc, "cxx": cxx}[name]).resolve() + ): + raise RuntimeError("GPU compiler disagrees with verified C consumer") + output = subprocess.run( + [str(path), "--version"], + check=True, + capture_output=True, + text=True, + timeout=15, + ).stdout.strip() + if name == "nvcc" and "release 13.3," not in output: + raise RuntimeError("NVCC disagrees with configured CUDA version") + compilers[name] = {"path": str(path), "version": output} + + cuda_includes = [ + inside(path, True) for path in config["cuda_include_dirs"].split(";") + ] + target = prefix / "targets/x86_64-linux" + cuda_header = inside(target / "include/cuda.h") + if cuda_header.parent not in cuda_includes: + raise RuntimeError("CMake did not use the exported CUDA header root") + if not re.search( + r"^#define\s+CUDA_VERSION\s+13030\b", cuda_header.read_text(), re.M + ): + raise RuntimeError("CUDA header disagrees with CUDA 13.3 provider") + inside(prefix / "include/cuvs/core/c_api.h") + inside(prefix / "include/cuvs/core/c_config.h") + inside(prefix / "include/rmm/cuda_stream_view.hpp") + cudart = inside(config["cudart"]) + roots = [inside(config[name]) for name in ("libcuvs", "libcuvs_c", "libcudf")] + roots.append(inside(prefix / "lib/librmm.so")) + for root in roots + [cudart]: + if "stubs" in root.parts or root.name.startswith(("libcuda.so", "libnvidia-")): + raise RuntimeError("driver or stub cannot be a runtime root") + library_dirs = list( + dict.fromkeys([str(cudart.parent), str(inside(target / "lib", True))]) + ) + stub_directory = inside(target / "lib/stubs", True) + inside(stub_directory / "libcuda.so") + return { + "schema_version": 1, + "provider": "pixi", + "platform": "linux-64", + "prefix": str(prefix), + "compilers": compilers, + "cuda": { + "version": cuda_version, + "include_dirs": [str(path) for path in cuda_includes], + "library_dirs": library_dirs, + "stub_library_dirs": [str(stub_directory)], + }, + "rapids": { + "include_dirs": [str(inside(prefix / "include", True))], + "library_dirs": [str(inside(prefix / "lib", True))], + "versions": versions, + }, + "pixi": { + "environment": "mo", + "lockfile": str(lockfile.resolve()), + "lockfile_sha256": config["lockfile_sha256"], + }, + "packages": packages, + "runtime_roots": [str(path) for path in roots], + "artifact_sha256": artifacts, + } diff --git a/scripts/tests/test_export_gpu_toolchain.py b/scripts/tests/test_export_gpu_toolchain.py new file mode 100644 index 0000000000..c8712204e6 --- /dev/null +++ b/scripts/tests/test_export_gpu_toolchain.py @@ -0,0 +1,153 @@ +# Copyright 2026 Sirius Contributors. +# SPDX-License-Identifier: Apache-2.0 + +import importlib.util +import json +from pathlib import Path +import subprocess +import tempfile +import unittest +from unittest.mock import patch + +import yaml + +spec = importlib.util.spec_from_file_location( + "export_gpu_toolchain", + Path(__file__).resolve().parents[1] / "export_gpu_toolchain.py", +) +gpu = importlib.util.module_from_spec(spec) +spec.loader.exec_module(gpu) + + +class ToolchainTest(unittest.TestCase): + def setUp(self): + self.directory = tempfile.TemporaryDirectory() + self.addCleanup(self.directory.cleanup) + self.root = Path(self.directory.name) + self.prefix = self.root / "pixi" + self.config = { + "prefix": str(self.prefix), + "environment": "mo", + "lockfile": str(self.root / "pixi.lock"), + "cuda_version": "13.3.73", + "cuda_include_dirs": str(self.prefix / "targets/x86_64-linux/include"), + } + for name in ("cc", "cxx", "nvcc"): + self.config[name] = str(self.file("bin/" + name)) + Path(self.config[name]).chmod(0o755) + for name in ("libcuvs", "libcuvs_c", "libcudf"): + self.config[name] = str(self.file("lib/" + name + ".so")) + self.config["cudart"] = str(self.file("lib/libcudart.so")) + self.file("lib/librmm.so") + self.file("targets/x86_64-linux/lib/stubs/libcuda.so") + self.file("targets/x86_64-linux/include/cuda.h", "#define CUDA_VERSION 13030\n") + self.file("include/cuvs/core/c_api.h") + self.file("include/cuvs/core/c_config.h") + self.file("include/rmm/cuda_stream_view.hpp") + entries = [] + for name, version in ( + ("cuda-version", "13.3"), + ("libcuvs", "26.08.01"), + ("libcudf", "26.08.01"), + ("librmm", "26.08.00"), + ("gcc_linux-64", "14.4.0"), + ("gxx_linux-64", "14.4.0"), + ): + record = { + "name": name, + "version": version, + "build": "fixture", + "url": "https://packages.invalid/" + name + ".conda", + "sha256": "a" * 64, + } + self.file("conda-meta/" + name + ".json", json.dumps(record)) + entries.append({"conda": record["url"], "sha256": record["sha256"]}) + Path(self.config["lockfile"]).write_text( + yaml.safe_dump( + { + "environments": {"mo": {"packages": {"linux-64-cuda13": entries}}}, + "packages": entries, + } + ) + ) + self.config["lockfile_sha256"] = gpu.sha256(self.config["lockfile"]) + self.mock = patch.object( + gpu.subprocess, + "run", + return_value=subprocess.CompletedProcess( + [], 0, "release 13.3, fixture", "" + ), + ) + self.mock.start() + self.addCleanup(self.mock.stop) + + def file(self, name, data="fixture"): + path = self.prefix / name + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(data) + return path + + def export(self, **options): + config = self.root / "build.json" + config.write_text(json.dumps(self.config)) + return gpu.export_toolchain( + config, options.get("cc", self.config["cc"]), self.config["cxx"] + ) + + def test_shared_contract_contains_c_api_and_separates_driver_stub(self): + exported = self.export() + self.assertEqual(exported["schema_version"], 1) + self.assertEqual(exported["rapids"]["versions"]["libcuvs_c"], "26.08.01") + self.assertIn(self.config["libcuvs_c"], exported["runtime_roots"]) + self.assertIn(self.config["libcuvs_c"], exported["artifact_sha256"]) + self.assertFalse(any("stubs" in path for path in exported["runtime_roots"])) + self.assertTrue(exported["cuda"]["stub_library_dirs"]) + self.assertIn(self.config["cc"], exported["artifact_sha256"]) + + def test_wrong_compiler_or_external_provider_fails(self): + with self.assertRaisesRegex(RuntimeError, "verified C consumer"): + self.export(cc="/usr/bin/cc") + self.config["libcuvs_c"] = "/usr/lib/libcuvs_c.so" + with self.assertRaisesRegex(RuntimeError, "escapes"): + self.export() + + def test_changed_lock_and_missing_c_api_fail(self): + Path(self.config["libcuvs_c"]).unlink() + with self.assertRaisesRegex(RuntimeError, "missing GPU"): + self.export() + Path(self.config["lockfile"]).write_text("changed") + with self.assertRaisesRegex(RuntimeError, "lock changed"): + self.export() + + def test_incompatible_headers_and_toolkit_fail(self): + self.file("targets/x86_64-linux/include/cuda.h", "#define CUDA_VERSION 13020\n") + with self.assertRaisesRegex(RuntimeError, "CUDA header"): + self.export() + self.config["cuda_version"] = "13.2.86" + with self.assertRaisesRegex(RuntimeError, "incompatible CUDA"): + self.export() + + def test_stale_or_missing_installed_package_fails(self): + record = self.prefix / "conda-meta/libcuvs.json" + data = json.loads(record.read_text()) + data["sha256"] = "b" * 64 + record.write_text(json.dumps(data)) + with self.assertRaisesRegex(RuntimeError, "disagrees with Pixi lock"): + self.export() + record.unlink() + with self.assertRaisesRegex(RuntimeError, "package set disagrees"): + self.export() + + def test_stub_symlink_and_nonexecutable_compiler_fail(self): + root = Path(self.config["libcuvs_c"]) + root.unlink() + root.symlink_to(self.prefix / "targets/x86_64-linux/lib/stubs/libcuda.so") + with self.assertRaisesRegex(RuntimeError, "driver or stub"): + self.export() + Path(self.config["cc"]).chmod(0o644) + with self.assertRaisesRegex(RuntimeError, "not executable"): + self.export() + + +if __name__ == "__main__": + unittest.main() From 2353b618c183841c81fc8200af8bc02d0f269bd8 Mon Sep 17 00:00:00 2001 From: bRong Njam Date: Wed, 23 Sep 2026 18:48:14 +0800 Subject: [PATCH 2/2] build: use Pixi directly for MO embedding --- CMakeLists.txt | 3 +- cmake/export_gpu_toolchain.cmake | 56 ------- docs/embedding-gpu-toolchain.md | 59 +++---- pixi.toml | 1 - scripts/export_embed_link.py | 15 +- scripts/export_gpu_toolchain.py | 183 --------------------- scripts/tests/test_export_embed_link.py | 45 +++++ scripts/tests/test_export_gpu_toolchain.py | 153 ----------------- 8 files changed, 71 insertions(+), 444 deletions(-) delete mode 100644 cmake/export_gpu_toolchain.cmake delete mode 100644 scripts/export_gpu_toolchain.py delete mode 100644 scripts/tests/test_export_gpu_toolchain.py diff --git a/CMakeLists.txt b/CMakeLists.txt index 9b82da9cb5..24ef107fdb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1137,7 +1137,6 @@ target_link_libraries( set_target_properties(sirius_c_smoke PROPERTIES C_STANDARD 99 LINKER_LANGUAGE CXX) target_link_libraries(sirius_c_smoke PRIVATE Sirius::embed) -include(cmake/export_gpu_toolchain.cmake) set_property( TARGET sirius_c_smoke APPEND @@ -1153,7 +1152,7 @@ add_custom_command( "${CMAKE_MAKE_PROGRAM}" --build "${CMAKE_BINARY_DIR}" --consumer "$" --header "${CMAKE_CURRENT_SOURCE_DIR}/src/include/sirius_c.h" --output - "${CMAKE_CURRENT_BINARY_DIR}/embedding-sdk" ${_sirius_gpu_export_args} + "${CMAKE_CURRENT_BINARY_DIR}/embedding-sdk" VERBATIM) # Only the TAE metadata regression includes scanner bind-data headers directly. diff --git a/cmake/export_gpu_toolchain.cmake b/cmake/export_gpu_toolchain.cmake deleted file mode 100644 index 5d6200aa59..0000000000 --- a/cmake/export_gpu_toolchain.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# Capture the provider used by CMake, rather than the environment of a later -# exporter invocation. This opt-in profile does not affect ordinary SDK builds. -set(_sirius_export_gpu_default OFF) -if("$ENV{PIXI_ENVIRONMENT_NAME}" STREQUAL "mo") - set(_sirius_export_gpu_default ON) -endif() -option(SIRIUS_EXPORT_GPU_TOOLCHAIN - "Export the MatrixOne-compatible Pixi GPU toolchain" - ${_sirius_export_gpu_default}) -if(SIRIUS_EXPORT_GPU_TOOLCHAIN) - foreach(_sirius_gpu_path "$ENV{CONDA_PREFIX}" "${CMAKE_CURRENT_SOURCE_DIR}") - if(NOT "${_sirius_gpu_path}" MATCHES "^/[A-Za-z0-9_./+@-]+$") - message( - FATAL_ERROR - "GPU provider/source paths cannot contain whitespace or metacharacters" - ) - endif() - endforeach() - if(NOT "$ENV{PIXI_ENVIRONMENT_NAME}" STREQUAL "mo" - OR NOT EXISTS "$ENV{CONDA_PREFIX}/conda-meta") - message(FATAL_ERROR "GPU toolchain export requires pixi run --frozen -e mo") - endif() - # cuVS loads C++ targets implicitly, but its C API is an explicit component. - find_package(cuvs REQUIRED CONFIG COMPONENTS c_api) - if(NOT TARGET cuvs::c_api) - message(FATAL_ERROR "The MO SDK requires the shared cuVS C API target") - endif() - set(_sirius_gpu_config "${CMAKE_CURRENT_BINARY_DIR}/gpu-toolchain-build.json") - file(SHA256 "${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock" _sirius_pixi_lock_hash) - file( - GENERATE - OUTPUT "${_sirius_gpu_config}" - CONTENT - "{\n\ - \"prefix\": \"$ENV{CONDA_PREFIX}\",\n\ - \"environment\": \"mo\",\n\ - \"lockfile\": \"${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock\",\n\ - \"lockfile_sha256\": \"${_sirius_pixi_lock_hash}\",\n\ - \"cc\": \"${CMAKE_C_COMPILER}\",\n\ - \"cxx\": \"${CMAKE_CXX_COMPILER}\",\n\ - \"nvcc\": \"${CMAKE_CUDA_COMPILER}\",\n\ - \"cuda_version\": \"${CUDAToolkit_VERSION}\",\n\ - \"cuda_include_dirs\": \"${CUDAToolkit_INCLUDE_DIRS}\",\n\ - \"cudart\": \"$\",\n\ - \"libcuvs\": \"$\",\n\ - \"libcuvs_c\": \"$\",\n\ - \"libcudf\": \"$\"\n\ -}\n") - set(_sirius_gpu_export_args --gpu-toolchain-config "${_sirius_gpu_config}") - set_property( - TARGET sirius_c_smoke - APPEND - PROPERTY LINK_DEPENDS "${_sirius_gpu_config}" - "${CMAKE_CURRENT_SOURCE_DIR}/pixi.lock" - "${CMAKE_CURRENT_SOURCE_DIR}/scripts/export_gpu_toolchain.py") -endif() diff --git a/docs/embedding-gpu-toolchain.md b/docs/embedding-gpu-toolchain.md index 8762781399..953d84e4a3 100644 --- a/docs/embedding-gpu-toolchain.md +++ b/docs/embedding-gpu-toolchain.md @@ -1,46 +1,31 @@ -# Optional shared GPU toolchain +# Pixi provider for MatrixOne embedding Refs [MatrixOne #28966](https://github.com/matrixorigin/matrixone/issues/28966). -The `mo` Pixi environment provides CUDA 13.3, GCC 14, cuVS/cuDF 26.08.01, -compatible RMM, and packaging tools for the combined MO/Sirius binary. The -default CUDA 13.2 and `cuda12` environments retain their existing selection. -The NVIDIA driver and GPU devices remain host dependencies. +The `mo` Pixi environment is the sole CUDA/RAPIDS build provider for the +combined MatrixOne/Sirius binary. It locks CUDA 13.3, GCC 14, cuVS/cuDF +26.08.01 and RMM. Sirius's ordinary CUDA 13.2 and `cuda12` profiles are +unchanged; a compatible NVIDIA driver and GPU remain host requirements. ```sh -pixi install --frozen -e mo pixi run --frozen -e mo mo-build-embedding-sdk ``` The profile-specific configure task disables `sccache` only for CUDA. The -ordinary presets retain their existing launchers; the `mo` SDK avoids the NVCC -temporary-PTX failure observed when CUDA 13.3 is launched through sccache 0.15. - -The `mo` profile enables `SIRIUS_EXPORT_GPU_TOOLCHAIN`. CMake captures the actual -compiler paths, CUDA include directories and imported CUDA/RAPIDS libraries. -The SDK exporter verifies the captured CUDA version, installed package set, -package archive hashes, and lockfile hash before writing `toolchain.json` -beside `link.json`. Other profiles continue exporting the original SDK. - -MO consumes the absolute `GPU_TOOLCHAIN_MANIFEST=/path/to/toolchain.json`. -Provider and source paths must not contain whitespace or shell/Make -metacharacters, matching MO's build contract. -Schema version 1 contains `provider`, `platform`, `prefix`, `compilers` (each -with `path` and `version`), `cuda` (version and separate include, library and -linker-stub directories), `rapids` (directories and package versions), `pixi` -(environment, lockfile and hash), installed `packages`, `runtime_roots`, and -`artifact_sha256`. The SDK's ABI and link schema remain version 1; its added -`gpu_toolchain_manifest` field names the manifest and the SDK fingerprint -includes both that file and its inputs. - -Both `libcuvs.so` and `libcuvs_c.so` are explicit runtime roots; their package -identity is the same `libcuvs` package. cuDF and RMM are also roots. Driver stubs -are recorded only as link inputs and must never be shipped as runtime driver -libraries. Packaging must discover the full dependency closure of the combined -MO binary and `libmo`, preserve the single provider, and resolve deployment -libraries relative to the packaged binary. - -The manifest is build-tree metadata, not a relocatable SDK. Reconfigure and -re-export after changing the Pixi lock or replacing the environment. A manifest -does not establish GPU execution: the combined cuVS/Sirius test with two streams -still requires a working host NVIDIA driver. +ordinary presets retain their launchers; the `mo` SDK avoids the observed NVCC +temporary-PTX failure with CUDA 13.3 and sccache 0.15. + +The existing `embedding-sdk/link.json` records the exact C smoke compiler, +link arguments, native artifacts, and source provenance. It does not export a +second GPU toolchain manifest. Build MO's GPU native libraries under the same +activated `mo` Pixi environment. The MatrixOne bridge verifies its native +generation and that the SDK compiler belongs to this prefix, then hashes and +packages the actual ELF dependency closure of both the SDK and `libmo`. +Linker stubs and NVIDIA driver libraries are never packaged as runtime +implementations. The deployed binary uses relative paths to staged shared +libraries and still requires the host driver. + +The embedding SDK is build-tree metadata, not a relocatable artifact. Rebuild +after changing the Pixi lock or environment. Compilation and packaging do not +establish GPU execution: the combined MO cuVS/Sirius test with two streams is +the runtime gate. diff --git a/pixi.toml b/pixi.toml index 4fd817ceea..4edbbe7571 100644 --- a/pixi.toml +++ b/pixi.toml @@ -116,7 +116,6 @@ librmm = "26.08.*" gcc_linux-64 = "14.*" gxx_linux-64 = "14.*" patchelf = "*" -pyyaml = "*" [feature.mo.activation.env] CUDAARCHS = "75-real;80-real;86-real;89-real;90a-real;100f-real;120a-real;120" diff --git a/scripts/export_embed_link.py b/scripts/export_embed_link.py index c4ecfd4204..bcbc099976 100644 --- a/scripts/export_embed_link.py +++ b/scripts/export_embed_link.py @@ -208,7 +208,6 @@ def main(): parser.add_argument("--consumer", type=Path, required=True) parser.add_argument("--header", type=Path, required=True) parser.add_argument("--output", type=Path, required=True) - parser.add_argument("--gpu-toolchain-config", type=Path) args = parser.parse_args() build = args.build.resolve() commands = subprocess.run( @@ -242,18 +241,10 @@ def main(): manifest["artifact_sha256"][str((args.output / "sirius_c.h").resolve())] = sha256( args.output / "sirius_c.h" ) - if args.gpu_toolchain_config: - from export_gpu_toolchain import export_toolchain - - toolchain = export_toolchain( - args.gpu_toolchain_config, c_compiler_path, compiler - ) - toolchain_path = (args.output / "toolchain.json").resolve() - toolchain_path.write_text(json.dumps(toolchain, indent=2) + "\n") - manifest["gpu_toolchain_manifest"] = str(toolchain_path) - manifest["artifact_sha256"][str(toolchain_path)] = sha256(toolchain_path) - manifest["artifact_sha256"].update(toolchain["artifact_sha256"]) (args.output / "link.json").write_text(json.dumps(manifest, indent=2) + "\n") + # Reusing a build tree must not leave the retired GPU-provider manifest + # beside a newly exported SDK that no longer records or validates it. + (args.output / "toolchain.json").unlink(missing_ok=True) # GCC/Clang response files accept quoted arguments with backslash escapes. response = "\n".join( '"' + flag.replace("\\", "\\\\").replace('"', '\\"') + '"' for flag in flags diff --git a/scripts/export_gpu_toolchain.py b/scripts/export_gpu_toolchain.py deleted file mode 100644 index 8c9b6b1da0..0000000000 --- a/scripts/export_gpu_toolchain.py +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/env python3 -# Copyright 2026 Sirius Contributors. -# SPDX-License-Identifier: Apache-2.0 -"""Export a build-bound, optional Pixi GPU provider for MatrixOne. - -The schema is shared with MO's standalone exporter. Absolute paths describe a -build installation; runtime packaging must discover the combined ELF closure. -""" - -import hashlib -import json -import os -from pathlib import Path -import re -import subprocess - -import yaml - - -def sha256(path): - with open(path, "rb") as source: - return hashlib.file_digest(source, "sha256").hexdigest() - - -def export_toolchain(configuration, cc, cxx): - config = json.loads(Path(configuration).read_text()) - prefix = Path(config["prefix"]) - if not prefix.is_absolute() or not (prefix / "conda-meta").is_dir(): - raise RuntimeError("GPU provider must be an absolute Pixi prefix") - prefix = prefix.resolve() - artifacts = {} - - def inside(value, directory=False): - path = Path(value) - if not re.fullmatch(r"/[A-Za-z0-9_./+@-]+", str(path)): - raise RuntimeError( - "GPU artifact path contains whitespace or metacharacters" - ) - if not path.is_absolute() or not path.resolve().is_relative_to(prefix): - raise RuntimeError( - "GPU artifact escapes the configured provider: " + str(path) - ) - path = path.resolve() - if not (path.is_dir() if directory else path.is_file()): - raise RuntimeError("missing GPU provider artifact: " + str(path)) - if not directory: - artifacts[str(path)] = sha256(path) - return path - - lockfile = Path(config["lockfile"]) - if ( - config["environment"] != "mo" - or not lockfile.is_absolute() - or sha256(lockfile) != config["lockfile_sha256"] - ): - raise RuntimeError("Pixi lock changed since CMake configuration; reconfigure") - artifacts[str(lockfile.resolve())] = sha256(lockfile) - lock = yaml.safe_load(lockfile.read_text()) - selected = { - entry["conda"] - for entry in lock["environments"]["mo"]["packages"]["linux-64-cuda13"] - if "conda" in entry - } - locked_hashes = { - entry["conda"]: entry["sha256"] - for entry in lock["packages"] - if entry.get("conda") in selected - } - packages = [] - records = {} - for metadata in sorted((prefix / "conda-meta").glob("*.json")): - record = json.loads(metadata.read_text()) - if record["name"] in records: - raise RuntimeError("duplicate installed package: " + record["name"]) - records[record["name"]] = record - archive_hash = record.get("sha256", "") - if not re.fullmatch(r"[0-9a-f]{64}", archive_hash): - raise RuntimeError("missing package SHA256: " + record["name"]) - packages.append( - {key: record[key] for key in ("name", "version", "build", "url", "sha256")} - ) - if locked_hashes.get(record["url"]) != archive_hash: - raise RuntimeError( - "installed package disagrees with Pixi lock: " + record["name"] - ) - inside(metadata) - if {record["url"] for record in records.values()} != selected: - raise RuntimeError("installed package set disagrees with Pixi lock") - - def version(name, expected): - record = records.get(name) - if record is None or not ( - record["version"].startswith(expected) - if expected.endswith(".") - else record["version"] == expected - ): - raise RuntimeError("incompatible or missing GPU package: " + name) - return record["version"] - - cuda_version = version("cuda-version", "13.3") - if not config["cuda_version"].startswith("13.3."): - raise RuntimeError("CMake selected an incompatible CUDA toolkit") - versions = { - "libcuvs": version("libcuvs", "26.08.01"), - "libcudf": version("libcudf", "26.08.01"), - "librmm": version("librmm", "26.08."), - } - # Both cuVS shared libraries belong to the libcuvs package. - versions["libcuvs_c"] = versions["libcuvs"] - version("gcc_linux-64", "14.") - version("gxx_linux-64", "14.") - compilers = {} - for name in ("cc", "cxx", "nvcc"): - path = inside(config[name]) - if not os.access(path, os.X_OK): - raise RuntimeError("GPU compiler is not executable: " + str(path)) - if ( - name in ("cc", "cxx") - and path != Path({"cc": cc, "cxx": cxx}[name]).resolve() - ): - raise RuntimeError("GPU compiler disagrees with verified C consumer") - output = subprocess.run( - [str(path), "--version"], - check=True, - capture_output=True, - text=True, - timeout=15, - ).stdout.strip() - if name == "nvcc" and "release 13.3," not in output: - raise RuntimeError("NVCC disagrees with configured CUDA version") - compilers[name] = {"path": str(path), "version": output} - - cuda_includes = [ - inside(path, True) for path in config["cuda_include_dirs"].split(";") - ] - target = prefix / "targets/x86_64-linux" - cuda_header = inside(target / "include/cuda.h") - if cuda_header.parent not in cuda_includes: - raise RuntimeError("CMake did not use the exported CUDA header root") - if not re.search( - r"^#define\s+CUDA_VERSION\s+13030\b", cuda_header.read_text(), re.M - ): - raise RuntimeError("CUDA header disagrees with CUDA 13.3 provider") - inside(prefix / "include/cuvs/core/c_api.h") - inside(prefix / "include/cuvs/core/c_config.h") - inside(prefix / "include/rmm/cuda_stream_view.hpp") - cudart = inside(config["cudart"]) - roots = [inside(config[name]) for name in ("libcuvs", "libcuvs_c", "libcudf")] - roots.append(inside(prefix / "lib/librmm.so")) - for root in roots + [cudart]: - if "stubs" in root.parts or root.name.startswith(("libcuda.so", "libnvidia-")): - raise RuntimeError("driver or stub cannot be a runtime root") - library_dirs = list( - dict.fromkeys([str(cudart.parent), str(inside(target / "lib", True))]) - ) - stub_directory = inside(target / "lib/stubs", True) - inside(stub_directory / "libcuda.so") - return { - "schema_version": 1, - "provider": "pixi", - "platform": "linux-64", - "prefix": str(prefix), - "compilers": compilers, - "cuda": { - "version": cuda_version, - "include_dirs": [str(path) for path in cuda_includes], - "library_dirs": library_dirs, - "stub_library_dirs": [str(stub_directory)], - }, - "rapids": { - "include_dirs": [str(inside(prefix / "include", True))], - "library_dirs": [str(inside(prefix / "lib", True))], - "versions": versions, - }, - "pixi": { - "environment": "mo", - "lockfile": str(lockfile.resolve()), - "lockfile_sha256": config["lockfile_sha256"], - }, - "packages": packages, - "runtime_roots": [str(path) for path in roots], - "artifact_sha256": artifacts, - } diff --git a/scripts/tests/test_export_embed_link.py b/scripts/tests/test_export_embed_link.py index f06af2b72e..f8e5382f5d 100644 --- a/scripts/tests/test_export_embed_link.py +++ b/scripts/tests/test_export_embed_link.py @@ -2,8 +2,10 @@ # SPDX-License-Identifier: Apache-2.0 import importlib.util +import json from pathlib import Path import subprocess +import sys import tempfile import unittest from unittest.mock import patch @@ -16,6 +18,49 @@ class ExportTest(unittest.TestCase): + def test_export_retires_stale_gpu_manifest(self): + with tempfile.TemporaryDirectory() as directory: + root = Path(directory) + output = root / "embedding-sdk" + output.mkdir() + stale = output / "toolchain.json" + stale.write_text("obsolete GPU manifest") + header = root / "sirius_c.h" + header.write_text("#define SIRIUS_ABI_VERSION 1u\n") + consumer = root / "consumer" + consumer.write_bytes(b"consumer") + argv = [ + "export_embed_link.py", + "--ninja", + "ninja", + "--build", + str(root), + "--consumer", + str(consumer), + "--header", + str(header), + "--output", + str(output), + ] + with patch.object(sys, "argv", argv), patch.object( + sdk.subprocess, + "run", + return_value=subprocess.CompletedProcess([], 0, "", ""), + ), patch.object( + sdk, "link_arguments", return_value=("/usr/bin/c++", []) + ), patch.object( + sdk, "c_compiler", return_value="/usr/bin/cc" + ), patch.object( + sdk, "source_provenance", return_value={"source_revision": "test"} + ), patch.object( + sdk, "artifact_hashes", return_value={} + ): + sdk.main() + self.assertFalse(stale.exists()) + self.assertNotIn( + "gpu_toolchain_manifest", json.loads((output / "link.json").read_text()) + ) + def test_c_compiler_is_verified_from_cache_and_actual_compile(self): with tempfile.TemporaryDirectory() as directory: build = Path(directory) diff --git a/scripts/tests/test_export_gpu_toolchain.py b/scripts/tests/test_export_gpu_toolchain.py deleted file mode 100644 index c8712204e6..0000000000 --- a/scripts/tests/test_export_gpu_toolchain.py +++ /dev/null @@ -1,153 +0,0 @@ -# Copyright 2026 Sirius Contributors. -# SPDX-License-Identifier: Apache-2.0 - -import importlib.util -import json -from pathlib import Path -import subprocess -import tempfile -import unittest -from unittest.mock import patch - -import yaml - -spec = importlib.util.spec_from_file_location( - "export_gpu_toolchain", - Path(__file__).resolve().parents[1] / "export_gpu_toolchain.py", -) -gpu = importlib.util.module_from_spec(spec) -spec.loader.exec_module(gpu) - - -class ToolchainTest(unittest.TestCase): - def setUp(self): - self.directory = tempfile.TemporaryDirectory() - self.addCleanup(self.directory.cleanup) - self.root = Path(self.directory.name) - self.prefix = self.root / "pixi" - self.config = { - "prefix": str(self.prefix), - "environment": "mo", - "lockfile": str(self.root / "pixi.lock"), - "cuda_version": "13.3.73", - "cuda_include_dirs": str(self.prefix / "targets/x86_64-linux/include"), - } - for name in ("cc", "cxx", "nvcc"): - self.config[name] = str(self.file("bin/" + name)) - Path(self.config[name]).chmod(0o755) - for name in ("libcuvs", "libcuvs_c", "libcudf"): - self.config[name] = str(self.file("lib/" + name + ".so")) - self.config["cudart"] = str(self.file("lib/libcudart.so")) - self.file("lib/librmm.so") - self.file("targets/x86_64-linux/lib/stubs/libcuda.so") - self.file("targets/x86_64-linux/include/cuda.h", "#define CUDA_VERSION 13030\n") - self.file("include/cuvs/core/c_api.h") - self.file("include/cuvs/core/c_config.h") - self.file("include/rmm/cuda_stream_view.hpp") - entries = [] - for name, version in ( - ("cuda-version", "13.3"), - ("libcuvs", "26.08.01"), - ("libcudf", "26.08.01"), - ("librmm", "26.08.00"), - ("gcc_linux-64", "14.4.0"), - ("gxx_linux-64", "14.4.0"), - ): - record = { - "name": name, - "version": version, - "build": "fixture", - "url": "https://packages.invalid/" + name + ".conda", - "sha256": "a" * 64, - } - self.file("conda-meta/" + name + ".json", json.dumps(record)) - entries.append({"conda": record["url"], "sha256": record["sha256"]}) - Path(self.config["lockfile"]).write_text( - yaml.safe_dump( - { - "environments": {"mo": {"packages": {"linux-64-cuda13": entries}}}, - "packages": entries, - } - ) - ) - self.config["lockfile_sha256"] = gpu.sha256(self.config["lockfile"]) - self.mock = patch.object( - gpu.subprocess, - "run", - return_value=subprocess.CompletedProcess( - [], 0, "release 13.3, fixture", "" - ), - ) - self.mock.start() - self.addCleanup(self.mock.stop) - - def file(self, name, data="fixture"): - path = self.prefix / name - path.parent.mkdir(parents=True, exist_ok=True) - path.write_text(data) - return path - - def export(self, **options): - config = self.root / "build.json" - config.write_text(json.dumps(self.config)) - return gpu.export_toolchain( - config, options.get("cc", self.config["cc"]), self.config["cxx"] - ) - - def test_shared_contract_contains_c_api_and_separates_driver_stub(self): - exported = self.export() - self.assertEqual(exported["schema_version"], 1) - self.assertEqual(exported["rapids"]["versions"]["libcuvs_c"], "26.08.01") - self.assertIn(self.config["libcuvs_c"], exported["runtime_roots"]) - self.assertIn(self.config["libcuvs_c"], exported["artifact_sha256"]) - self.assertFalse(any("stubs" in path for path in exported["runtime_roots"])) - self.assertTrue(exported["cuda"]["stub_library_dirs"]) - self.assertIn(self.config["cc"], exported["artifact_sha256"]) - - def test_wrong_compiler_or_external_provider_fails(self): - with self.assertRaisesRegex(RuntimeError, "verified C consumer"): - self.export(cc="/usr/bin/cc") - self.config["libcuvs_c"] = "/usr/lib/libcuvs_c.so" - with self.assertRaisesRegex(RuntimeError, "escapes"): - self.export() - - def test_changed_lock_and_missing_c_api_fail(self): - Path(self.config["libcuvs_c"]).unlink() - with self.assertRaisesRegex(RuntimeError, "missing GPU"): - self.export() - Path(self.config["lockfile"]).write_text("changed") - with self.assertRaisesRegex(RuntimeError, "lock changed"): - self.export() - - def test_incompatible_headers_and_toolkit_fail(self): - self.file("targets/x86_64-linux/include/cuda.h", "#define CUDA_VERSION 13020\n") - with self.assertRaisesRegex(RuntimeError, "CUDA header"): - self.export() - self.config["cuda_version"] = "13.2.86" - with self.assertRaisesRegex(RuntimeError, "incompatible CUDA"): - self.export() - - def test_stale_or_missing_installed_package_fails(self): - record = self.prefix / "conda-meta/libcuvs.json" - data = json.loads(record.read_text()) - data["sha256"] = "b" * 64 - record.write_text(json.dumps(data)) - with self.assertRaisesRegex(RuntimeError, "disagrees with Pixi lock"): - self.export() - record.unlink() - with self.assertRaisesRegex(RuntimeError, "package set disagrees"): - self.export() - - def test_stub_symlink_and_nonexecutable_compiler_fail(self): - root = Path(self.config["libcuvs_c"]) - root.unlink() - root.symlink_to(self.prefix / "targets/x86_64-linux/lib/stubs/libcuda.so") - with self.assertRaisesRegex(RuntimeError, "driver or stub"): - self.export() - Path(self.config["cc"]).chmod(0o644) - with self.assertRaisesRegex(RuntimeError, "not executable"): - self.export() - - -if __name__ == "__main__": - unittest.main()