String ufuncs replace #10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Linux tests | |
# This file is meant for testing across supported Python versions, build types | |
# and interpreters (PyPy, python-dbg, a pre-release Python in summer time), | |
# build-via-sdist, run benchmarks, measure code coverage, and other build | |
# options. | |
on: | |
push: | |
branches: | |
# coverage comparison in the "full" step needs to run on main after merges | |
- main | |
pull_request: | |
branches: | |
- main | |
- maintenance/** | |
defaults: | |
run: | |
shell: bash | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
jobs: | |
lint: | |
if: github.repository == 'numpy/numpy' && github.event_name != 'push' | |
runs-on: ubuntu-latest | |
continue-on-error: true | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.9' | |
- name: Install linter requirements | |
run: | |
python -m pip install -r linter_requirements.txt | |
- name: Run linter on PR diff | |
run: | |
python tools/linter.py --branch origin/${{ github.base_ref }} | |
smoke_test: | |
if: "github.repository == 'numpy/numpy'" | |
runs-on: ubuntu-latest | |
env: | |
MESON_ARGS: "-Dallow-noblas=true -Dcpu-baseline=none -Dcpu-dispatch=none" | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.9' | |
- uses: ./.github/meson_actions | |
pypy: | |
needs: [smoke_test] | |
runs-on: ubuntu-latest | |
if: github.event_name != 'push' | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: 'pypy3.9-v7.3.12' | |
- name: Setup using scipy-openblas | |
run: | | |
python -m pip install scipy-openblas32 spin | |
spin config-openblas --with-scipy-openblas=32 | |
- uses: ./.github/meson_actions | |
debug: | |
needs: [smoke_test] | |
runs-on: ubuntu-latest | |
if: github.event_name != 'push' | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- name: Install debug Python | |
run: | | |
sudo apt-get update | |
sudo apt-get install python3-dbg ninja-build | |
- name: Build NumPy and install into venv | |
run: | | |
python3-dbg -m venv venv | |
source venv/bin/activate | |
pip install -U pip | |
pip install . -v -Csetup-args=-Dbuildtype=debug -Csetup-args=-Dallow-noblas=true | |
- name: Install test dependencies | |
run: | | |
source venv/bin/activate | |
pip install -r test_requirements.txt | |
- name: Run test suite | |
run: | | |
source venv/bin/activate | |
cd tools | |
pytest --pyargs numpy -m "not slow" | |
full: | |
# Build a wheel, install it, then run the full test suite with code coverage | |
needs: [smoke_test] | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.9' | |
- name: Install build and test dependencies from PyPI | |
run: | | |
pip install -r build_requirements.txt | |
pip install -r test_requirements.txt | |
- name: Install gfortran and setup OpenBLAS (MacPython build) | |
run: | | |
set -xe | |
sudo apt update | |
sudo apt install gfortran libgfortran5 | |
pip install scipy-openblas32 | |
spin config-openblas --with-scipy-openblas=32 | |
- name: Build a wheel | |
env: | |
PKG_CONFIG_PATH: ${{ github.workspace }}/.openblas | |
run: | | |
python -m build --wheel --no-isolation --skip-dependency-check | |
pip install dist/numpy*.whl | |
- name: Run full test suite | |
run: | | |
cd tools | |
pytest --pyargs numpy --cov-report=html:build/coverage | |
# TODO: gcov | |
benchmark: | |
needs: [smoke_test] | |
runs-on: ubuntu-latest | |
if: github.event_name != 'push' | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.9' | |
- name: Install build and benchmarking dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install libopenblas-dev ninja-build | |
pip install spin cython asv virtualenv packaging | |
- name: Install NumPy | |
run: | | |
spin build -- -Dcpu-dispatch=none | |
# Ensure to keep the below steps as single-line bash commands (it's a | |
# workaround for asv#1333, and it may have side-effects on multi-line commands) | |
- name: Appease asv's need for machine info | |
shell: 'script -q -e -c "bash --noprofile --norc -eo pipefail {0}"' | |
run: | | |
asv machine --yes --config benchmarks/asv.conf.json | |
- name: Run benchmarks | |
shell: 'script -q -e -c "bash --noprofile --norc -eo pipefail {0}"' | |
run: | | |
spin bench --quick | |
sdist: | |
needs: [smoke_test] | |
runs-on: ubuntu-latest | |
if: github.event_name != 'push' | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.11' | |
- name: Install gfortran and setup OpenBLAS (MacPython build) | |
run: | | |
set -xe | |
sudo apt update | |
sudo apt install gfortran libgfortran5 | |
target=$(python tools/openblas_support.py) | |
sudo cp -r $target/lib/* /usr/lib | |
sudo cp $target/include/* /usr/include | |
- name: Build a wheel via an sdist | |
run: | | |
pip install build | |
python -m build | |
pip install dist/numpy*.whl | |
- name: Install test dependencies | |
run: | | |
pip install -r test_requirements.txt | |
pip install ninja | |
- name: Run test suite | |
run: | | |
cd tools | |
pytest --pyargs numpy -m "not slow" | |
custom_checks: | |
needs: [smoke_test] | |
runs-on: ubuntu-latest | |
if: github.event_name != 'push' | |
steps: | |
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0 | |
with: | |
submodules: recursive | |
fetch-depth: 0 | |
- uses: actions/setup-python@65d7f2d534ac1bc67fcd62888c5f4f3d2cb2b236 # v4.7.1 | |
with: | |
python-version: '3.11' | |
- name: Install build and test dependencies from PyPI | |
run: | | |
pip install -r build_requirements.txt | |
pip install -r test_requirements.txt | |
pip install vulture | |
- name: Build and install NumPy | |
run: | | |
# Install using the fastests way to build (no BLAS, no SIMD) | |
spin build -j2 -- -Dallow-noblas=true -Dcpu-baseline=none -Dcpu-dispatch=none | |
- name: Check build-internal dependencies | |
run: | | |
ninja -C build -t missingdeps | |
- name: Check installed test and stub files | |
run: | | |
python tools/check_installed_files.py $(find ./build-install -path '*/site-packages/numpy') | |
- name: Check for unreachable code paths in Python modules | |
run: | | |
# Need the explicit `bash -c` here because `grep` returns exit code 1 for no matches | |
bash -c "! vulture . --min-confidence 100 --exclude doc/,numpy/distutils/,vendored-meson/ | grep 'unreachable'" |