From ef9956e6a4549953820baa15275066ca405a0204 Mon Sep 17 00:00:00 2001 From: darrylong Date: Sat, 29 Jun 2024 21:06:52 +0800 Subject: [PATCH] Fix Pytest error in test cases due to Numpy 2.0 incompatibility (#627) --- .circleci/config.yml | 5 ++- .github/workflows/python-package.yml | 50 +++++++++++++--------------- .github/workflows/python-publish.yml | 48 +++++++++++++------------- setup.py | 2 +- 4 files changed, 51 insertions(+), 54 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a47864ea..3702b089 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -8,6 +8,9 @@ jobs: build-and-test: docker: - image: cimg/python:3.10.2 + environment: + LIMIT_NUMPY_VERSION: 2.0.0 + LIMIT_SCIPY_VERSION: 1.13.1 steps: - checkout - python/install-packages: @@ -17,7 +20,7 @@ jobs: no_output_timeout: 30m command: | pip install --upgrade pip - pip install --only-binary=numpy,scipy numpy==1.22.4 scipy Cython pytest pytest-cov codecov + pip install --only-binary=numpy,scipy "numpy<$LIMIT_NUMPY_VERSION" "scipy<=$LIMIT_SCIPY_VERSION" Cython pytest pytest-cov codecov pip install -e .[tests] - run: name: Run tests diff --git a/.github/workflows/python-package.yml b/.github/workflows/python-package.yml index 9352892d..f58e2aba 100644 --- a/.github/workflows/python-package.yml +++ b/.github/workflows/python-package.yml @@ -17,14 +17,10 @@ jobs: fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-13, macos-14] - # python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - versions: - - { python: "3.8", numpy: 1.22.4 } - - { python: "3.9", numpy: 1.22.4 } - - { python: "3.10", numpy: 1.22.4 } - - { python: "3.11", numpy: 1.24.3 } - - { python: "3.12", numpy: 1.26.4 } - + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] + env: + LIMIT_NUMPY_VERSION: 2.0.0 + LIMIT_SCIPY_VERSION: 1.13.1 steps: - name: Get number of CPU cores uses: SimenB/github-actions-cpu-cores@v2 @@ -32,47 +28,47 @@ jobs: - uses: actions/checkout@v4 - - name: Setup Python ${{ matrix.versions.python }} - if: ${{ (matrix.os != 'macos-14') || ((matrix.os == 'macos-14') && (matrix.versions.python != '3.8') && (matrix.versions.python != '3.9')) }} + - name: Setup Python ${{ matrix.python-version }} + if: ${{ (matrix.os != 'macos-14') || ((matrix.os == 'macos-14') && (matrix.python-version != '3.8') && (matrix.python-version != '3.9')) }} uses: actions/setup-python@v5 id: pysetup with: - python-version: ${{ matrix.versions.python }} + python-version: ${{ matrix.python-version }} cache: 'pip' - name: Setup Python 3.8-3.9 - macos-arm - if: ${{ (matrix.os == 'macos-14') && ((matrix.versions.python == '3.8') || (matrix.versions.python == '3.9')) }} + if: ${{ (matrix.os == 'macos-14') && ((matrix.python-version == '3.8') || (matrix.python-version == '3.9')) }} run: | brew update - brew install python@${{ matrix.versions.python }} + brew install python@${{ matrix.python-version }} curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python${{ matrix.versions.python }} get-pip.py + python${{ matrix.python-version }} get-pip.py - name: Create Python alias for Windows if: matrix.os == 'windows-latest' run: | - $newPath = "${{ steps.pysetup.outputs.python-path }}".Replace("python.exe", "python${{ matrix.versions.python }}.exe") + $newPath = "${{ steps.pysetup.outputs.python-path }}".Replace("python.exe", "python${{ matrix.python-version }}.exe") New-Item -ItemType HardLink -Path "$newPath" -Value "${{ steps.pysetup.outputs.python-path }}" - name: Display Python and Pip versions run: | - python${{ matrix.versions.python }} -c "import sys; print(sys.version)" + python${{ matrix.python-version }} -c "import sys; print(sys.version)" pip --version - name: Upgrade pip wheel setuptools - run: pip install wheel setuptools pip --upgrade - - - name: Install numpy ${{ matrix.versions.numpy }} - run: pip install numpy==${{ matrix.versions.numpy }} - - - name: Display numpy version - run: python${{ matrix.versions.python }} -c "import numpy; print(numpy.__version__)" + run: python${{ matrix.python-version }} -m pip install wheel setuptools pip --upgrade + + - name: Install other dependencies + run: python${{ matrix.python-version }} -m pip install Cython pytest pytest-cov flake8 - name: Install other dependencies run: | - pip install scipy Cython pytest pytest-cov flake8 - python${{ matrix.versions.python }} setup.py build_ext -j${{ steps.cpu-cores.outputs.count }} - pip install -e .[tests] + python${{ matrix.python-version }} -m pip install Cython pytest pytest-cov flake8 "numpy<${{ env.LIMIT_NUMPY_VERSION }}" "scipy<=${{ env.LIMIT_SCIPY_VERSION }}" + python${{ matrix.python-version }} setup.py build_ext -j${{ steps.cpu-cores.outputs.count }} + python${{ matrix.python-version }} -m pip install -e .[tests] + + - name: Display numpy version + run: python${{ matrix.python-version }} -c "import numpy; print(numpy.__version__)" - name: Lint with flake8 run: | @@ -83,4 +79,4 @@ jobs: - name: Test with pytest run: | - pytest --cov=cornac + python${{ matrix.python-version }} -m pytest --cov=cornac diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index 32e0236e..fdb260c7 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -12,6 +12,10 @@ on: release: types: [published] +env: + LIMIT_NUMPY_VERSION: 2.0.0 + LIMIT_SCIPY_VERSION: 1.13.1 + jobs: build-wheels: name: Building on ${{ matrix.os }} @@ -20,58 +24,52 @@ jobs: fail-fast: false matrix: os: [windows-latest, ubuntu-latest, macos-13, macos-14] - versions: - - { python: "3.8", numpy: 1.22.4 } - - { python: "3.9", numpy: 1.22.4 } - - { python: "3.10", numpy: 1.22.4 } - - { python: "3.11", numpy: 1.24.3 } - - { python: "3.12", numpy: 1.26.4 } - + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] steps: - uses: actions/checkout@v4 - - name: Setup Python ${{ matrix.versions.python }} - if: ${{ (matrix.os != 'macos-14') || ((matrix.os == 'macos-14') && (matrix.versions.python != '3.8') && (matrix.versions.python != '3.9')) }} + - name: Setup Python ${{ matrix.python-version }} + if: ${{ (matrix.os != 'macos-14') || ((matrix.os == 'macos-14') && (matrix.python-version != '3.8') && (matrix.python-version != '3.9')) }} uses: actions/setup-python@v5 id: pysetup with: - python-version: ${{ matrix.versions.python }} + python-version: ${{ matrix.python-version }} cache: 'pip' - name: Setup Python 3.8-3.9 - macos-arm - if: ${{ (matrix.os == 'macos-14') && ((matrix.versions.python == '3.8') || (matrix.versions.python == '3.9')) }} + if: ${{ (matrix.os == 'macos-14') && ((matrix.python-version == '3.8') || (matrix.python-version == '3.9')) }} run: | brew update - brew install python@${{ matrix.versions.python }} + brew install python@${{ matrix.python-version }} curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - python${{ matrix.versions.python }} get-pip.py + python${{ matrix.python-version }} get-pip.py - name: Create Python alias for Windows if: matrix.os == 'windows-latest' run: | - $newPath = "${{ steps.pysetup.outputs.python-path }}".Replace("python.exe", "python${{ matrix.versions.python }}.exe") + $newPath = "${{ steps.pysetup.outputs.python-path }}".Replace("python.exe", "python${{ matrix.python-version }}.exe") New-Item -ItemType HardLink -Path "$newPath" -Value "${{ steps.pysetup.outputs.python-path }}" - name: Display Python and Pip versions run: | - python${{ matrix.versions.python }} -c "import sys; print(sys.version)" + python${{ matrix.python-version }} -c "import sys; print(sys.version)" pip --version - name: Upgrade pip wheel setuptools - run: pip install wheel setuptools pip --upgrade + run: python${{ matrix.python-version }} -m pip install wheel setuptools pip --upgrade - - name: Install numpy ${{ matrix.versions.numpy }} - run: pip install numpy==${{ matrix.versions.numpy }} + - name: Install numpy, scipy + run: pip install "numpy<${{ env.LIMIT_NUMPY_VERSION }}" "scipy<=${{ env.LIMIT_SCIPY_VERSION }}" - - name: Display numpy version - run: python${{ matrix.versions.python }} -c "import numpy; print(numpy.__version__)" - - name: Install other dependencies run: | - pip install scipy Cython wheel + pip install Cython wheel + - name: Display numpy version + run: python${{ matrix.python-version }} -c "import numpy; print(numpy.__version__)" + - name: Build wheels - run: python${{ matrix.versions.python }} setup.py bdist_wheel + run: python${{ matrix.python-version }} setup.py bdist_wheel - name: Rename Linux wheels to supported platform of PyPI if: matrix.os == 'ubuntu-latest' @@ -105,12 +103,12 @@ jobs: - name: Install numpy run: | - python -m pip install numpy==1.22.4 + python -m pip install "numpy<${{ env.LIMIT_NUMPY_VERSION }}" "scipy<=${{ env.LIMIT_SCIPY_VERSION }}" python -c "import numpy; print(numpy.__version__)" - name: Install other dependencies run: | - python -m pip install scipy Cython wheel + python -m pip install Cython wheel - name: Build source tar file run: python setup.py sdist diff --git a/setup.py b/setup.py index 44384bf2..0862ce41 100644 --- a/setup.py +++ b/setup.py @@ -343,7 +343,7 @@ def run(self): "recommendation", ], ext_modules=extensions, - install_requires=["numpy", "scipy", "tqdm", "powerlaw"], + install_requires=["numpy<2.0.0", "scipy<=1.13.1", "tqdm", "powerlaw"], extras_require={"tests": ["pytest", "pytest-pep8", "pytest-xdist", "pytest-cov", "Flask"]}, cmdclass=cmdclass, packages=find_packages(),