fix(ci): add test_power + test_arctan2 to std-mode skip filter #86
This file contains hidden or 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
| # CI: build and test both backends on every push/PR. | |
| # | |
| # Two test jobs run in parallel: | |
| # test-bitexact — NUMPYCPP_STD_ONLY=OFF (default) | |
| # All 900 tests verify IEEE-754 bit-identical results vs numpy. | |
| # Requires: numpy .so loaded (OpenBLAS + SVML dlsym), AVX-512 capable CPU. | |
| # | |
| # test-std — NUMPYCPP_STD_ONLY=ON | |
| # Same API, pure <cmath> + C++ loops. ~423 precision-independent tests. | |
| # No external math dependencies. | |
| # | |
| # DEB packaging: single DEB (header-only — backend is consumer's compile choice) | |
| # cmake .. → numpycpp-dev-<ver>-Linux.deb | |
| name: CI | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| jobs: | |
| # ── Job 1: bit-exact backend ───────────────────────────────────────────────── | |
| test-bitexact: | |
| name: bitexact / Python ${{ matrix.python }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: ["3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Install Python dependencies | |
| run: pip install "numpy>=1.23,<2.0" pybind11 pytest cmake | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y libeigen3-dev | |
| - name: Diagnose numpy symbols | |
| run: | | |
| python diagnose_numpy.py | |
| grep -q avx512f /proc/cpuinfo && echo "AVX-512: present in cpuinfo" || echo "AVX-512: NOT in cpuinfo" | |
| working-directory: tests | |
| - name: Configure (bitexact) | |
| run: cmake -S tests -B tests/build -DCMAKE_BUILD_TYPE=Release -DNUMPYCPP_STD_ONLY=OFF | |
| - name: Build | |
| run: cmake --build tests/build -j$(nproc) | |
| - name: Run 900 bit-exact tests | |
| run: | | |
| cd tests | |
| python -m pytest test_all.py -q --tb=short --no-header | |
| # ── Job 2: std / performance-first backend ─────────────────────────────────── | |
| test-std: | |
| name: std / Python ${{ matrix.python }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python: ["3.10", "3.11", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python }} | |
| - name: Install Python dependencies | |
| run: pip install "numpy>=1.23,<2.0" pybind11 pytest cmake | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update -qq | |
| sudo apt-get install -y libeigen3-dev | |
| - name: Configure (std) | |
| run: cmake -S tests -B tests/build_std -DCMAKE_BUILD_TYPE=Release -DNUMPYCPP_STD_ONLY=ON | |
| - name: Build | |
| run: cmake --build tests/build_std -j$(nproc) | |
| - name: Run API-compatibility tests (std mode) | |
| # std mode: skip all tests that require bit-exact math (0 ULP). | |
| # Skipped categories (std::exp/pow/atan2 and C++ loops are NOT bit-exact vs numpy): | |
| # test_unary_math — transcendental element-wise (exp/log/sin/…) | |
| # test_power — std::pow vs numpy SVML pow (0-1 ULP on AVX-512 runners) | |
| # test_arctan2 — std::atan2 vs numpy SVML atan2 (0-1 ULP on AVX-512 runners) | |
| # test_dot/norm/matmul — linalg (BLAS vs C++ loops) | |
| # TestEinsum — einsum (BLAS vs loops) | |
| # test_avx512_boundary — AVX-512 path not present in std build | |
| # nan/domain/signed_zero/_inf — transcendental edge cases | |
| # All structural, reduction, manipulation, io, comparison, astype, | |
| # and advanced-indexing tests still run (~417 / 900). | |
| run: | | |
| cd tests | |
| python -m pytest test_all.py -q --tb=short --no-header -k "not (test_unary_math or test_power or test_arctan2 or test_dot or test_norm or test_matmul or TestEinsum or test_avx512_boundary or test_nan_passthrough or test_nan_mixed or test_domain or signed_zero or _inf or test_sign_inf)" | |
| # ── Job 3: package DEB ─────────────────────────────────────────────────────── | |
| package: | |
| name: Package DEB | |
| runs-on: ubuntu-latest | |
| needs: [test-bitexact, test-std] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Build DEB | |
| # Header-only: both backends ship in one DEB. | |
| # Backend is selected by the consumer at cmake configure time | |
| # via -DNUMPYCPP_STD_ONLY=ON/OFF. | |
| run: | | |
| cmake -S . -B build_deb | |
| cmake --build build_deb --target deb | |
| ls build_deb/numpycpp-dev-*.deb | |
| - name: Upload DEB as artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: numpycpp-dev-deb | |
| path: build_deb/numpycpp-dev-*.deb |