From 4fc46a8205d5ecac19b574d3c54056f7250ddab4 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Fri, 19 Dec 2025 19:01:10 +0100 Subject: [PATCH 1/7] Update FetchContent --- cmake/DependenciesResolver.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/DependenciesResolver.cmake b/cmake/DependenciesResolver.cmake index 326c7102b..32a14b3bb 100644 --- a/cmake/DependenciesResolver.cmake +++ b/cmake/DependenciesResolver.cmake @@ -78,7 +78,7 @@ macro(find_or_download_package) FetchContent_GetProperties(${ARG_NAME}) if(NOT ${ARG_NAME}_POPULATED) message(STATUS "Downloading ${ARG_NAME}") - FetchContent_Populate(${ARG_NAME}) + FetchContent_MakeAvailable(${ARG_NAME}) message(STATUS "Building ${ARG_NAME}") # FetchContent_Populate uses lower case name of FetchContent_Declare for directories string(TOLOWER "${ARG_NAME}" ARG_NAME_LOWER) From 2024c51f2ea00b645ad80e7f1c845741bbb5b031 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Fri, 19 Dec 2025 19:16:50 +0100 Subject: [PATCH 2/7] Adapt headers for newer xtensor --- libecole/include/ecole/dynamics/branching.hpp | 2 +- libecole/include/ecole/dynamics/primal-search.hpp | 2 +- libecole/include/ecole/observation/hutter-2011.hpp | 2 +- libecole/include/ecole/observation/khalil-2016.hpp | 2 +- .../include/ecole/observation/milp-bipartite.hpp | 2 +- .../include/ecole/observation/node-bipartite.hpp | 2 +- libecole/include/ecole/observation/pseudocosts.hpp | 2 +- .../ecole/observation/strong-branching-scores.hpp | 4 ++-- libecole/include/ecole/scip/cons.hpp | 2 +- libecole/include/ecole/utility/sparse-matrix.hpp | 2 +- libecole/src/dynamics/branching.cpp | 2 +- libecole/src/dynamics/primal-search.cpp | 2 +- .../src/instance/capacitated-facility-location.cpp | 8 ++++---- libecole/src/instance/combinatorial-auction.cpp | 12 ++++++------ libecole/src/instance/set-cover.cpp | 8 ++++---- libecole/src/observation/hutter-2011.cpp | 10 +++++----- libecole/src/observation/khalil-2016.cpp | 4 ++-- libecole/src/observation/milp-bipartite.cpp | 5 ++--- libecole/src/observation/node-bipartite.cpp | 2 +- libecole/src/observation/pseudocosts.cpp | 4 ++-- libecole/src/scip/cons.cpp | 9 +++++---- libecole/tests/src/dynamics/test-branching.cpp | 4 ++-- libecole/tests/src/dynamics/test-primal-search.cpp | 4 ++-- libecole/tests/src/observation/test-hutter-2011.cpp | 2 +- libecole/tests/src/observation/test-khalil-2016.cpp | 8 ++++---- .../tests/src/observation/test-milp-bipartite.cpp | 4 ++-- .../tests/src/observation/test-node-bipartite.cpp | 4 ++-- .../src/observation/test-strong-branching-scores.cpp | 4 ++-- 28 files changed, 59 insertions(+), 59 deletions(-) diff --git a/libecole/include/ecole/dynamics/branching.hpp b/libecole/include/ecole/dynamics/branching.hpp index 6838ff85d..9792f1c9a 100644 --- a/libecole/include/ecole/dynamics/branching.hpp +++ b/libecole/include/ecole/dynamics/branching.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include "ecole/default.hpp" #include "ecole/dynamics/parts.hpp" diff --git a/libecole/include/ecole/dynamics/primal-search.hpp b/libecole/include/ecole/dynamics/primal-search.hpp index a32fd678a..5710c1ecc 100644 --- a/libecole/include/ecole/dynamics/primal-search.hpp +++ b/libecole/include/ecole/dynamics/primal-search.hpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include "ecole/dynamics/parts.hpp" #include "ecole/export.hpp" diff --git a/libecole/include/ecole/observation/hutter-2011.hpp b/libecole/include/ecole/observation/hutter-2011.hpp index abf7d31f9..c058537fd 100644 --- a/libecole/include/ecole/observation/hutter-2011.hpp +++ b/libecole/include/ecole/observation/hutter-2011.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/observation/khalil-2016.hpp b/libecole/include/ecole/observation/khalil-2016.hpp index 7cbeb96b3..7dfccf8b6 100644 --- a/libecole/include/ecole/observation/khalil-2016.hpp +++ b/libecole/include/ecole/observation/khalil-2016.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/observation/milp-bipartite.hpp b/libecole/include/ecole/observation/milp-bipartite.hpp index 7a24cd59b..2fda0c8c7 100644 --- a/libecole/include/ecole/observation/milp-bipartite.hpp +++ b/libecole/include/ecole/observation/milp-bipartite.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/observation/node-bipartite.hpp b/libecole/include/ecole/observation/node-bipartite.hpp index 77bcfaa02..fc886a645 100644 --- a/libecole/include/ecole/observation/node-bipartite.hpp +++ b/libecole/include/ecole/observation/node-bipartite.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/observation/pseudocosts.hpp b/libecole/include/ecole/observation/pseudocosts.hpp index 22793e858..7a88f6087 100644 --- a/libecole/include/ecole/observation/pseudocosts.hpp +++ b/libecole/include/ecole/observation/pseudocosts.hpp @@ -2,7 +2,7 @@ #include -#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/observation/strong-branching-scores.hpp b/libecole/include/ecole/observation/strong-branching-scores.hpp index 9a6aeb2c6..84f478a6a 100644 --- a/libecole/include/ecole/observation/strong-branching-scores.hpp +++ b/libecole/include/ecole/observation/strong-branching-scores.hpp @@ -3,8 +3,8 @@ #include #include -#include -#include +#include +#include #include "ecole/export.hpp" #include "ecole/observation/abstract.hpp" diff --git a/libecole/include/ecole/scip/cons.hpp b/libecole/include/ecole/scip/cons.hpp index 10cc579ee..9d85e7de4 100644 --- a/libecole/include/ecole/scip/cons.hpp +++ b/libecole/include/ecole/scip/cons.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/libecole/include/ecole/utility/sparse-matrix.hpp b/libecole/include/ecole/utility/sparse-matrix.hpp index 1bb7eca84..94b772949 100644 --- a/libecole/include/ecole/utility/sparse-matrix.hpp +++ b/libecole/include/ecole/utility/sparse-matrix.hpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace ecole::utility { diff --git a/libecole/src/dynamics/branching.cpp b/libecole/src/dynamics/branching.cpp index ecc649e69..9a6e3248e 100644 --- a/libecole/src/dynamics/branching.cpp +++ b/libecole/src/dynamics/branching.cpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include "ecole/dynamics/branching.hpp" #include "ecole/scip/model.hpp" diff --git a/libecole/src/dynamics/primal-search.cpp b/libecole/src/dynamics/primal-search.cpp index e1f77f0f1..8874116de 100644 --- a/libecole/src/dynamics/primal-search.cpp +++ b/libecole/src/dynamics/primal-search.cpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include "ecole/dynamics/primal-search.hpp" #include "ecole/exception.hpp" diff --git a/libecole/src/instance/capacitated-facility-location.cpp b/libecole/src/instance/capacitated-facility-location.cpp index 4729e664e..f980dcdc8 100644 --- a/libecole/src/instance/capacitated-facility-location.cpp +++ b/libecole/src/instance/capacitated-facility-location.cpp @@ -4,10 +4,10 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include "ecole/instance/capacitated-facility-location.hpp" #include "ecole/scip/cons.hpp" diff --git a/libecole/src/instance/combinatorial-auction.cpp b/libecole/src/instance/combinatorial-auction.cpp index a0db29588..b9e490ebe 100644 --- a/libecole/src/instance/combinatorial-auction.cpp +++ b/libecole/src/instance/combinatorial-auction.cpp @@ -6,12 +6,12 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "ecole/instance/combinatorial-auction.hpp" #include "ecole/scip/cons.hpp" diff --git a/libecole/src/instance/set-cover.cpp b/libecole/src/instance/set-cover.cpp index b0a871c1a..067f3c3d0 100644 --- a/libecole/src/instance/set-cover.cpp +++ b/libecole/src/instance/set-cover.cpp @@ -1,10 +1,10 @@ #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include "ecole/instance/set-cover.hpp" #include "ecole/scip/cons.hpp" diff --git a/libecole/src/observation/hutter-2011.cpp b/libecole/src/observation/hutter-2011.cpp index d5c9122dd..69e8f79e9 100644 --- a/libecole/src/observation/hutter-2011.cpp +++ b/libecole/src/observation/hutter-2011.cpp @@ -10,11 +10,11 @@ #include #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include "ecole/observation/hutter-2011.hpp" #include "ecole/scip/cons.hpp" diff --git a/libecole/src/observation/khalil-2016.cpp b/libecole/src/observation/khalil-2016.cpp index 3a296dc2a..680e8cb63 100644 --- a/libecole/src/observation/khalil-2016.cpp +++ b/libecole/src/observation/khalil-2016.cpp @@ -9,8 +9,8 @@ #include #include #include -#include -#include +#include +#include #include "ecole/observation/khalil-2016.hpp" #include "ecole/scip/col.hpp" diff --git a/libecole/src/observation/milp-bipartite.cpp b/libecole/src/observation/milp-bipartite.cpp index 05b37d268..2e4490b5f 100644 --- a/libecole/src/observation/milp-bipartite.cpp +++ b/libecole/src/observation/milp-bipartite.cpp @@ -4,9 +4,8 @@ #include #include #include -#include -#include -#include +#include +#include #include "ecole/exception.hpp" #include "ecole/observation/milp-bipartite.hpp" diff --git a/libecole/src/observation/node-bipartite.cpp b/libecole/src/observation/node-bipartite.cpp index e51b7cec2..7a1371663 100644 --- a/libecole/src/observation/node-bipartite.cpp +++ b/libecole/src/observation/node-bipartite.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #include "ecole/observation/node-bipartite.hpp" #include "ecole/scip/model.hpp" diff --git a/libecole/src/observation/pseudocosts.cpp b/libecole/src/observation/pseudocosts.cpp index 04b33048f..2d1cd4175 100644 --- a/libecole/src/observation/pseudocosts.cpp +++ b/libecole/src/observation/pseudocosts.cpp @@ -4,8 +4,8 @@ #include #include -#include -#include +#include +#include #include "ecole/observation/pseudocosts.hpp" #include "ecole/scip/model.hpp" diff --git a/libecole/src/scip/cons.cpp b/libecole/src/scip/cons.cpp index 9c616f637..e12fef240 100644 --- a/libecole/src/scip/cons.cpp +++ b/libecole/src/scip/cons.cpp @@ -1,10 +1,11 @@ #include #include #include -#include -#include -#include -#include + +#include +#include +#include +#include #include "ecole/scip/cons.hpp" #include "ecole/utility/sparse-matrix.hpp" diff --git a/libecole/tests/src/dynamics/test-branching.cpp b/libecole/tests/src/dynamics/test-branching.cpp index 854982cdf..9ad76de10 100644 --- a/libecole/tests/src/dynamics/test-branching.cpp +++ b/libecole/tests/src/dynamics/test-branching.cpp @@ -2,8 +2,8 @@ #include #include -#include -#include +#include +#include #include "ecole/dynamics/branching.hpp" #include "ecole/exception.hpp" diff --git a/libecole/tests/src/dynamics/test-primal-search.cpp b/libecole/tests/src/dynamics/test-primal-search.cpp index a542c5837..7ebfa3733 100644 --- a/libecole/tests/src/dynamics/test-primal-search.cpp +++ b/libecole/tests/src/dynamics/test-primal-search.cpp @@ -2,8 +2,8 @@ #include #include -#include -#include +#include +#include #include diff --git a/libecole/tests/src/observation/test-hutter-2011.cpp b/libecole/tests/src/observation/test-hutter-2011.cpp index a61c2b790..1a77a56e6 100644 --- a/libecole/tests/src/observation/test-hutter-2011.cpp +++ b/libecole/tests/src/observation/test-hutter-2011.cpp @@ -3,7 +3,7 @@ #include #include -#include +#include #include "ecole/observation/hutter-2011.hpp" diff --git a/libecole/tests/src/observation/test-khalil-2016.cpp b/libecole/tests/src/observation/test-khalil-2016.cpp index 1faeb041c..989ac0c9e 100644 --- a/libecole/tests/src/observation/test-khalil-2016.cpp +++ b/libecole/tests/src/observation/test-khalil-2016.cpp @@ -2,10 +2,10 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include "ecole/observation/khalil-2016.hpp" #include "ecole/tweak/range.hpp" diff --git a/libecole/tests/src/observation/test-milp-bipartite.cpp b/libecole/tests/src/observation/test-milp-bipartite.cpp index 14ae1b694..eef2abadb 100644 --- a/libecole/tests/src/observation/test-milp-bipartite.cpp +++ b/libecole/tests/src/observation/test-milp-bipartite.cpp @@ -1,8 +1,8 @@ #include #include -#include -#include +#include +#include #include "ecole/observation/milp-bipartite.hpp" diff --git a/libecole/tests/src/observation/test-node-bipartite.cpp b/libecole/tests/src/observation/test-node-bipartite.cpp index 352fb325e..5c067f04d 100644 --- a/libecole/tests/src/observation/test-node-bipartite.cpp +++ b/libecole/tests/src/observation/test-node-bipartite.cpp @@ -1,8 +1,8 @@ #include #include -#include -#include +#include +#include #include "ecole/observation/node-bipartite.hpp" diff --git a/libecole/tests/src/observation/test-strong-branching-scores.cpp b/libecole/tests/src/observation/test-strong-branching-scores.cpp index 7b0e60ab2..0369d17cd 100644 --- a/libecole/tests/src/observation/test-strong-branching-scores.cpp +++ b/libecole/tests/src/observation/test-strong-branching-scores.cpp @@ -1,6 +1,6 @@ #include -#include -#include +#include +#include #include "ecole/observation/strong-branching-scores.hpp" From 37efe76d5aa36920479c02a6e5984e8e9b44e078 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Fri, 19 Dec 2025 19:33:18 +0100 Subject: [PATCH 3/7] Update built-in dependencies --- libecole/dependencies/private.cmake | 12 ++++++------ libecole/dependencies/public.cmake | 16 ++++++++-------- .../extension-helper/dependencies/public.cmake | 8 ++++---- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/libecole/dependencies/private.cmake b/libecole/dependencies/private.cmake index 2e3e1f002..a683efbbf 100644 --- a/libecole/dependencies/private.cmake +++ b/libecole/dependencies/private.cmake @@ -1,7 +1,7 @@ find_or_download_package( NAME range-v3 - URL https://github.com/ericniebler/range-v3/archive/0.11.0.tar.gz - URL_HASH SHA256=376376615dbba43d3bef75aa590931431ecb49eb36d07bb726a19f680c75e20c + URL https://github.com/ericniebler/range-v3/archive/0.12.0.tar.gz + URL_HASH SHA256=015adb2300a98edfceaf0725beec3337f542af4915cec4d0b89fa0886f4ba9cb CONFIGURE_ARGS -D RANGE_V3_TESTS=OFF -D RANGE_V3_EXAMPLES=OFF @@ -11,8 +11,8 @@ find_or_download_package( find_or_download_package( NAME fmt - URL https://github.com/fmtlib/fmt/archive/8.0.1.tar.gz - URL_HASH SHA256=b06ca3130158c625848f3fb7418f235155a4d389b2abc3a6245fb01cb0eb1e01 + URL https://github.com/fmtlib/fmt/archive/12.0.0.tar.gz + URL_HASH SHA256=aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40 CONFIGURE_ARGS -D FMT_TEST=OFF -D FMT_DOC=OFF @@ -24,7 +24,7 @@ find_or_download_package( find_or_download_package( NAME robin_hood - URL https://github.com/martinus/robin-hood-hashing/archive/refs/tags/3.11.2.tar.gz - URL_HASH SHA256=148b4fbd4fbb30ba10cc97143dcbe385078801b9c9e329cd477c1ea27477cb73 + URL https://github.com/martinus/robin-hood-hashing/archive/refs/tags/3.11.5.tar.gz + URL_HASH SHA256=3693e44dda569e9a8b87ce8263f7477b23af448a3c3600c8ab9004fe79c20ad0 CONFIGURE_ARGS -D RH_STANDALONE_PROJECT=OFF ) diff --git a/libecole/dependencies/public.cmake b/libecole/dependencies/public.cmake index 5a42b820b..f1335c922 100644 --- a/libecole/dependencies/public.cmake +++ b/libecole/dependencies/public.cmake @@ -1,28 +1,28 @@ find_or_download_package( NAME xtl - URL https://github.com/xtensor-stack/xtl/archive/0.7.2.tar.gz - URL_HASH SHA256=95c221bdc6eaba592878090916383e5b9390a076828552256693d5d97f78357c + URL https://github.com/xtensor-stack/xtl/archive/0.8.1.tar.gz + URL_HASH SHA256=e69a696068ccffd2b435539d583665981b6c6abed596a72832bffbe3e13e1f49 CONFIGURE_ARGS -D BUILD_TESTS=OFF ) find_or_download_package( NAME xsimd - URL https://github.com/xtensor-stack/xsimd/archive/7.4.9.tar.gz - URL_HASH SHA256=f6601ffb002864ec0dc6013efd9f7a72d756418857c2d893be0644a2f041874e + URL https://github.com/xtensor-stack/xsimd/archive/14.0.0.tar.gz + URL_HASH SHA256=17de0236954955c10c09d6938d4c5f3a3b92d31be5dadd1d5d09fc1b15490dce CONFIGURE_ARGS -D BUILD_TESTS=OFF ) find_or_download_package( NAME xtensor - URL https://github.com/xtensor-stack/xtensor/archive/0.23.1.tar.gz - URL_HASH SHA256=b9bceea49db240ab64eede3776d0103bb0503d9d1f3ce5b90b0f06a0d8ac5f08 + URL https://github.com/xtensor-stack/xtensor/archive/0.27.1.tar.gz + URL_HASH SHA256=117c192ae3b7c37c0156dedaa88038e0599a6b264666c3c6c2553154b500fe23 CONFIGURE_ARGS -D BUILD_TESTS=OFF ) find_or_download_package( NAME span-lite - URL https://github.com/martinmoene/span-lite/archive/v0.9.0.tar.gz - URL_HASH SHA256=cdb5f86e5f5e679d63700a56de734c44fe22a574a17347d09dbaaef80619af91 + URL https://github.com/martinmoene/span-lite/archive/v0.11.0.tar.gz + URL_HASH SHA256=ef4e028e18ff21044da4b4641ca1bc8a2e2d656e2028322876c0e1b9b6904f9d CONFIGURE_ARGS -D SPAN_LITE_OPT_BUILD_TESTS=OFF -D SPAN_LITE_OPT_BUILD_EXAMPLES=OFF diff --git a/python/extension-helper/dependencies/public.cmake b/python/extension-helper/dependencies/public.cmake index 7f9e61d9d..514458e37 100644 --- a/python/extension-helper/dependencies/public.cmake +++ b/python/extension-helper/dependencies/public.cmake @@ -2,8 +2,8 @@ find_package(Python COMPONENTS Interpreter Development NumPy REQUIRED) find_or_download_package( NAME pybind11 - URL https://github.com/pybind/pybind11/archive/v2.9.1.tar.gz - URL_HASH SHA256=c6160321dc98e6e1184cc791fbeadd2907bb4a0ce0e447f2ea4ff8ab56550913 + URL https://github.com/pybind/pybind11/archive/v2.13.6.tar.gz + URL_HASH SHA256=e08cb87f4773da97fa7b5f035de8763abc656d87d5773e62f6da0587d1f0ec20 CONFIGURE_ARGS -D PYBIND11_TEST=OFF -D "Python_EXECUTABLE=${Python_EXECUTABLE}" @@ -12,8 +12,8 @@ find_or_download_package( find_or_download_package( NAME xtensor-python - URL https://github.com/xtensor-stack/xtensor-python/archive/0.25.1.tar.gz - URL_HASH SHA256=1e70db455a4dcba226c450bf9261a05a0c2fad513b84be35a3d139067356e6a1 + URL https://github.com/xtensor-stack/xtensor-python/archive/0.29.0.tar.gz + URL_HASH SHA256=2915b220bd11b70fdd9fbb2db5f313e751189fec083e406228c8e5a31dfaa4a2 CONFIGURE_ARGS -D BUILD_TESTS=OFF -D "Python_EXECUTABLE=${Python_EXECUTABLE}" From 332ff124498c03242b3361b29ca0671b0ef7c123 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Sat, 20 Dec 2025 15:15:24 +0100 Subject: [PATCH 4/7] Move to scikit-build-core --- .gitignore | 2 + cmake/Python.cmake | 12 ++--- dev/conda.yaml | 2 +- pyproject.toml | 46 ++++++++++++++--- python/ecole/CMakeLists.txt | 12 +++-- setup.py | 100 ------------------------------------ 6 files changed, 54 insertions(+), 120 deletions(-) delete mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 51abef018..7699b24a5 100644 --- a/.gitignore +++ b/.gitignore @@ -177,3 +177,5 @@ dmypy.json # Scikit-build build folder _skbuild/ + +.pixi/ diff --git a/cmake/Python.cmake b/cmake/Python.cmake index 545d18fa9..9d4cc3d51 100644 --- a/cmake/Python.cmake +++ b/cmake/Python.cmake @@ -1,14 +1,8 @@ # Set some variables to find the proper Python version -if(SKBUILD) - # If scikit-build is compiling, let if define the interpreter - set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}") - set(Python_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}") - set(Python_LIBRARY "${PYTHON_LIBRARY}") - set(DUMMY "${PYTHON_VERSION_STRING}") # Not needed, silences a warning - -elseif(NOT DEFINED Python_EXECUTABLE) - # Find Python interpreter from the path and don't resolve symlinks +# scikit-build-core sets Python paths automatically via CMake's FindPython. +# For standalone builds, find Python from the path. +if(NOT SKBUILD AND NOT DEFINED Python_EXECUTABLE) execute_process( COMMAND "python3" "-c" "import sys; print(sys.executable)" OUTPUT_VARIABLE Python_EXECUTABLE diff --git a/dev/conda.yaml b/dev/conda.yaml index ea5d694fe..62bada84a 100644 --- a/dev/conda.yaml +++ b/dev/conda.yaml @@ -18,7 +18,7 @@ dependencies: - pybind11>=2.7 - numpy>=1.4 - xtensor-python - - scikit-build + - scikit-build-core - build # Documentation diff --git a/pyproject.toml b/pyproject.toml index 35549ac13..00e3aa5af 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,14 +1,46 @@ [build-system] requires = [ - "setuptools>=42", - "wheel", - "pybind11>=2.7", - "cmake>=3.15", + "pybind11>=2.7,<3.0", + "numpy", + "scikit-build-core", +] +build-backend = "scikit_build_core.build" + +[project] +name = "ecole" +version = "0.8.1" +description = "Extensible Combinatorial Optimization Learning Environments" +readme = "README.rst" +license = "BSD-3-Clause" +authors = [ + { name = "Antoine Prouvost et al." }, +] +requires-python = ">=3.8" +dependencies = [ "numpy>=1.4", - "ninja", - "scikit-build" ] -build-backend = "setuptools.build_meta" +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Science/Research", + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering :: Artificial Intelligence", +] + +[project.urls] +Homepage = "https://www.ecole.ai" + +[tool.scikit-build] +cmake.version = ">=3.16" +cmake.build-type = "Release" +wheel.install-dir = "ecole" +wheel.packages = ["python/ecole/src/ecole"] + +[tool.scikit-build.cmake.define] +BUILD_SHARED_LIBS = "ON" +CMAKE_INSTALL_LIBDIR = "lib" +CMAKE_INSTALL_BINDIR = "bin" +CMAKE_INSTALL_INCLUDEDIR = "include" +ECOLE_PY_EXT_INSTALL_LIBDIR = "." [tool.black] line-length = 100 diff --git a/python/ecole/CMakeLists.txt b/python/ecole/CMakeLists.txt index b0626406a..4fc826329 100644 --- a/python/ecole/CMakeLists.txt +++ b/python/ecole/CMakeLists.txt @@ -75,10 +75,16 @@ add_custom_target( ) add_dependencies(ecole-py-ext ecole-py-files) -# Scikit build relies on an installation of the Python module to find the library. -# Set through the setup.py script. +# scikit-build-core relies on an installation of the Python module to find the library. if(SKBUILD) - # Rpath for the Ecole Python extension module + # Set default RPATH for the Ecole Python extension module if not provided + if(NOT DEFINED ECOLE_PY_EXT_INSTALL_RPATH) + if(APPLE) + set(ECOLE_PY_EXT_INSTALL_RPATH "@loader_path/lib") + else() + set(ECOLE_PY_EXT_INSTALL_RPATH "\$ORIGIN/lib") + endif() + endif() set_target_properties( ecole-py-ext PROPERTIES diff --git a/setup.py b/setup.py deleted file mode 100644 index 70f90120c..000000000 --- a/setup.py +++ /dev/null @@ -1,100 +0,0 @@ -import pathlib -import re -import sys -import os -import shlex -import platform - -from typing import List - -import skbuild - -__dir__ = pathlib.Path(__file__).resolve().parent - - -def get_file(file: pathlib.Path) -> str: - """Extract all lines from a file.""" - with open(file, "r") as f: - return f.read() - - -def get_version(version_file: pathlib.Path) -> str: - """Extract version from the Ecole VERSION file according to PEP440.""" - lines = get_file(version_file) - major = re.search(r"VERSION_MAJOR\s+(\d+)", lines).group(1) - minor = re.search(r"VERSION_MINOR\s+(\d+)", lines).group(1) - patch = re.search(r"VERSION_PATCH\s+(\d+)", lines).group(1) - pre = re.search(r"VERSION_PRE\s+([\.\w]*)", lines).group(1) - post = re.search(r"VERSION_POST\s+([\.\w]*)", lines).group(1) - dev = re.search(r"VERSION_DEV\s+([\.\w]*)", lines).group(1) - return f"{major}.{minor}.{patch}{pre}{post}{dev}" - - -def get_env_cmake_args() -> List[str]: - """Return the list of extra CMake arguments from the environment. - - When called through conda-build (environment variable `CONDA_BUILD` is set), the `CMAKE_INSTALL_<>` - are filtered out as they - """ - cmake_args = shlex.split(os.environ.get("CMAKE_ARGS", "")) - if "CONDA_BUILD" in os.environ: - install_re = re.compile(r"-D\s*CMAKE_INSTALL.*") - cmake_args = [a for a in cmake_args if not install_re.search(a)] - return cmake_args - - -def get_cmake_install_args() -> List[str]: - """Return default installation settings.""" - if "CONDA_BUILD" in os.environ: - return get_cmake_out_package_install_args() - else: - return get_cmake_in_package_install_args() - - -def get_cmake_in_package_install_args() -> List[str]: - """Return default installation settings for installing libecole in the package.""" - system = platform.system() - if system == "Linux": - origin = r"${ORIGIN}" - elif system == "Darwin": - origin = "@loader_path" - else: - raise NotImplementedError(f"OS {system} is not supported") - return [ - "-DBUILD_SHARED_LIBS=ON", - "-DCMAKE_INSTALL_LIBDIR=lib", - "-DCMAKE_INSTALL_BINDIR=bin", - "-DCMAKE_INSTALL_INCLUDEDIR=include", - "-DECOLE_PY_EXT_INSTALL_LIBDIR='.'", - "-DECOLE_PY_EXT_INSTALL_RPATH={origin}/lib".format(origin=origin), - ] - - -def get_cmake_out_package_install_args() -> List[str]: - """Return default installation settings for an extrenal libecole installation.""" - return ["-DECOLE_BUILD_LIB=OFF", "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON"] - - -skbuild.setup( - name="ecole", - author="Antoine Prouvost et al.", - version=get_version(__dir__ / "VERSION"), - url="https://www.ecole.ai", - description="Extensible Combinatorial Optimization Learning Environments", - long_description=get_file(__dir__ / "README.rst"), - long_description_content_type="text/x-rst", - license="BSD-3-Clause", - packages=["ecole"], - package_dir={"": "python/ecole/src"}, - package_data={"ecole": ["py.typed"]}, - cmake_languages=["CXX"], - cmake_install_dir="python/ecole/src/ecole", # Must match package_dir layout - cmake_minimum_required_version="3.14", - # FIXME No way to pass cmake argument to scikit-build through pip (for now) - # https://github.com/scikit-build/scikit-build/issues/479 - # So we read them from an environment variable - cmake_args=get_cmake_install_args() + get_env_cmake_args(), - zip_safe=False, - python_requires=">=3.6", - install_requires=["numpy>=1.4"], -) From 0aab3c030d56ad76b60566a4f2068d9eeb77b915 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Sat, 20 Dec 2025 15:22:40 +0100 Subject: [PATCH 5/7] Fix fmt runtime string --- libecole/src/instance/combinatorial-auction.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libecole/src/instance/combinatorial-auction.cpp b/libecole/src/instance/combinatorial-auction.cpp index b9e490ebe..08f7aeb30 100644 --- a/libecole/src/instance/combinatorial-auction.cpp +++ b/libecole/src/instance/combinatorial-auction.cpp @@ -59,7 +59,7 @@ class Logger { template void log(T&& message) { if (print) { - fmt::print(pattern, std::forward(message)); + fmt::print(fmt::runtime(pattern), std::forward(message)); } } From 420de5220383bec3dc55e88cd5634723dbff2388 Mon Sep 17 00:00:00 2001 From: AntoinePrv Date: Sat, 20 Dec 2025 15:35:04 +0100 Subject: [PATCH 6/7] dynamic version --- pyproject.toml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 00e3aa5af..78cdfd4bf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,7 +8,7 @@ build-backend = "scikit_build_core.build" [project] name = "ecole" -version = "0.8.1" +dynamic = ["version"] description = "Extensible Combinatorial Optimization Learning Environments" readme = "README.rst" license = "BSD-3-Clause" @@ -42,5 +42,18 @@ CMAKE_INSTALL_BINDIR = "bin" CMAKE_INSTALL_INCLUDEDIR = "include" ECOLE_PY_EXT_INSTALL_LIBDIR = "." +[tool.scikit-build.metadata.version] +provider = "scikit_build_core.metadata.regex" +input = "VERSION" +regex = '''(?sx) +VERSION_MAJOR\s+(?P\d+).*? +VERSION_MINOR\s+(?P\d+).*? +VERSION_PATCH\s+(?P\d+).*? +VERSION_PRE\s+(?P
[^\s\#]*).*?
+VERSION_POST\s+(?P[^\s\#]*).*?
+VERSION_DEV\s+(?P[^\s\#]*)
+'''
+result = "{major}.{minor}.{patch}{pre}{post}{dev}"
+
 [tool.black]
 line-length = 100

From ca36fc34b1d43676526be4d6a2862dfb4b178b18 Mon Sep 17 00:00:00 2001
From: AntoinePrv 
Date: Sat, 20 Dec 2025 16:28:49 +0100
Subject: [PATCH 7/7] Build for scip 10

---
 libecole/src/scip/cons.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libecole/src/scip/cons.cpp b/libecole/src/scip/cons.cpp
index e12fef240..e24531ebe 100644
--- a/libecole/src/scip/cons.cpp
+++ b/libecole/src/scip/cons.cpp
@@ -213,8 +213,11 @@ auto get_constraint_linear_coefs(SCIP* const scip, SCIP_CONS* const constraint)
 			&n_constraint_variables,
 			static_cast(buffer_size),
 			&constant_offset,
-			&requiredsize,
-			true);
+			&requiredsize
+#if SCIP_VERSION_MAJOR < 10
+			 , true
+#endif
+			);
 	}
 
 	variables.resize(static_cast(n_constraint_variables));