Files
SimurgArray/.github/workflows/ci.yml
T
kemalandClaude Opus 5.5 5bdd41b048
ci / test (3.12) (push) Failing after 9s
ci / test (3.13) (push) Failing after 11s
P9 (WIP): compiled kernels (rust/simurg-core, PyO3) with bit-identical pure-Python fallback
Rust ports of the hot paths found by profiling: fused per-locus GenCall calling
and scoring, BAF/LRR, libm maps with CPython math semantics, both nearest-neighbour
searches of the normalization fit, and the BPM LocusEntry parser. Address
coverage is memoised per IDAT layout. SIMURG_PURE_PYTHON=1 forces the pure paths.
On the Pi: genotype_sample 3.4 s -> 1.1 s, 36-sample GSA run 131 s -> 46 s, BPM
read 4x faster; 36 GSA + 6 Omni2.5 GTCs and QC tables byte-identical to the pure
path; tests/unit/test_core_kernels.py checks every kernel on edge cases.
bench/profile_genotype.py, bench/scaling.py, cloud task p9 (thread scaling).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01814GKVzZVL3FuF3DeiZXhv
2026-09-28 21:28:55 +01:00

32 lines
1.0 KiB
YAML

# Runs on Gitea Actions (reads .github/workflows) and GitHub Actions.
name: ci
on:
push:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
with:
python-version: ${{ matrix.python }}
- name: Install
run: uv venv && uv pip install -e ".[dev]"
- name: Lint
run: uv run ruff check src tests && uv run ruff format --check src tests
- name: Type check
run: uv run mypy
- name: Unit tests (no downloaded data needed)
run: uv run pytest tests/unit -q
- name: Build the compiled kernels (rust/simurg-core)
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
PATH="$HOME/.cargo/bin:$PATH" uv pip install ./rust/simurg-core
- name: Unit tests with the compiled kernels (must equal the pure-Python results)
run: uv run pytest tests/unit -q