Skip to content

Releases: anulum/scpn-control

v0.7.0

02 Mar 17:25

Choose a tag to compare

What's Changed

Added

  • tests/test_nengo_snn_wrapper.py — 14 mocked tests for the only untested module (389 LOC)
  • tests/test_e2e_compile_to_control.py — 5 E2E integration tests (compile → artifact → controller → step)
  • require_range validator in core/_validators.py
  • /// doc comments on 11 public Rust functions (mpi_domain.rs, vmec_interface.rs)
  • keywords and categories in all 5 Rust Cargo.toml files
  • Paper 27 Reviewer Integration page in mkdocs nav

Fixed

  • Public API typo: TokamakTopoloyTokamakTopology (deprecated alias retained)
  • print()logging in 13 control modules (58 call sites total)
  • Remaining Union[str, Path]str | Path in 3 files (eqdsk.py, realtime_monitor.py, artifact.py)
  • CLI hardcoded module/test counts → dynamic Path.rglob computation
  • Magic number b0=5.3 → named constant ITER_B0_VACUUM_T with citation
  • Stale doc counts across README, architecture, pitch, use_cases, CONTRIBUTING (53 modules, 115 files, 1969 tests, 15 CI)
  • Dead grid_index() function removed from Rust gmres.rs

Changed

  • Coverage gate ratcheted: fail_under = 6285
  • from __future__ import annotations added to core/__init__.py and scpn/__init__.py
  • 4 duplicate validators in halo_re_physics.py replaced with core._validators imports
  • ROADMAP.md rewritten: v0.6.0 moved to Shipped, unshipped items to v0.7.0+
  • 12 additional tests across 5 thin test files

Full Changelog: v0.6.0...v0.7.0

v0.6.0

02 Mar 13:41

Choose a tag to compare

What's Changed

Added

  • .editorconfig and .github/CODEOWNERS
  • Copyright headers on all 3 CI workflow files
  • repository field in all 5 Rust Cargo.toml files
  • tests/test_validators.py — 49 parametrized tests for core/_validators.py
  • tests/test_phase_properties_extended.py — 14 Hypothesis property tests (knm, upde, adaptive_knm)
  • Paper 27 citations on OMEGA_N_16 and build_knm_paper27 constants

Fixed

  • .zenodo.json license "MIT""MIT OR Apache-2.0" (matches pyproject.toml)
  • docs/api.md version stuck at "0.5.0""0.6.0"
  • print()logger.info() in spi_mitigation.py (3 sites)
  • Anti-slop: renamed unused param proposed_action_proposed_action, deleted 4 narration comments in cli.py
  • Flaky timing test: absolute 5s threshold → relative warmup baseline
  • Dead DEFAULT_GAIN constant removed from Rust optimal.rs
  • E402 import ordering in spi_mitigation.py

Changed

  • Typing modernization: from __future__ import annotations + Optional[X]X | None in 21 files
  • Shared test fixtures extracted to conftest.py (3 controller test files deduplicated)
  • pyproject.toml keywords + author email added

Full Changelog: v0.5.2...v0.6.0

v0.4.0 — Real-Time Adaptive Knm

01 Mar 05:38

Choose a tag to compare

v0.4.0 — Real-Time Adaptive Knm

First Kuramoto phase dynamics engine with online-adaptive coupling from plasma state.

Added

  • AdaptiveKnmEngine, DiagnosticSnapshot, AdaptiveKnmConfig
  • Five adaptation channels: beta scaling, MHD risk amplification, coherence PI control, per-element rate limiting, Lyapunov guard veto
  • K_override parameter on UPDESystem.step(), .run(), .run_lyapunov()
  • RealtimeMonitor.from_plasma() constructor with adaptive engine support
  • Diagnostic kwargs (beta_n, q95, disruption_risk, mirnov_rms) on tick()
  • 46 new tests (1888 total), all 17 CI jobs green

Fixed

  • mypy type-shadow in adaptive rate-limit block
  • torch-absent test skips for load_or_train_predictor and predict_disruption_risk_safe

Metadata

  • Complete .zenodo.json (related identifiers, communities, notes)
  • CITATION.cff version bump + DOI

v0.3.3 — MIT/Apache-2.0 Dual License

27 Feb 15:18

Choose a tag to compare

License change: AGPL-3.0 → MIT OR Apache-2.0

This is the first PyPI release with permissive license metadata.

Every fusion lab, SPARC team, private integrator, and startup can now
use scpn-control without copyleft restrictions.

Changed

  • License switched from AGPL-3.0-or-later to MIT OR Apache-2.0 dual
  • 137 files updated (LICENSE, LICENSE-MIT, LICENSE-APACHE, all source headers,
    pyproject.toml, CITATION.cff, .zenodo.json, 6 Cargo.toml, README, CONTRIBUTING, docs)
  • Zero AGPL references remain in project files
  • README quickstart: pip install -e "."pip install scpn-control

Install

pip install "scpn-control[neuro,dashboard,ws]"
scpn-control demo --steps 1000

Full changelog: https://github.com/anulum/scpn-control/blob/main/CHANGELOG.md

v0.3.2 — VectorizedSCLayer + Perfection Sprint

27 Feb 14:29

Choose a tag to compare

What's New

sc-neurocore v3.8.0+ Integration

  • VectorizedSCLayer + Rust backend path in SNN compiler (512x real-time when pip install "scpn-control[neuro]")
  • Two-tier import: v3.8.0+ preferred → legacy bit-ops → numpy float fallback
  • Detection test + forward-path benchmark

v0.3.0 Perfection Sprint (14 items)

  • Docker: Multi-stage Dockerfile + .devcontainer/devcontainer.json
  • pre-commit: ruff, mypy, check-yaml, trailing-whitespace, cargo fmt/clippy (manual stage)
  • MkDocs: Theory page (SPN math, Kuramoto, UPDE, Lyapunov, H-inf), Architecture page (Mermaid diagrams, Rust/Python boundary), mkdocstrings autodoc for key classes, MathJax + Mermaid rendering
  • CI: 13 → 17 jobs (pre-commit, notebook-smoke, e2e-diiid, python-benchmark, rmse-gate)
  • GitHub: Issue templates (bug report, feature request), PR template
  • Zenodo: .zenodo.json metadata + tools/export_zenodo_dataset.py
  • README: Codecov + Zenodo badges, Limitations section, sc-neurocore engine callout
  • ROADMAP.md: v0.3.x → v0.4.0 → v0.5.0 → Future
  • CITATION.cff: Version + date updated
  • CONTRIBUTING.md: pre-commit setup, job count

CI Fixes

  • Replaced sys.path.insert hacks with pythonpath = ["src", "tests", "."] in pytest config
  • Fixed requirements.txt for Streamlit Cloud (. instead of scpn-control>=0.2.0)
  • Created validation/__init__.py for proper package resolution

Stats

  • 17/17 CI jobs green
  • 701+ tests (50 test files)
  • 61% coverage (threshold: 55%)
  • 48 Python source modules, 5 Rust crates

Install

pip install scpn-control
scpn-control demo --steps 1000

With SNN acceleration:

pip install "scpn-control[neuro]"

Full stack:

pip install "scpn-control[dashboard,ws,neuro]"
scpn-control live --port 8765 --zeta 0.5

Live Dashboard

https://scpn-control.streamlit.app