bempp 0.2.0

Boundary element method library.
name: 🧪

on:
  push:
    branches:
      - "**"
  pull_request:
    branches:
      - main
  merge_group:

jobs:
  run-tests-rust:
    name: Run Rust tests
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust-version: ["stable"]
        mpi: ['mpich', 'openmpi']
        feature-flags: ['--features "mpi,strict"']
    steps:
      - name: Set up Rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust-version }}
          components: rustfmt
      - name: Set up MPI
        uses: mpi4py/setup-mpi@v1
        with:
          mpi: ${{ matrix.mpi }}
      - name: Install cargo-mpirun
        run: cargo install cargo-mpirun
      - uses: actions/checkout@v3
      - name: Install LAPACK, OpenBLAS
        run:
          sudo apt-get install -y libopenblas-dev liblapack-dev

      - name: Run unit tests
        run: cargo test ${{ matrix.feature-flags }}
      - name: Run unit tests in release mode
        run: cargo test --release ${{ matrix.feature-flags }}
      - name: Run tests
        run: cargo test --examples --release ${{ matrix.feature-flags }}
      - name: Test benchmarks build
        run: cargo bench --no-run --features "mpi,strict"
      - name: Run examples
        run: |
          python3 find_examples.py
          chmod +x examples.sh
          ./examples.sh

  run-tests-python:
    name: Run Python tests
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
    steps:
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - uses: actions/checkout@v3
      - name: Install uv
        run: pip install uv "maturin>=1.7"
      - name: Make virtual environment
        run: |
          uv venv .venv
          uv pip install pip pytest
      - name: Install python package
        run: |
          source .venv/bin/activate
          maturin develop --release
      - name: Run Python tests
        run: |
          source .venv/bin/activate
          python -m pytest python/test

  check-dependencies:
    name: Check dependencies
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust-version: ["stable"]
    steps:
      - name: Set up Rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust-version }}
          components: rustfmt
      - name: Install cargo-upgrades
        run: cargo install cargo-upgrades
      - uses: actions/checkout@v3
      - name: Check that dependencies are up to date
        run:
          cargo upgrades