Improve se accuracy wif #18
Workflow file for this run
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
| name: Rust Backend Tests | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'rust/**' | |
| - 'diff_diff/**' | |
| - 'tests/**' | |
| - 'pyproject.toml' | |
| - '.github/workflows/rust-test.yml' | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - 'rust/**' | |
| - 'diff_diff/**' | |
| - 'tests/**' | |
| - 'pyproject.toml' | |
| - '.github/workflows/rust-test.yml' | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| # Run Rust unit tests | |
| rust-tests: | |
| name: Rust Unit Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install OpenBLAS | |
| run: sudo apt-get update && sudo apt-get install -y libopenblas-dev | |
| - name: Run Rust tests | |
| working-directory: rust | |
| run: cargo test --verbose | |
| # Build and test with Python on multiple platforms | |
| python-tests: | |
| name: Python Tests (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest] | |
| # Windows excluded due to Intel MKL build complexity | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install OpenBLAS (Ubuntu) | |
| if: matrix.os == 'ubuntu-latest' | |
| run: sudo apt-get update && sudo apt-get install -y libopenblas-dev | |
| - name: Install OpenBLAS (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: brew install openblas | |
| - name: Set OpenBLAS paths (macOS) | |
| if: matrix.os == 'macos-latest' | |
| run: | | |
| echo "OPENBLAS_DIR=$(brew --prefix openblas)" >> $GITHUB_ENV | |
| echo "PKG_CONFIG_PATH=$(brew --prefix openblas)/lib/pkgconfig" >> $GITHUB_ENV | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install test dependencies | |
| run: pip install pytest numpy pandas scipy | |
| - name: Build and install with maturin | |
| run: | | |
| pip install maturin | |
| maturin build --release -o dist | |
| echo "=== Built wheels ===" | |
| ls -la dist/ | |
| # --no-index ensures we install from local wheel, not PyPI | |
| pip install --no-index --find-links=dist diff-diff | |
| - name: Verify Rust backend is available | |
| # Run from /tmp to avoid source directory shadowing installed package | |
| working-directory: /tmp | |
| run: | | |
| python -c "import diff_diff; print('Location:', diff_diff.__file__)" | |
| python -c "from diff_diff import HAS_RUST_BACKEND; print('HAS_RUST_BACKEND:', HAS_RUST_BACKEND); assert HAS_RUST_BACKEND, 'Rust backend not available'" | |
| - name: Copy tests to isolated location | |
| run: cp -r tests /tmp/tests | |
| - name: Run Rust backend tests | |
| working-directory: /tmp | |
| run: pytest tests/test_rust_backend.py -v | |
| - name: Run tests with Rust backend | |
| working-directory: /tmp | |
| run: DIFF_DIFF_BACKEND=rust pytest tests/ -x -q | |
| # Test pure Python fallback (without Rust extension) | |
| python-fallback: | |
| name: Pure Python Fallback | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install dependencies | |
| run: pip install numpy pandas scipy pytest | |
| - name: Verify pure Python mode | |
| run: | | |
| # Use PYTHONPATH to import directly (skips maturin build) | |
| PYTHONPATH=. python -c "from diff_diff import HAS_RUST_BACKEND; print(f'HAS_RUST_BACKEND: {HAS_RUST_BACKEND}'); assert not HAS_RUST_BACKEND" | |
| - name: Run tests in pure Python mode | |
| run: PYTHONPATH=. DIFF_DIFF_BACKEND=python pytest tests/ -x -q --ignore=tests/test_rust_backend.py |