105+106: correlation orchestrator + GUI window #45

Merged
ykp merged 5 commits from feat/105-correlation-orchestrator into main 2026-10-06 20:19:22 +02:00
Owner

Steps 105 + 106 — Correlation orchestrator + Test GNSS GUI window

105 — Orchestrator (src/testgnss/orchestrator.py)

  • CorrelationResult / RunResult dataclasses
  • run_test() — full pipeline: read files → validate → generate replica → PCPS correlate → detect peak → apply interference (optional)
  • 9 tests: signal-alone, planted peak, interference, determinism, raw IQ, Galileo, GLONASS

106 — GUI (src/testgnss/gui/app.py)

  • Standalone Tkinter window (lazy tkinter import, headless-safe)
  • File pickers with per-file raw IQ parameter fields
  • Service/satellite dropdowns + Galileo E1C checkbox + GLONASS FDMA slots
  • C/I field (enabled with interference), applied gain display
  • Worker thread execution with progress bar and status
  • plotly 3-D surfaces rendered via kaleido + PIL into Tkinter labels
  • Detection summary text per correlation surface
  • testgnss.app:main() now launches the GUI
  • Added Pillow to testgnss deps

Verification

All testgnss tests pass
ruff check src/testgnss/ → All checks passed
## Steps 105 + 106 — Correlation orchestrator + Test GNSS GUI window ### 105 — Orchestrator (`src/testgnss/orchestrator.py`) - `CorrelationResult` / `RunResult` dataclasses - `run_test()` — full pipeline: read files → validate → generate replica → PCPS correlate → detect peak → apply interference (optional) - 9 tests: signal-alone, planted peak, interference, determinism, raw IQ, Galileo, GLONASS ### 106 — GUI (`src/testgnss/gui/app.py`) - Standalone Tkinter window (lazy tkinter import, headless-safe) - File pickers with per-file raw IQ parameter fields - Service/satellite dropdowns + Galileo E1C checkbox + GLONASS FDMA slots - C/I field (enabled with interference), applied gain display - Worker thread execution with progress bar and status - plotly 3-D surfaces rendered via kaleido + PIL into Tkinter labels - Detection summary text per correlation surface - `testgnss.app:main()` now launches the GUI - Added Pillow to testgnss deps ### Verification ``` All testgnss tests pass ruff check src/testgnss/ → All checks passed ```
105(testgnss): correlation orchestrator
Some checks failed
ci / test (3.12) (push) Successful in 3m4s
ci / test (3.14) (push) Successful in 3m9s
ci / test (3.9) (push) Successful in 2m23s
ci / testgnss (3.12) (push) Successful in 2m18s
ci / testgnss (3.14) (push) Successful in 2m15s
ci / testgnss (3.9) (push) Successful in 2m10s
ci / test (3.12) (pull_request) Successful in 3m21s
ci / test (3.14) (pull_request) Successful in 3m22s
ci / testgnss (3.14) (pull_request) Has been cancelled
ci / testgnss (3.9) (pull_request) Has been cancelled
ci / test (3.9) (pull_request) Has been cancelled
ci / testgnss (3.12) (pull_request) Has been cancelled
08bac120ae
Ties together I/O, validation, C/I scaling, and PCPS engine into a
single run_test() call consumed by the GUI (step 106).

- src/testgnss/orchestrator.py: CorrelationResult, RunResult dataclasses,
  get_code_phase_axis, _parse_satellite_id, run_test (orchestrates read
  → validate → replica → correlate → detect → return)
- tests/test_testgnss_orchestrator.py: 9 tests — signal-alone, planted
  peak, interference degradation, validation error, determinism, raw IQ,
  Galileo, GLONASS, CI gain reporting
106(testgnss): Test GNSS GUI window
Some checks failed
ci / test (3.9) (push) Has been cancelled
ci / testgnss (3.12) (push) Has been cancelled
ci / testgnss (3.14) (push) Has been cancelled
ci / testgnss (3.9) (push) Has been cancelled
ci / test (3.12) (pull_request) Has been cancelled
ci / test (3.14) (pull_request) Has been cancelled
ci / test (3.9) (pull_request) Has been cancelled
ci / testgnss (3.12) (pull_request) Has been cancelled
ci / testgnss (3.14) (pull_request) Has been cancelled
ci / testgnss (3.9) (pull_request) Has been cancelled
ci / test (3.12) (push) Has been cancelled
ci / test (3.14) (push) Has been cancelled
6f011338f3
Standalone Tkinter window with plotly 3-D correlation surfaces,
file pickers, service/satellite controls, C/I field, worker thread,
and detection summary display.

- src/testgnss/gui/app.py: TestGnssApp — full GUI with lazy tkinter
  import, plotly surface rendering via kaleido + PIL, thread-safe
  worker execution
- src/testgnss/app.py: main() now creates and runs TestGnssApp
- pyproject.toml: add Pillow to testgnss deps (for ImageTk.PhotoImage)
- Backlog: mark step 105 done, 106 in progress
ykp changed title from 105: correlation orchestrator to 105+106: correlation orchestrator + GUI window 2026-10-06 19:40:34 +02:00
main() now exits with SystemExit when tkinter is absent (headless).
Adjust the test to accept either NotImplementedError or SystemExit.
fix: import ordering in entry point test
Some checks failed
ci / test (3.12) (push) Failing after 1m51s
ci / test (3.14) (push) Failing after 1m53s
ci / testgnss (3.12) (push) Failing after 2m4s
ci / test (3.9) (push) Failing after 2m20s
ci / testgnss (3.14) (push) Failing after 2m22s
ci / testgnss (3.9) (push) Failing after 2m21s
ci / test (3.9) (pull_request) Has been cancelled
ci / testgnss (3.12) (pull_request) Has been cancelled
ci / testgnss (3.14) (pull_request) Has been cancelled
ci / testgnss (3.9) (pull_request) Has been cancelled
ci / test (3.14) (pull_request) Has been cancelled
ci / test (3.12) (pull_request) Has been cancelled
c215892a22
fix: make main() catch display errors too + simplify test
All checks were successful
ci / test (3.14) (push) Successful in 2m29s
ci / test (3.12) (push) Successful in 2m46s
ci / testgnss (3.12) (push) Successful in 2m9s
ci / test (3.9) (push) Successful in 2m30s
ci / testgnss (3.14) (push) Successful in 2m15s
ci / testgnss (3.9) (push) Successful in 2m16s
ci / test (3.12) (pull_request) Successful in 2m57s
ci / test (3.14) (pull_request) Successful in 3m8s
ci / test (3.9) (pull_request) Successful in 2m42s
ci / testgnss (3.12) (pull_request) Successful in 2m27s
ci / testgnss (3.14) (pull_request) Successful in 2m35s
ci / testgnss (3.9) (pull_request) Successful in 2m32s
b7d9d5a47e
- app.py: wrap TestGnssApp creation in try/except to catch
  TclError when no display is available
- test: simplify entry point test to always expect SystemExit
  (works on all CI configurations)
ykp merged commit f2067c4dc4 into main 2026-10-06 20:19:22 +02:00
ykp deleted branch feat/105-correlation-orchestrator 2026-10-06 20:19:22 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ykp/gengnss!45
No description provided.