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).
32 lines
1.0 KiB
YAML
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
|