Skip to content

Prepare v2.0.2 release: SE accuracy improvements #20

Prepare v2.0.2 release: SE accuracy improvements

Prepare v2.0.2 release: SE accuracy improvements #20

Workflow file for this run

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