Development
The workspace MSRV is Rust 1.88.0. The normal local quality gate is:
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings
cargo test --workspace --all-features --locked
RUSTDOCFLAGS="-D warnings" cargo doc --workspace --all-features --no-deps
cargo +1.88.0 check --workspace --locked
Build the GitHub Pages documentation with the same mdBook 0.5.4 release used
by .github/workflows/docs.yml:
python tools/check_markdown_links.py
mdbook build
Build and verify the complete PDF edition after the HTML book is current:
python scripts/build_book_pdf.py
The PDF builder needs Chrome or Chromium plus mutool. It creates a
navigable bookmark tree, keeps chapter links inside the book, converts links
to repository artifacts into portable GitHub URLs, and writes
docs/pykep-rust-book.pdf.
Run benchmarks separately so timing work is never hidden in the test suite:
cargo bench -p pykep-core
cargo run --release -p pykep-release-benchmark -- --quick --check
python python/benchmarks/wrapper_overhead.py --scaling
The standalone Phase 10 candidate comparison is reproducible with:
cargo run --release --manifest-path tools/phase10-candidates/Cargo.toml
For Python integration:
python -m venv .venv
.venv/bin/python -m pip install --upgrade pip
.venv/bin/python -m pip install "maturin[patchelf]>=1.7,<2" pytest
env -u CONDA_PREFIX VIRTUAL_ENV="$PWD/.venv" \
PATH="$PWD/.venv/bin:$PATH" \
.venv/bin/maturin develop --release \
--manifest-path crates/pykep-py/Cargo.toml
.venv/bin/python -m pytest
Coverage:
cargo llvm-cov -p pykep-core --all-features --all-targets --summary-only
cargo llvm-cov --workspace --all-targets --summary-only
Release-candidate dynamic checks:
cargo +nightly miri test -p pykep-core --lib --no-default-features fixed_matrix_operations
cargo +nightly fuzz run epoch_parser -- -max_total_time=30
cargo +nightly fuzz run element_conversions -- -max_total_time=30
cargo +nightly fuzz run lambert_inputs -- -max_total_time=30
cargo +nightly fuzz run reynolds_stm -- -max_total_time=30
valgrind --error-exitcode=1 --leak-check=full \
target/release/pykep-release-benchmark --quick
The full protocol, profiler commands/results, and Miri floating-point scope are
documented in stabilization.md. Packaging and
clean-artifact consumption are documented in RELEASE.md.
Build state belongs in target/ or .venv/ and is ignored. Development-only
C++ oracle tools and internal planning notes are not part of this standalone
repository.
For the model contract and the complete definition of done for a new dynamics family, see Adding an ODE system.