diff --git a/.azure-pipelines/azure-pipelines-osx.yml b/.azure-pipelines/azure-pipelines-osx.yml index 8bd74f0..069e795 100755 --- a/.azure-pipelines/azure-pipelines-osx.yml +++ b/.azure-pipelines/azure-pipelines-osx.yml @@ -12,42 +12,52 @@ jobs: CONFIG: osx_64_python3.10.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_64_python3.11.____cpython: CONFIG: osx_64_python3.11.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_64_python3.12.____cpython: CONFIG: osx_64_python3.12.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_64_python3.13.____cp313: CONFIG: osx_64_python3.13.____cp313 UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_64_python3.14.____cp314: CONFIG: osx_64_python3.14.____cp314 UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_arm64_python3.10.____cpython: CONFIG: osx_arm64_python3.10.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_arm64_python3.11.____cpython: CONFIG: osx_arm64_python3.11.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_arm64_python3.12.____cpython: CONFIG: osx_arm64_python3.12.____cpython UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_arm64_python3.13.____cp313: CONFIG: osx_arm64_python3.13.____cp313 UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false osx_arm64_python3.14.____cp314: CONFIG: osx_arm64_python3.14.____cp314 UPLOAD_PACKAGES: 'True' VMIMAGE: macOS-15 + store_build_artifacts: false timeoutInMinutes: 360 variables: {} diff --git a/.azure-pipelines/azure-pipelines-win.yml b/.azure-pipelines/azure-pipelines-win.yml index 2adcb90..0a281de 100755 --- a/.azure-pipelines/azure-pipelines-win.yml +++ b/.azure-pipelines/azure-pipelines-win.yml @@ -11,18 +11,23 @@ jobs: win_64_python3.10.____cpython: CONFIG: win_64_python3.10.____cpython UPLOAD_PACKAGES: 'True' + store_build_artifacts: false win_64_python3.11.____cpython: CONFIG: win_64_python3.11.____cpython UPLOAD_PACKAGES: 'True' + store_build_artifacts: false win_64_python3.12.____cpython: CONFIG: win_64_python3.12.____cpython UPLOAD_PACKAGES: 'True' + store_build_artifacts: false win_64_python3.13.____cp313: CONFIG: win_64_python3.13.____cp313 UPLOAD_PACKAGES: 'True' + store_build_artifacts: false win_64_python3.14.____cp314: CONFIG: win_64_python3.14.____cp314 UPLOAD_PACKAGES: 'True' + store_build_artifacts: false timeoutInMinutes: 360 variables: CONDA_BLD_PATH: D:\\bld\\ diff --git a/.ci_support/linux_64_python3.10.____cpython.yaml b/.ci_support/linux_64_python3.10.____cpython.yaml index 13aeff0..4e692ca 100644 --- a/.ci_support/linux_64_python3.10.____cpython.yaml +++ b/.ci_support/linux_64_python3.10.____cpython.yaml @@ -16,8 +16,12 @@ cxx_compiler_version: - '14' docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/linux_64_python3.11.____cpython.yaml b/.ci_support/linux_64_python3.11.____cpython.yaml index a95a916..42519a6 100644 --- a/.ci_support/linux_64_python3.11.____cpython.yaml +++ b/.ci_support/linux_64_python3.11.____cpython.yaml @@ -16,8 +16,12 @@ cxx_compiler_version: - '14' docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/linux_64_python3.12.____cpython.yaml b/.ci_support/linux_64_python3.12.____cpython.yaml index 321b4b0..b8bfc61 100644 --- a/.ci_support/linux_64_python3.12.____cpython.yaml +++ b/.ci_support/linux_64_python3.12.____cpython.yaml @@ -16,8 +16,12 @@ cxx_compiler_version: - '14' docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/linux_64_python3.13.____cp313.yaml b/.ci_support/linux_64_python3.13.____cp313.yaml index 3ef67a1..c4eb4af 100644 --- a/.ci_support/linux_64_python3.13.____cp313.yaml +++ b/.ci_support/linux_64_python3.13.____cp313.yaml @@ -16,8 +16,12 @@ cxx_compiler_version: - '14' docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/linux_64_python3.14.____cp314.yaml b/.ci_support/linux_64_python3.14.____cp314.yaml index 66f03ec..69c01f5 100644 --- a/.ci_support/linux_64_python3.14.____cp314.yaml +++ b/.ci_support/linux_64_python3.14.____cp314.yaml @@ -16,8 +16,12 @@ cxx_compiler_version: - '14' docker_image: - quay.io/condaforge/linux-anvil-x86_64:alma9 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_64_python3.10.____cpython.yaml b/.ci_support/osx_64_python3.10.____cpython.yaml index f52a346..9214331 100644 --- a/.ci_support/osx_64_python3.10.____cpython.yaml +++ b/.ci_support/osx_64_python3.10.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - x86_64-apple-darwin13.4.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_64_python3.11.____cpython.yaml b/.ci_support/osx_64_python3.11.____cpython.yaml index b0b9cac..66a2081 100644 --- a/.ci_support/osx_64_python3.11.____cpython.yaml +++ b/.ci_support/osx_64_python3.11.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - x86_64-apple-darwin13.4.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_64_python3.12.____cpython.yaml b/.ci_support/osx_64_python3.12.____cpython.yaml index 7c3c4c1..e2e081d 100644 --- a/.ci_support/osx_64_python3.12.____cpython.yaml +++ b/.ci_support/osx_64_python3.12.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - x86_64-apple-darwin13.4.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_64_python3.13.____cp313.yaml b/.ci_support/osx_64_python3.13.____cp313.yaml index 9069bd0..97ebc81 100644 --- a/.ci_support/osx_64_python3.13.____cp313.yaml +++ b/.ci_support/osx_64_python3.13.____cp313.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - x86_64-apple-darwin13.4.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_64_python3.14.____cp314.yaml b/.ci_support/osx_64_python3.14.____cp314.yaml index ff5bb88..a27cace 100644 --- a/.ci_support/osx_64_python3.14.____cp314.yaml +++ b/.ci_support/osx_64_python3.14.____cp314.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - x86_64-apple-darwin13.4.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_arm64_python3.10.____cpython.yaml b/.ci_support/osx_arm64_python3.10.____cpython.yaml index 68b5069..2e8cdb9 100644 --- a/.ci_support/osx_arm64_python3.10.____cpython.yaml +++ b/.ci_support/osx_arm64_python3.10.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - arm64-apple-darwin20.0.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_arm64_python3.11.____cpython.yaml b/.ci_support/osx_arm64_python3.11.____cpython.yaml index 322c9d0..68d8ef9 100644 --- a/.ci_support/osx_arm64_python3.11.____cpython.yaml +++ b/.ci_support/osx_arm64_python3.11.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - arm64-apple-darwin20.0.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_arm64_python3.12.____cpython.yaml b/.ci_support/osx_arm64_python3.12.____cpython.yaml index a2f5c32..20b645d 100644 --- a/.ci_support/osx_arm64_python3.12.____cpython.yaml +++ b/.ci_support/osx_arm64_python3.12.____cpython.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - arm64-apple-darwin20.0.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_arm64_python3.13.____cp313.yaml b/.ci_support/osx_arm64_python3.13.____cp313.yaml index 6fc6902..178e05e 100644 --- a/.ci_support/osx_arm64_python3.13.____cp313.yaml +++ b/.ci_support/osx_arm64_python3.13.____cp313.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - arm64-apple-darwin20.0.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/osx_arm64_python3.14.____cp314.yaml b/.ci_support/osx_arm64_python3.14.____cp314.yaml index 16da089..6ffd693 100644 --- a/.ci_support/osx_arm64_python3.14.____cp314.yaml +++ b/.ci_support/osx_arm64_python3.14.____cp314.yaml @@ -18,10 +18,16 @@ cxx_compiler: - clangxx cxx_compiler_version: - '19' +gmp: +- '6' libboost_devel: - '1.86' +llvm_openmp: +- '19' macos_machine: - arm64-apple-darwin20.0.0 +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/win_64_python3.10.____cpython.yaml b/.ci_support/win_64_python3.10.____cpython.yaml index d04fe0e..8982f45 100644 --- a/.ci_support/win_64_python3.10.____cpython.yaml +++ b/.ci_support/win_64_python3.10.____cpython.yaml @@ -8,8 +8,12 @@ channel_targets: - conda-forge main cxx_compiler: - vs2022 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/win_64_python3.11.____cpython.yaml b/.ci_support/win_64_python3.11.____cpython.yaml index 461e528..d2f64b9 100644 --- a/.ci_support/win_64_python3.11.____cpython.yaml +++ b/.ci_support/win_64_python3.11.____cpython.yaml @@ -8,8 +8,12 @@ channel_targets: - conda-forge main cxx_compiler: - vs2022 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/win_64_python3.12.____cpython.yaml b/.ci_support/win_64_python3.12.____cpython.yaml index c763a6c..0a1ccda 100644 --- a/.ci_support/win_64_python3.12.____cpython.yaml +++ b/.ci_support/win_64_python3.12.____cpython.yaml @@ -8,8 +8,12 @@ channel_targets: - conda-forge main cxx_compiler: - vs2022 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/win_64_python3.13.____cp313.yaml b/.ci_support/win_64_python3.13.____cp313.yaml index 641c0f4..06efac1 100644 --- a/.ci_support/win_64_python3.13.____cp313.yaml +++ b/.ci_support/win_64_python3.13.____cp313.yaml @@ -8,8 +8,12 @@ channel_targets: - conda-forge main cxx_compiler: - vs2022 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.ci_support/win_64_python3.14.____cp314.yaml b/.ci_support/win_64_python3.14.____cp314.yaml index 6f61310..bd40744 100644 --- a/.ci_support/win_64_python3.14.____cp314.yaml +++ b/.ci_support/win_64_python3.14.____cp314.yaml @@ -8,8 +8,12 @@ channel_targets: - conda-forge main cxx_compiler: - vs2022 +gmp: +- '6' libboost_devel: - '1.86' +mpfr: +- '4' numpy: - '2' pin_run_as_build: diff --git a/.github/workflows/conda-build.yml b/.github/workflows/conda-build.yml index 3e1fda7..019e8b7 100644 --- a/.github/workflows/conda-build.yml +++ b/.github/workflows/conda-build.yml @@ -23,26 +23,31 @@ jobs: matrix: include: - CONFIG: linux_64_python3.10.____cpython + STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu runs_on: ['ubuntu-latest'] DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 - CONFIG: linux_64_python3.11.____cpython + STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu runs_on: ['ubuntu-latest'] DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 - CONFIG: linux_64_python3.12.____cpython + STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu runs_on: ['ubuntu-latest'] DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 - CONFIG: linux_64_python3.13.____cp313 + STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu runs_on: ['ubuntu-latest'] DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 - CONFIG: linux_64_python3.14.____cp314 + STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True os: ubuntu runs_on: ['ubuntu-latest'] @@ -119,7 +124,7 @@ jobs: env: # default value; make it explicit, as it needs to match with artefact # generation below. Not configurable for now, can be revisited later - CONDA_BLD_DIR: C:\bld + CONDA_BLD_PATH: C:\bld MINIFORGE_HOME: ${{ contains(runner.arch, 'ARM') && 'C' || 'D' }}:\Miniforge PYTHONUNBUFFERED: 1 CONFIG: ${{ matrix.CONFIG }} diff --git a/.gitignore b/.gitignore index 47b5408..86a9c55 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ # Ignore all files and folders in root * !/conda-forge.yml +!.recipe_maintainers.json # Don't ignore any files/folders if the parent folder is 'un-ignored' # This also avoids warnings when adding an already-checked file with an ignored parent. diff --git a/.scripts/run_docker_build.sh b/.scripts/run_docker_build.sh index b63b5a0..10d6a2a 100755 --- a/.scripts/run_docker_build.sh +++ b/.scripts/run_docker_build.sh @@ -11,6 +11,8 @@ source .scripts/logging_utils.sh set -xeo pipefail +DOCKER_EXECUTABLE="${DOCKER_EXECUTABLE:-docker}" + THISDIR="$( cd "$( dirname "$0" )" >/dev/null && pwd )" PROVIDER_DIR="$(basename "$THISDIR")" @@ -27,7 +29,7 @@ if [[ "${sha:-}" == "" ]]; then popd fi -docker info +${DOCKER_EXECUTABLE} info # In order for the conda-build process in the container to write to the mounted # volumes, we need to run with the same id as the host machine, which is @@ -35,6 +37,7 @@ docker info export HOST_USER_ID=$(id -u) # Check if docker-machine is being used (normally on OSX) and get the uid from # the VM + if hash docker-machine 2> /dev/null && docker-machine active > /dev/null; then export HOST_USER_ID=$(docker-machine ssh $(docker-machine active) id -u) fi @@ -76,16 +79,34 @@ if [ -z "${CI}" ]; then DOCKER_RUN_ARGS="-it ${DOCKER_RUN_ARGS}" fi -( endgroup "Configure Docker" ) 2> /dev/null +# Default volume suffix for Docker (preserve original behavior) +VOLUME_SUFFIX=",z" +# Podman-specific handling +if [ "${DOCKER_EXECUTABLE}" = "podman" ]; then + # Fix file permissions for rootless podman builds + podman unshare chown -R ${HOST_USER_ID}:${HOST_USER_ID} "${ARTIFACTS}" + podman unshare chown -R ${HOST_USER_ID}:${HOST_USER_ID} "${RECIPE_ROOT}" + + # Add SELinux label only if enforcing + if command -v getenforce &>/dev/null && [ "$(getenforce)" = "Enforcing" ]; then + VOLUME_SUFFIX=",z" + else + VOLUME_SUFFIX="" + fi +fi + +( endgroup "Configure Docker" ) 2> /dev/null ( startgroup "Start Docker" ) 2> /dev/null export UPLOAD_PACKAGES="${UPLOAD_PACKAGES:-True}" export IS_PR_BUILD="${IS_PR_BUILD:-False}" -docker pull "${DOCKER_IMAGE}" -docker run ${DOCKER_RUN_ARGS} \ - -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw,z,delegated \ - -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw,z,delegated \ + +${DOCKER_EXECUTABLE} pull "${DOCKER_IMAGE}" + +${DOCKER_EXECUTABLE} run ${DOCKER_RUN_ARGS} \ + -v "${RECIPE_ROOT}":/home/conda/recipe_root:rw${VOLUME_SUFFIX},delegated \ + -v "${FEEDSTOCK_ROOT}":/home/conda/feedstock_root:rw${VOLUME_SUFFIX},delegated \ -e CONFIG \ -e HOST_USER_ID \ -e UPLOAD_PACKAGES \ diff --git a/README.md b/README.md index ac7e7b2..e1382d7 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Feedstock license: [BSD-3-Clause](https://github.com/conda-forge/multipers-feeds Home: https://davidlapous.github.io/multipers/ -Package license: MIT +Package license: GPL-3.0-or-later Summary: Multiparameter Topological Persistence for Machine Learning diff --git a/recipe/conda_build_config.yaml b/recipe/conda_build_config.yaml index aa098b2..cceda62 100644 --- a/recipe/conda_build_config.yaml +++ b/recipe/conda_build_config.yaml @@ -1,2 +1,4 @@ c_stdlib_version: # [osx] - 11.0 # [osx] +libboost_devel: + - '1.86' diff --git a/recipe/meta.yaml b/recipe/meta.yaml index 192a379..498579d 100644 --- a/recipe/meta.yaml +++ b/recipe/meta.yaml @@ -1,5 +1,5 @@ {% set name = "multipers" %} -{% set version = "2.5.0" %} +{% set version = "2.6.0" %} package: name: {{ name|lower }} @@ -7,18 +7,20 @@ package: source: url: https://pypi.org/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz - sha256: 5a6c0e7f2825af24c3e743dd4aeea5afc859d70ea7f3705c80d6380cd5d9476d + sha256: 565d4ea96236aa4a6bed905a7b0fcb8d8e5a5637926aa68d33b9e114116e5711 build: script: | export CONDA_PREFIX="${PREFIX}" # [unix] export CMAKE_GENERATOR=Ninja # [unix] - export CMAKE_BUILD_PARALLEL_LEVEL="${CPU_COUNT}" # [unix] + export CMAKE_BUILD_PARALLEL_LEVEL=2 # [unix] set "CONDA_PREFIX=%PREFIX:\=/%" # [win] set "CMAKE_BUILD_PARALLEL_LEVEL=%CPU_COUNT%" # [win] {{ PYTHON }} -m pip install . -vv --no-build-isolation --no-deps number: 0 skip: true # [py<=39] + missing_dso_whitelist: + - $RPATH/multipers_core.dll # [win] requirements: build: @@ -28,25 +30,27 @@ requirements: - python # [build_platform != target_platform] - cross-python_{{ target_platform }} # [build_platform != target_platform] - numpy >=2 # [build_platform != target_platform] - - cython >=3 # [build_platform != target_platform] + - nanobind # [build_platform != target_platform] - pip # [build_platform != target_platform] - python-build # [build_platform != target_platform] - wheel # [build_platform != target_platform] - scikit-build-core # [build_platform != target_platform] - ninja - cmake >=3.27 + - patch # [unix] + - m2-patch # [win] host: - python - numpy >=2 - - cython >=3 - python-build + - nanobind - scikit-build-core - wheel - pip - tbb - tbb-devel - libboost-devel - - cgal-cpp + - cgal-cpp - gmp - mpfr - eigen @@ -57,7 +61,7 @@ requirements: - python - tbb - {{ pin_compatible('numpy') }} - - gudhi >=3.8 + - gudhi >=3.10 - tqdm - scipy - joblib