From 021eeae29d105bcb04876b03133a8335a2e6adda Mon Sep 17 00:00:00 2001 From: Sylvain Corlay Date: Tue, 6 Aug 2024 15:08:32 +0200 Subject: [PATCH 01/18] Test with NumPy 2.0 --- .github/workflows/linux.yml | 4 ++-- environment-dev.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 264a996..0c8e40e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,16 +12,16 @@ defaults: shell: bash -e -l {0} jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest name: ${{ matrix.sys.compiler }} ${{ matrix.sys.version }} strategy: fail-fast: false matrix: sys: - - {compiler: gcc, version: '8'} - {compiler: gcc, version: '9'} - {compiler: gcc, version: '10'} - {compiler: gcc, version: '11'} + - {compiler: gcc, version: '12'} - {compiler: clang, version: '15'} - {compiler: clang, version: '16'} diff --git a/environment-dev.yml b/environment-dev.yml index 122bf4d..1c2bd8b 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -7,8 +7,8 @@ dependencies: - ninja # Host dependencies - xtensor>=0.25,<0.26 - - numpy - - pybind11>=2.6.1,<3 + - numpy>=2.0 + - pybind11>=2.12.0,<3 # Test dependencies - pytest From d1c21100b852630073f5aca32b0199c15d9eff95 Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Fri, 11 Apr 2025 10:01:08 +0200 Subject: [PATCH 02/18] Upgraded CI compilers (#319) --- .github/workflows/linux.yml | 58 ++++++++----------- .github/workflows/osx.yml | 5 +- CMakeLists.txt | 20 +++---- cmake/FindNumPy.cmake | 4 +- docs/source/examples/copy_cast/CMakeLists.txt | 2 +- .../examples/readme_example_1/CMakeLists.txt | 2 +- docs/source/examples/sfinae/CMakeLists.txt | 2 +- environment-dev.yml | 1 + test/CMakeLists.txt | 2 +- test/copyGTest.cmake.in | 2 +- test/downloadGTest.cmake.in | 4 +- 11 files changed, 48 insertions(+), 54 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 0c8e40e..ea4dee7 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -12,50 +12,42 @@ defaults: shell: bash -e -l {0} jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 name: ${{ matrix.sys.compiler }} ${{ matrix.sys.version }} strategy: fail-fast: false matrix: sys: - - {compiler: gcc, version: '9'} - - {compiler: gcc, version: '10'} - {compiler: gcc, version: '11'} - {compiler: gcc, version: '12'} - - {compiler: clang, version: '15'} - - {compiler: clang, version: '16'} + - {compiler: gcc, version: '13'} + - {compiler: gcc, version: '14'} + - {compiler: clang, version: '17'} + - {compiler: clang, version: '18'} + - {compiler: clang, version: '19'} + - {compiler: clang, version: '20'} steps: + - name: Install GCC + if: matrix.sys.compiler == 'gcc' + uses: egor-tensin/setup-gcc@v1 + with: + version: ${{matrix.sys.version}} + platform: x64 - - name: Setup GCC - if: ${{ matrix.sys.compiler == 'gcc' }} - run: | - GCC_VERSION=${{ matrix.sys.version }} - sudo apt-get update - sudo apt-get --no-install-suggests --no-install-recommends install g++-$GCC_VERSION - CC=gcc-$GCC_VERSION - echo "CC=$CC" >> $GITHUB_ENV - CXX=g++-$GCC_VERSION - echo "CXX=$CXX" >> $GITHUB_ENV - - - name: Setup clang - if: ${{ matrix.sys.compiler == 'clang' }} + - name: Install LLVM and Clang + if: matrix.sys.compiler == 'clang' run: | - LLVM_VERSION=${{ matrix.sys.version }} - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - || exit 1 - if [[ $LLVM_VERSION -ge 13 ]]; then - sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal-$LLVM_VERSION main" || exit 1 - else - sudo add-apt-repository "deb http://apt.llvm.org/focal/ llvm-toolchain-focal main" || exit 1 - fi || exit 1 - sudo apt-get update || exit 1 - sudo apt-get --no-install-suggests --no-install-recommends install clang-$LLVM_VERSION || exit 1 - sudo apt-get --no-install-suggests --no-install-recommends install g++-9 g++-9-multilib || exit 1 - sudo ln -s /usr/include/asm-generic /usr/include/asm - CC=clang-$LLVM_VERSION - echo "CC=$CC" >> $GITHUB_ENV - CXX=clang++-$LLVM_VERSION - echo "CXX=$CXX" >> $GITHUB_ENV + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh ${{matrix.sys.version}} + sudo apt-get install -y clang-tools-${{matrix.sys.version}} + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{matrix.sys.version}} 200 + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{matrix.sys.version}} 200 + sudo update-alternatives --install /usr/bin/clang-scan-deps clang-scan-deps /usr/bin/clang-scan-deps-${{matrix.sys.version}} 200 + sudo update-alternatives --set clang /usr/bin/clang-${{matrix.sys.version}} + sudo update-alternatives --set clang++ /usr/bin/clang++-${{matrix.sys.version}} + sudo update-alternatives --set clang-scan-deps /usr/bin/clang-scan-deps-${{matrix.sys.version}} - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 073c018..118d4fd 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -18,8 +18,9 @@ jobs: fail-fast: false matrix: os: - - 11 - - 12 + - 13 + - 14 + - 15 steps: diff --git a/CMakeLists.txt b/CMakeLists.txt index b17b005..bcf8df5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ # The full license is in the file LICENSE, distributed with this software. # ############################################################################ -cmake_minimum_required(VERSION 3.14) +cmake_minimum_required(VERSION 3.29) project(xtensor-python) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) @@ -46,19 +46,19 @@ else() message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor") endif() -# Running find_package(PythonInterp) to retrieve the Python version -# which is not exported by Pybind11's cmake. -# Cf. https://github.com/pybind/pybind11/issues/2268 -find_package(PythonInterp ${PythonLibsNew_FIND_VERSION} REQUIRED) +find_package(Python COMPONENTS Interpreter REQUIRED) set(pybind11_REQUIRED_VERSION 2.6.1) -if(TARGET pybind11 OR TARGET pybind11::headers) - # pybind11 has a variable that indicates its version already, so use that - message(STATUS "Found pybind11 v${pybind11_VERSION}") -else() +if (NOT TARGET pybind11::headers) + # Defaults to ON for cmake >= 3.18 + # https://github.com/pybind/pybind11/blob/35ff42b56e9d34d9a944266eb25f2c899dbdfed7/CMakeLists.txt#L96 + set(PYBIND11_FINDPYTHON OFF) find_package(pybind11 ${pybind11_REQUIRED_VERSION} REQUIRED) message(STATUS "Found pybind11: ${pybind11_INCLUDE_DIRS}/pybind11") -endif() +else () + # pybind11 has a variable that indicates its version already, so use that + message(STATUS "Found pybind11 v${pybind11_VERSION}") +endif () # Look for NumPy headers, except if NUMPY_INCLUDE_DIRS is passed, # which is required under some circumstances (such as wasm, where diff --git a/cmake/FindNumPy.cmake b/cmake/FindNumPy.cmake index f043566..24f3c32 100644 --- a/cmake/FindNumPy.cmake +++ b/cmake/FindNumPy.cmake @@ -40,9 +40,9 @@ # Finding NumPy involves calling the Python interpreter if(NumPy_FIND_REQUIRED) - find_package(PythonInterp REQUIRED) + find_package(Python COMPONENTS Interpreter REQUIRED) else() - find_package(PythonInterp) + find_package(Python COMPONENTS Interpreter) endif() if(NOT PYTHONINTERP_FOUND) diff --git a/docs/source/examples/copy_cast/CMakeLists.txt b/docs/source/examples/copy_cast/CMakeLists.txt index e17611c..d8daf2a 100644 --- a/docs/source/examples/copy_cast/CMakeLists.txt +++ b/docs/source/examples/copy_cast/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1..3.19) +cmake_minimum_required(VERSION 3.29) project(mymodule) diff --git a/docs/source/examples/readme_example_1/CMakeLists.txt b/docs/source/examples/readme_example_1/CMakeLists.txt index 9c7ed5f..8831bca 100644 --- a/docs/source/examples/readme_example_1/CMakeLists.txt +++ b/docs/source/examples/readme_example_1/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18..3.20) +cmake_minimum_required(VERSION 3.29) project(mymodule) diff --git a/docs/source/examples/sfinae/CMakeLists.txt b/docs/source/examples/sfinae/CMakeLists.txt index 10a1a96..1fb8477 100644 --- a/docs/source/examples/sfinae/CMakeLists.txt +++ b/docs/source/examples/sfinae/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18..3.20) +cmake_minimum_required(VERSION 3.29) project(mymodule) diff --git a/environment-dev.yml b/environment-dev.yml index 1c2bd8b..f203855 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -10,5 +10,6 @@ dependencies: - numpy>=2.0 - pybind11>=2.12.0,<3 # Test dependencies + - setuptools - pytest diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0c77b0d..aaaf339 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -7,7 +7,7 @@ # The full license is in the file LICENSE, distributed with this software. # ############################################################################ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.29) if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) project(xtensor-python-test) diff --git a/test/copyGTest.cmake.in b/test/copyGTest.cmake.in index 8341a74..50821d0 100644 --- a/test/copyGTest.cmake.in +++ b/test/copyGTest.cmake.in @@ -7,7 +7,7 @@ # The full license is in the file LICENSE, distributed with this software. # ############################################################################ -cmake_minimum_required(VERSION 2.8.2) +cmake_minimum_required(VERSION 3.29) project(googletest-download NONE) diff --git a/test/downloadGTest.cmake.in b/test/downloadGTest.cmake.in index 2d5cc5b..6bb5fad 100644 --- a/test/downloadGTest.cmake.in +++ b/test/downloadGTest.cmake.in @@ -7,14 +7,14 @@ # The full license is in the file LICENSE, distributed with this software. # ############################################################################ -cmake_minimum_required(VERSION 2.8.2) +cmake_minimum_required(VERSION 3.29) project(googletest-download NONE) include(ExternalProject) ExternalProject_Add(googletest GIT_REPOSITORY https://github.com/google/googletest.git - GIT_TAG release-1.10.0 + GIT_TAG v1.16.0 SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build" CONFIGURE_COMMAND "" From 1c85ed85bc90df60608a51fdc66bcf7b097aa84b Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Fri, 11 Apr 2025 10:43:52 +0200 Subject: [PATCH 03/18] Fixed RTD build (#320) --- readthedocs.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readthedocs.yml b/readthedocs.yml index 38f414b..a8188c4 100644 --- a/readthedocs.yml +++ b/readthedocs.yml @@ -5,5 +5,9 @@ build: tools: python: "mambaforge-22.9" +sphinx: + # Path to Sphinx configuration file + configuration: docs/source/conf.py + conda: environment: docs/environment.yml From f555d123c06e0e51bbf7335104750b55818beedc Mon Sep 17 00:00:00 2001 From: Daniel Jacobs <44678615+danielcjacobs@users.noreply.github.com> Date: Mon, 14 Apr 2025 04:14:38 -0400 Subject: [PATCH 04/18] update xtensor includes (#317) Brings xtensor-python up to date with latest xtensor release (0.26.0), where https://github.com/xtensor-stack/xtensor/pull/2829 reorganized the include directory. --------- Co-authored-by: Daniel Jacobs Co-authored-by: Johan Mabille --- CMakeLists.txt | 4 ++-- README.md | 2 +- benchmark/main.cpp | 4 ++-- docs/source/basic_usage.rst | 2 +- docs/source/examples/sfinae/main.cpp | 2 +- docs/source/examples/sfinae/mymodule.hpp | 2 +- environment-dev.yml | 2 +- include/xtensor-python/pyarray.hpp | 6 +++--- include/xtensor-python/pycontainer.hpp | 2 +- include/xtensor-python/pytensor.hpp | 8 ++++---- include/xtensor-python/pyvectorize.hpp | 2 +- .../xtensor_type_caster_base.hpp | 4 ++-- test/CMakeLists.txt | 11 +---------- test/test_common.hpp | 4 ++-- test/test_pyarray.cpp | 4 ++-- test/test_pytensor.cpp | 18 +++++++++--------- test/test_sfinae.cpp | 4 ++-- test_python/main.cpp | 12 ++++++------ test_python/setup.py | 11 ++++++----- 19 files changed, 48 insertions(+), 56 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bcf8df5..3fe3f34 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,14 +25,14 @@ foreach(ver ${xtensor_python_version_defines}) set(XTENSOR_PYTHON_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") endif() endforeach() -set(${PROJECT_NAME}_VERSION +set(${PROJECT_NAME}_VERSION ${XTENSOR_PYTHON_VERSION_MAJOR}.${XTENSOR_PYTHON_VERSION_MINOR}.${XTENSOR_PYTHON_VERSION_PATCH}) message(STATUS "xtensor-python v${${PROJECT_NAME}_VERSION}") # Dependencies # ============ -set(xtensor_REQUIRED_VERSION 0.25.0) +set(xtensor_REQUIRED_VERSION 0.26.0) if(TARGET xtensor) set(xtensor_VERSION ${XTENSOR_VERSION_MAJOR}.${XTENSOR_VERSION_MINOR}.${XTENSOR_VERSION_PATCH}) # Note: This is not SEMVER compatible comparison diff --git a/README.md b/README.md index 2cff672..88e6898 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,7 @@ from the `docs` subdirectory. | `xtensor-python` | `xtensor` | `pybind11` | |------------------|-----------|------------------| -| master | ^0.25.0 | >=2.6.1,<3 | +| master | ^0.26.0 | >=2.6.1,<3 | | 0.27.0 | ^0.25.0 | >=2.6.1,<3 | | 0.26.1 | ^0.24.0 | ~2.4.3 | | 0.26.0 | ^0.24.0 | ~2.4.3 | diff --git a/benchmark/main.cpp b/benchmark/main.cpp index d1d787e..4c18bc7 100644 --- a/benchmark/main.cpp +++ b/benchmark/main.cpp @@ -2,8 +2,8 @@ #include "pybind11/numpy.h" #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #include "numpy/arrayobject.h" -#include "xtensor/xtensor.hpp" -#include "xtensor/xarray.hpp" +#include "xtensor/containers/xtensor.hpp" +#include "xtensor/containers/xarray.hpp" #include "xtensor-python/pyarray.hpp" #include "xtensor-python/pytensor.hpp" #include "xtensor-python/pyvectorize.hpp" diff --git a/docs/source/basic_usage.rst b/docs/source/basic_usage.rst index c97c9ac..32b1c23 100644 --- a/docs/source/basic_usage.rst +++ b/docs/source/basic_usage.rst @@ -16,7 +16,7 @@ Example 1: Use an algorithm of the C++ library on a numpy array inplace #include // Standard library import for std::accumulate #include "pybind11/pybind11.h" // Pybind11 import to define Python bindings - #include "xtensor/xmath.hpp" // xtensor import for the C++ universal functions + #include "xtensor/core/xmath.hpp" // xtensor import for the C++ universal functions #define FORCE_IMPORT_ARRAY // numpy C api loading #include "xtensor-python/pyarray.hpp" // Numpy bindings diff --git a/docs/source/examples/sfinae/main.cpp b/docs/source/examples/sfinae/main.cpp index a146cdd..44ffaa7 100644 --- a/docs/source/examples/sfinae/main.cpp +++ b/docs/source/examples/sfinae/main.cpp @@ -1,5 +1,5 @@ #include "mymodule.hpp" -#include +#include int main() { diff --git a/docs/source/examples/sfinae/mymodule.hpp b/docs/source/examples/sfinae/mymodule.hpp index 5127eff..33f7b8a 100644 --- a/docs/source/examples/sfinae/mymodule.hpp +++ b/docs/source/examples/sfinae/mymodule.hpp @@ -1,4 +1,4 @@ -#include +#include namespace mymodule { diff --git a/environment-dev.yml b/environment-dev.yml index f203855..72275dd 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -6,7 +6,7 @@ dependencies: - cmake - ninja # Host dependencies - - xtensor>=0.25,<0.26 + - xtensor>=0.26,<0.27 - numpy>=2.0 - pybind11>=2.12.0,<3 # Test dependencies diff --git a/include/xtensor-python/pyarray.hpp b/include/xtensor-python/pyarray.hpp index 6df73cf..0854fb3 100644 --- a/include/xtensor-python/pyarray.hpp +++ b/include/xtensor-python/pyarray.hpp @@ -14,9 +14,9 @@ #include #include -#include "xtensor/xbuffer_adaptor.hpp" -#include "xtensor/xiterator.hpp" -#include "xtensor/xsemantic.hpp" +#include "xtensor/containers/xbuffer_adaptor.hpp" +#include "xtensor/core/xiterator.hpp" +#include "xtensor/core/xsemantic.hpp" #include "pyarray_backstrides.hpp" #include "pycontainer.hpp" diff --git a/include/xtensor-python/pycontainer.hpp b/include/xtensor-python/pycontainer.hpp index d0a1a1e..5e80a32 100644 --- a/include/xtensor-python/pycontainer.hpp +++ b/include/xtensor-python/pycontainer.hpp @@ -32,7 +32,7 @@ #undef copysign #include -#include "xtensor/xcontainer.hpp" +#include "xtensor/containers/xcontainer.hpp" #include "xtl/xsequence.hpp" diff --git a/include/xtensor-python/pytensor.hpp b/include/xtensor-python/pytensor.hpp index acf05b8..3eac157 100644 --- a/include/xtensor-python/pytensor.hpp +++ b/include/xtensor-python/pytensor.hpp @@ -14,10 +14,10 @@ #include #include -#include "xtensor/xbuffer_adaptor.hpp" -#include "xtensor/xiterator.hpp" -#include "xtensor/xsemantic.hpp" -#include "xtensor/xutils.hpp" +#include "xtensor/containers/xbuffer_adaptor.hpp" +#include "xtensor/core/xiterator.hpp" +#include "xtensor/core/xsemantic.hpp" +#include "xtensor/utils/xutils.hpp" #include "pycontainer.hpp" #include "pystrides_adaptor.hpp" diff --git a/include/xtensor-python/pyvectorize.hpp b/include/xtensor-python/pyvectorize.hpp index 9c7d107..d96f689 100644 --- a/include/xtensor-python/pyvectorize.hpp +++ b/include/xtensor-python/pyvectorize.hpp @@ -13,7 +13,7 @@ #include #include "pyarray.hpp" -#include "xtensor/xvectorize.hpp" +#include "xtensor/core/xvectorize.hpp" namespace xt { diff --git a/include/xtensor-python/xtensor_type_caster_base.hpp b/include/xtensor-python/xtensor_type_caster_base.hpp index 840e28c..902235f 100644 --- a/include/xtensor-python/xtensor_type_caster_base.hpp +++ b/include/xtensor-python/xtensor_type_caster_base.hpp @@ -14,8 +14,8 @@ #include #include -#include "xtensor/xtensor.hpp" -#include "xtensor/xfixed.hpp" +#include "xtensor/containers/xtensor.hpp" +#include "xtensor/containers/xfixed.hpp" #include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index aaaf339..60fcf10 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -29,16 +29,7 @@ include(CheckCXXCompilerFlag) string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE) -if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Intel") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wunused-parameter -Wextra -Wreorder -Wconversion -fvisibility=hidden") - CHECK_CXX_COMPILER_FLAG("-std=c++14" HAS_CPP14_FLAG) - - if (HAS_CPP14_FLAG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14") - else() - message(FATAL_ERROR "Unsupported compiler -- xtensor requires C++14 support!") - endif() -endif() +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") diff --git a/test/test_common.hpp b/test/test_common.hpp index 3b4ed85..7115764 100644 --- a/test/test_common.hpp +++ b/test/test_common.hpp @@ -10,8 +10,8 @@ #ifndef TEST_COMMON_HPP #define TEST_COMMON_HPP -#include "xtensor/xlayout.hpp" -#include "xtensor/xmanipulation.hpp" +#include "xtensor/core/xlayout.hpp" +#include "xtensor/misc/xmanipulation.hpp" #include "xtl/xsequence.hpp" diff --git a/test/test_pyarray.cpp b/test/test_pyarray.cpp index 6406de6..15ede7e 100644 --- a/test/test_pyarray.cpp +++ b/test/test_pyarray.cpp @@ -11,8 +11,8 @@ #include "xtensor-python/pyarray.hpp" -#include "xtensor/xarray.hpp" -#include "xtensor/xview.hpp" +#include "xtensor/containers/xarray.hpp" +#include "xtensor/views/xview.hpp" #include "test_common.hpp" diff --git a/test/test_pytensor.cpp b/test/test_pytensor.cpp index f2ac013..c7b12cf 100644 --- a/test/test_pytensor.cpp +++ b/test/test_pytensor.cpp @@ -11,8 +11,8 @@ #include "xtensor-python/pytensor.hpp" -#include "xtensor/xtensor.hpp" -#include "xtensor/xview.hpp" +#include "xtensor/containers/xtensor.hpp" +#include "xtensor/views/xview.hpp" #include "test_common.hpp" @@ -22,13 +22,13 @@ namespace xt TEST(pytensor, initializer_constructor) { - pytensor t - {{{ 0, 1, 2}, - { 3, 4, 5}, - { 6, 7, 8}}, - {{ 9, 10, 11}, - {12, 13, 14}, - {15, 16, 17}}}; + pytensor t + {{{ 0, 1, 2}, + { 3, 4, 5}, + { 6, 7, 8}}, + {{ 9, 10, 11}, + {12, 13, 14}, + {15, 16, 17}}}; EXPECT_EQ(t.dimension(), 3); EXPECT_EQ(t(0, 0, 1), 1); EXPECT_EQ(t.shape()[0], 2); diff --git a/test/test_sfinae.cpp b/test/test_sfinae.cpp index a614485..c9d4733 100644 --- a/test/test_sfinae.cpp +++ b/test/test_sfinae.cpp @@ -12,8 +12,8 @@ #include "gtest/gtest.h" #include "xtensor-python/pytensor.hpp" #include "xtensor-python/pyarray.hpp" -#include "xtensor/xarray.hpp" -#include "xtensor/xtensor.hpp" +#include "xtensor/containers/xarray.hpp" +#include "xtensor/containers/xtensor.hpp" namespace xt { diff --git a/test_python/main.cpp b/test_python/main.cpp index 7a0c524..d9b9e97 100644 --- a/test_python/main.cpp +++ b/test_python/main.cpp @@ -9,15 +9,15 @@ #include -#include "xtensor/xmath.hpp" -#include "xtensor/xarray.hpp" -#include "xtensor/xfixed.hpp" +#include "xtensor/core/xmath.hpp" +#include "xtensor/containers/xarray.hpp" +#include "xtensor/containers/xfixed.hpp" #define FORCE_IMPORT_ARRAY #include "xtensor-python/pyarray.hpp" #include "xtensor-python/pytensor.hpp" #include "xtensor-python/pyvectorize.hpp" -#include "xtensor/xadapt.hpp" -#include "xtensor/xstrided_view.hpp" +#include "xtensor/containers/xadapt.hpp" +#include "xtensor/views/xstrided_view.hpp" namespace py = pybind11; using complex_t = std::complex; @@ -336,7 +336,7 @@ PYBIND11_MODULE(xtensor_python_test, m) m.def("array_subtraction", array_subtraction); m.def("array_multiplication", array_multiplication); m.def("array_division", array_division); - + m.def("vectorize_example1", xt::pyvectorize(add)); m.def("rect_to_polar", xt::pyvectorize([](complex_t x) { return std::abs(x); })); diff --git a/test_python/setup.py b/test_python/setup.py index fa201da..58dbd2d 100644 --- a/test_python/setup.py +++ b/test_python/setup.py @@ -75,13 +75,13 @@ def has_flag(compiler, flagname): def cpp_flag(compiler): - """Return the -std=c++14 compiler flag and errors when the flag is + """Return the -std=c++17 compiler flag and errors when the flag is no available. """ - if has_flag(compiler, '-std=c++14'): - return '-std=c++14' + if has_flag(compiler, '-std=c++17'): + return '-std=c++17' else: - raise RuntimeError('C++14 support is required by xtensor!') + raise RuntimeError('C++17 support is required by xtensor!') class BuildExt(build_ext): @@ -92,7 +92,7 @@ class BuildExt(build_ext): } if sys.platform == 'darwin': - c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.7'] + c_opts['unix'] += ['-stdlib=libc++', '-mmacosx-version-min=10.13'] def build_extensions(self): ct = self.compiler.compiler_type @@ -104,6 +104,7 @@ def build_extensions(self): opts.append('-fvisibility=hidden') elif ct == 'msvc': opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version()) + opts.append('/std:c++17') for ext in self.extensions: ext.extra_compile_args = opts build_ext.build_extensions(self) From 1d59c294667c907bd97fbb16644f0dc23cad9cdb Mon Sep 17 00:00:00 2001 From: Rohit Goswami Date: Mon, 14 Apr 2025 08:15:22 +0000 Subject: [PATCH 05/18] BLD: Add a pkgconfig file (#310) Similar to https://github.com/xtensor-stack/xtensor-blas/pull/243 and done for the same reason (easier to integrate with `meson`). --- CMakeLists.txt | 6 ++++++ xtensor-python.pc.in | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 xtensor-python.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 3fe3f34..e6b9227 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,12 @@ export(EXPORT ${PROJECT_NAME}-targets install(FILES ${XTENSOR_PYTHON_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/xtensor-python) +configure_file(${PROJECT_NAME}.pc.in + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + @ONLY) +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" + DESTINATION "${CMAKE_INSTALL_DATADIR}/pkgconfig/") + set(XTENSOR_PYTHON_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE STRING "install path for xtensor-pythonConfig.cmake") diff --git a/xtensor-python.pc.in b/xtensor-python.pc.in new file mode 100644 index 0000000..c198795 --- /dev/null +++ b/xtensor-python.pc.in @@ -0,0 +1,7 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +includedir=${prefix}/include + +Name: xtensor-python +Description: An extension to the xtensor library, offering Python bindings with enhanced NumPy support. +Version: @xtensor-python_VERSION@ +Cflags: -I${includedir} From 520e4f8ef255af02aff754f340cfcd3180e59552 Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Mon, 14 Apr 2025 10:24:09 +0200 Subject: [PATCH 06/18] Release 0.28.0 --- README.md | 3 ++- include/xtensor-python/xtensor_python_config.hpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 88e6898..acf2df1 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Both containers enable the numpy-style APIs of xtensor (see [the numpy to xtenso ```cpp #include // Standard library import for std::accumulate #include // Pybind11 import to define Python bindings -#include // xtensor import for the C++ universal functions +#include // xtensor import for the C++ universal functions #define FORCE_IMPORT_ARRAY #include // Numpy bindings @@ -205,6 +205,7 @@ from the `docs` subdirectory. | `xtensor-python` | `xtensor` | `pybind11` | |------------------|-----------|------------------| | master | ^0.26.0 | >=2.6.1,<3 | +| 0.28.0 | ^0.26.0 | >=2.6.1,<3 | | 0.27.0 | ^0.25.0 | >=2.6.1,<3 | | 0.26.1 | ^0.24.0 | ~2.4.3 | | 0.26.0 | ^0.24.0 | ~2.4.3 | diff --git a/include/xtensor-python/xtensor_python_config.hpp b/include/xtensor-python/xtensor_python_config.hpp index c3f6707..f6840a7 100644 --- a/include/xtensor-python/xtensor_python_config.hpp +++ b/include/xtensor-python/xtensor_python_config.hpp @@ -11,7 +11,7 @@ #define XTENSOR_PYTHON_CONFIG_HPP #define XTENSOR_PYTHON_VERSION_MAJOR 0 -#define XTENSOR_PYTHON_VERSION_MINOR 27 +#define XTENSOR_PYTHON_VERSION_MINOR 28 #define XTENSOR_PYTHON_VERSION_PATCH 0 #endif From 680c6a43e624ca340b17dfd6a5049c7337be941f Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Thu, 31 Jul 2025 09:50:36 +0000 Subject: [PATCH 07/18] Update PyBind11 guard to 3.x release (#324) Fix #323 --- include/xtensor-python/pytensor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/xtensor-python/pytensor.hpp b/include/xtensor-python/pytensor.hpp index 3eac157..e3746cc 100644 --- a/include/xtensor-python/pytensor.hpp +++ b/include/xtensor-python/pytensor.hpp @@ -214,7 +214,7 @@ namespace xt static self_type ensure(pybind11::handle h); static bool check_(pybind11::handle h); -#if PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3 +#if (PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3) || (PYBIND11_VERSION_MAJOR >= 3) // Prevent ambiguous overload resolution for operators defined for // both xt::xcontainer_semantic and pybind11::object. using semantic_base::operator+=; From afc1672f50e2901f95a32b4cd9f480fa28545468 Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Thu, 31 Jul 2025 15:28:06 +0000 Subject: [PATCH 08/18] Fix pybind11 compatibility for version 3.x (#326) Fix #323 - again --- include/xtensor-python/pyarray.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/xtensor-python/pyarray.hpp b/include/xtensor-python/pyarray.hpp index 0854fb3..c24a793 100644 --- a/include/xtensor-python/pyarray.hpp +++ b/include/xtensor-python/pyarray.hpp @@ -195,7 +195,7 @@ namespace xt static self_type ensure(pybind11::handle h); static bool check_(pybind11::handle h); -#if PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3 +#if (PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3) || PYBIND11_VERSION_MAJOR >= 3 // Prevent ambiguous overload resolution for operators defined for // both xt::xcontainer_semantic and pybind11::object. using semantic_base::operator+=; From 2f59002d9930fe61fee19f0808444d0411ac1c70 Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Thu, 31 Jul 2025 17:39:00 +0200 Subject: [PATCH 09/18] Upgraded to pybind11 3 (#325) --- README.md | 2 +- environment-dev.yml | 2 +- include/xtensor-python/pycontainer.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index acf2df1..3f24121 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,7 @@ from the `docs` subdirectory. | `xtensor-python` | `xtensor` | `pybind11` | |------------------|-----------|------------------| -| master | ^0.26.0 | >=2.6.1,<3 | +| master | ^0.26.0 | >=2.6.1,<4 | | 0.28.0 | ^0.26.0 | >=2.6.1,<3 | | 0.27.0 | ^0.25.0 | >=2.6.1,<3 | | 0.26.1 | ^0.24.0 | ~2.4.3 | diff --git a/environment-dev.yml b/environment-dev.yml index 72275dd..876678b 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -8,7 +8,7 @@ dependencies: # Host dependencies - xtensor>=0.26,<0.27 - numpy>=2.0 - - pybind11>=2.12.0,<3 + - pybind11>=2.12.0,<4 # Test dependencies - setuptools - pytest diff --git a/include/xtensor-python/pycontainer.hpp b/include/xtensor-python/pycontainer.hpp index 5e80a32..f01c390 100644 --- a/include/xtensor-python/pycontainer.hpp +++ b/include/xtensor-python/pycontainer.hpp @@ -129,7 +129,7 @@ namespace xt private: -#if PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3 +#if (PYBIND11_VERSION_MAJOR == 2 && PYBIND11_VERSION_MINOR >= 3) || PYBIND11_VERSION_MAJOR >= 3 // Prevent ambiguous overload resolution for operators defined for // both xt::xcontainer and pybind11::object. using pybind11::object::operator~; From 30ce883824a5a1acc23a519913773d714dd38c8f Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Fri, 10 Oct 2025 11:06:48 +0200 Subject: [PATCH 10/18] Upgrade (#329) Co-authored-by: Roy Kid --- CMakeLists.txt | 4 ++-- environment-dev.yml | 2 +- test_python/setup.py | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e6b9227..b0f98d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ message(STATUS "xtensor-python v${${PROJECT_NAME}_VERSION}") # Dependencies # ============ -set(xtensor_REQUIRED_VERSION 0.26.0) +set(xtensor_REQUIRED_VERSION 0.27.0) if(TARGET xtensor) set(xtensor_VERSION ${XTENSOR_VERSION_MAJOR}.${XTENSOR_VERSION_MINOR}.${XTENSOR_VERSION_PATCH}) # Note: This is not SEMVER compatible comparison @@ -48,7 +48,7 @@ endif() find_package(Python COMPONENTS Interpreter REQUIRED) -set(pybind11_REQUIRED_VERSION 2.6.1) +set(pybind11_REQUIRED_VERSION 3.0.0) if (NOT TARGET pybind11::headers) # Defaults to ON for cmake >= 3.18 # https://github.com/pybind/pybind11/blob/35ff42b56e9d34d9a944266eb25f2c899dbdfed7/CMakeLists.txt#L96 diff --git a/environment-dev.yml b/environment-dev.yml index 876678b..4d3b27b 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -6,7 +6,7 @@ dependencies: - cmake - ninja # Host dependencies - - xtensor>=0.26,<0.27 + - xtensor>=0.27,<0.28 - numpy>=2.0 - pybind11>=2.12.0,<4 # Test dependencies diff --git a/test_python/setup.py b/test_python/setup.py index 58dbd2d..895f60d 100644 --- a/test_python/setup.py +++ b/test_python/setup.py @@ -78,8 +78,8 @@ def cpp_flag(compiler): """Return the -std=c++17 compiler flag and errors when the flag is no available. """ - if has_flag(compiler, '-std=c++17'): - return '-std=c++17' + if has_flag(compiler, '-std=c++20'): + return '-std=c++20' else: raise RuntimeError('C++17 support is required by xtensor!') @@ -104,7 +104,7 @@ def build_extensions(self): opts.append('-fvisibility=hidden') elif ct == 'msvc': opts.append('/DVERSION_INFO=\\"%s\\"' % self.distribution.get_version()) - opts.append('/std:c++17') + opts.append('/std:c++20') for ext in self.extensions: ext.extra_compile_args = opts build_ext.build_extensions(self) From 53132f41441120ac695ad3643e78e480797feba2 Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Fri, 10 Oct 2025 09:07:20 +0000 Subject: [PATCH 11/18] Add missing default constructor for stride iterator (#327) It's a requirement for being adapted by std::reverse_iterator --- include/xtensor-python/pystrides_adaptor.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/xtensor-python/pystrides_adaptor.hpp b/include/xtensor-python/pystrides_adaptor.hpp index fde929a..bde3923 100644 --- a/include/xtensor-python/pystrides_adaptor.hpp +++ b/include/xtensor-python/pystrides_adaptor.hpp @@ -89,6 +89,8 @@ namespace xt using iterator_category = std::random_access_iterator_tag; using shape_pointer = typename pystrides_adaptor::shape_type; + pystrides_iterator() = default; + inline pystrides_iterator(pointer current, shape_pointer shape) : p_current(current) , p_shape(shape) From f95746f7edc97d85d6997bde32364bf37c69cee7 Mon Sep 17 00:00:00 2001 From: "Matwey V. Kornilov" Date: Fri, 10 Oct 2025 12:14:47 +0300 Subject: [PATCH 12/18] Install as arch-independent (#309) xternsor-python is header only library, so prefer arch-independed paths cmake. References: * https://github.com/xtensor-stack/xtl/commit/d877d94836aff4d0f727acf3eaab8f4880ecb625 * https://github.com/xtensor-stack/xtensor/commit/7738389861044c9618c7d59fb7602f7dddc1df7f Co-authored-by: Johan Mabille --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b0f98d3..1dba9ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,13 +124,14 @@ export(EXPORT ${PROJECT_NAME}-targets install(FILES ${XTENSOR_PYTHON_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/xtensor-python) + configure_file(${PROJECT_NAME}.pc.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.pc" DESTINATION "${CMAKE_INSTALL_DATADIR}/pkgconfig/") -set(XTENSOR_PYTHON_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" CACHE +set(XTENSOR_PYTHON_CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/cmake/${PROJECT_NAME}" CACHE STRING "install path for xtensor-pythonConfig.cmake") configure_package_config_file(${PROJECT_NAME}Config.cmake.in From 03e5da2712ae96cf089a9d03ae29aa51389031e5 Mon Sep 17 00:00:00 2001 From: "Matwey V. Kornilov" Date: Fri, 10 Oct 2025 12:26:18 +0300 Subject: [PATCH 13/18] Reenable python tests (#315) Co-authored-by: Johan Mabille --- test_python/test_pyarray.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test_python/test_pyarray.py b/test_python/test_pyarray.py index 9955ee7..4e7d5eb 100644 --- a/test_python/test_pyarray.py +++ b/test_python/test_pyarray.py @@ -23,7 +23,6 @@ import numpy as np class XtensorTest(TestCase): - """ def test_rm(self): xt.test_rm(np.array([10], dtype=int)) @@ -62,7 +61,6 @@ def test_example3(self): with self.assertRaises(TypeError): x = np.arange(3*2).reshape(3, 2) xt.example3_xfixed2(x) - """ def test_broadcast_addition(self): x = np.array([[2., 3., 4., 5.]]) y = np.array([[1., 2., 3., 4.], @@ -73,7 +71,6 @@ def test_broadcast_addition(self): [3., 5., 7., 9.]]) z = xt.array_addition(x, y) np.testing.assert_allclose(z, res, 1e-12) - """ def test_broadcast_subtraction(self): x = np.array([[4., 5., 6., 7.]]) y = np.array([[4., 3., 2., 1.], @@ -307,7 +304,6 @@ def test_native_casters(self): self.assertEqual(adapter.shape, (2, 2)) adapter[1, 1] = -3 self.assertEqual(arr[0, 5], -3) - """ class AttributeTest(TestCase): From 7065f733f4839066d1092bad38b9cbbdd9fc6dee Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Fri, 10 Oct 2025 11:36:50 +0200 Subject: [PATCH 14/18] Release 0.29.0 --- README.md | 3 ++- include/xtensor-python/xtensor_python_config.hpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3f24121..e50064b 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,8 @@ from the `docs` subdirectory. | `xtensor-python` | `xtensor` | `pybind11` | |------------------|-----------|------------------| -| master | ^0.26.0 | >=2.6.1,<4 | +| master | ^0.27.0 | >=2.6.1,<4 | +| 0.29.0 | ^0.27.0 | >=2.6.1,<4 | | 0.28.0 | ^0.26.0 | >=2.6.1,<3 | | 0.27.0 | ^0.25.0 | >=2.6.1,<3 | | 0.26.1 | ^0.24.0 | ~2.4.3 | diff --git a/include/xtensor-python/xtensor_python_config.hpp b/include/xtensor-python/xtensor_python_config.hpp index f6840a7..4bb0882 100644 --- a/include/xtensor-python/xtensor_python_config.hpp +++ b/include/xtensor-python/xtensor_python_config.hpp @@ -11,7 +11,7 @@ #define XTENSOR_PYTHON_CONFIG_HPP #define XTENSOR_PYTHON_VERSION_MAJOR 0 -#define XTENSOR_PYTHON_VERSION_MINOR 28 +#define XTENSOR_PYTHON_VERSION_MINOR 29 #define XTENSOR_PYTHON_VERSION_PATCH 0 #endif From 2b46b48c074dbdefa80e0c890e12a05a97db28d8 Mon Sep 17 00:00:00 2001 From: Sylvain Corlay Date: Fri, 31 Oct 2025 22:47:53 +0100 Subject: [PATCH 15/18] Replace link to gitter with Zulip link. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e50064b..fbe1946 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![GHA OSX](https://github.com/xtensor-stack/xtensor/actions/workflows/osx.yml/badge.svg)](https://github.com/xtensor-stack/xtensor/actions/workflows/osx.yml) [![GHA Windows](https://github.com/xtensor-stack/xtensor/actions/workflows/windows.yml/badge.svg)](https://github.com/xtensor-stack/xtensor/actions/workflows/windows.yml) [![Documentation](http://readthedocs.org/projects/xtensor-python/badge/?version=latest)](https://xtensor-python.readthedocs.io/en/latest/?badge=latest) -[![Join the Gitter Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/QuantStack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![Zulip](https://img.shields.io/badge/social_chat-zulip-blue.svg)](https://xtensor.zulipchat.com/#narrow/channel/539553-Ask-anything) Python bindings for the [xtensor](https://github.com/xtensor-stack/xtensor) C++ multi-dimensional array library. From 8cf31b05232e253fe874986d6ee586d8c0c5d126 Mon Sep 17 00:00:00 2001 From: serge-sans-paille Date: Tue, 24 Feb 2026 17:09:38 +0000 Subject: [PATCH 16/18] Fix C++ version requirement for testing (#331) --- test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 60fcf10..fb31c6e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -29,7 +29,7 @@ include(CheckCXXCompilerFlag) string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") From c477d12311c6f56a4d2e0c22f93463b627d6b3da Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Tue, 24 Feb 2026 18:25:14 +0100 Subject: [PATCH 17/18] Removed outdated OSX13 image (#332) --- .github/workflows/osx.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/osx.yml b/.github/workflows/osx.yml index 118d4fd..54068cb 100644 --- a/.github/workflows/osx.yml +++ b/.github/workflows/osx.yml @@ -18,7 +18,6 @@ jobs: fail-fast: false matrix: os: - - 13 - 14 - 15 From 3cc25f4c7531c29b1869a4e46a39c3e89d391984 Mon Sep 17 00:00:00 2001 From: Johan Mabille Date: Wed, 18 Mar 2026 12:42:37 +0100 Subject: [PATCH 18/18] Fixed README badges --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fbe1946..da8ab69 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # ![xtensor-python](docs/source/xtensor-python.svg) -[![GHA Linux](https://github.com/xtensor-stack/xtensor/actions/workflows/linux.yml/badge.svg)](https://github.com/xtensor-stack/xtensor/actions/workflows/linux.yml) -[![GHA OSX](https://github.com/xtensor-stack/xtensor/actions/workflows/osx.yml/badge.svg)](https://github.com/xtensor-stack/xtensor/actions/workflows/osx.yml) -[![GHA Windows](https://github.com/xtensor-stack/xtensor/actions/workflows/windows.yml/badge.svg)](https://github.com/xtensor-stack/xtensor/actions/workflows/windows.yml) +[![GHA Linux](https://github.com/xtensor-stack/xtensor-python/actions/workflows/linux.yml/badge.svg)](https://github.com/xtensor-stack/xtensor-python/actions/workflows/linux.yml) +[![GHA OSX](https://github.com/xtensor-stack/xtensor-python/actions/workflows/osx.yml/badge.svg)](https://github.com/xtensor-stack/xtensor-python/actions/workflows/osx.yml) +[![GHA Windows](https://github.com/xtensor-stack/xtensor-python/actions/workflows/windows.yml/badge.svg)](https://github.com/xtensor-stack/xtensor-python/actions/workflows/windows.yml) [![Documentation](http://readthedocs.org/projects/xtensor-python/badge/?version=latest)](https://xtensor-python.readthedocs.io/en/latest/?badge=latest) [![Zulip](https://img.shields.io/badge/social_chat-zulip-blue.svg)](https://xtensor.zulipchat.com/#narrow/channel/539553-Ask-anything)