Releases: slaclab/rogue
Patch Release v6.10.1
Pull Requests Since v6.10.0
Unlabeled
- #1179 - Publish durable performance results and add a GitHub Pages performance dashboard
- #1178 - Tweak list of releases in docs.
Pull Request Details
Tweak list of releases in docs.
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Tue Apr 14 11:15:40 2026 -0700 |
| Pull: | #1178 (143 additions, 35 deletions, 3 files changed) |
| Branch: | slaclab/doc-hist-2 |
Notes:
Description
The publisher now treats
latestas the display entry for the newest release tag:
latestis labeledvX.Y.Z - Latest Release- the newest concrete
vX.Y.Zrelease is omitted from the selector/history list- older releases still appear newest-first after
Pre-releaseThe frontend was updated so direct URLs under the newest concrete tag, like
/v6.10.1/..., still behave aslatestin the selector and don’t get an “archived” banner.
Publish durable performance results and add a GitHub Pages performance dashboard
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Tue Apr 14 11:29:45 2026 -0700 |
| Pull: | #1179 (1789 additions, 48 deletions, 12 files changed) |
| Branch: | slaclab/perf-publish |
Notes:
Description
Add durable performance result publishing on
gh-pagesso perf runs can be compared against prior branch results and the currentmainandpre-releasebaselines instead of relying only on transient workflow artifacts.This change adds a new gated
Performance Publishworkflow that consumes theperf-resultsartifact fromRogue Integration, normalizes the benchmark output, and publishes it undergh-pages/perf/. It also updates the perf summary in CI to load published branch and baseline data when available, and generates a static/perf/dashboard for browsing recent history and benchmark comparisons.The docs publishing workflows now share the same
gh-pagesconcurrency group as the perf publisher so independent workflows do not race while writing site content. The docs sidebar also includes a direct link to the published performance dashboard.Details
- Added shared perf normalization and comparison helpers in
scripts/perf_data.py.- Added
scripts/perf_publish.pyto write:
perf/index.htmlperf/index.jsonperf/refs/main/latest.jsonperf/refs/pre-release/latest.jsonperf/branches/<branch-slug>/latest.jsonperf/branches/<branch-slug>/index.jsonperf/branches/<branch-slug>/history/<sha>.json- Added
.github/workflows/perf_publish.yml, gated byROGUE_ENABLE_PERF_PUBLISH == 'true'.- Updated
.github/workflows/rogue_ci.ymlandscripts/ci_perf_summary.pyso the perf summary compares the current run against:
- the latest published result for the same branch
- the latest
mainbaseline- the latest
pre-releasebaseline- Added stale branch cleanup so published branch directories are removed when a later publish sees that the branch is no longer active or has been merged into
mainorpre-release.- Added focused tests in
tests/utilities/test_perf_tools.py.- Added repo-local planning/progress notes in
docs/plans/.Rollout notes:
- merge with
ROGUE_ENABLE_PERF_PUBLISHunset orfalse- enable the variable only when ready to validate live GitHub publication
- confirm first writes into
gh-pages/perf/and inspect the generated dashboard
Minor Release v6.10.0
Pull Requests Since v6.9.0
Unlabeled
- #1162 - Add native C++ ctest suite
- #1172 - Add floating point variable types: Float16, Float8, BFloat16, TensorFloat32, Float6, Float4 (ESROGUE-730)
- #1164 - Add versioned release and pre-release doc publishing workflows
- #1173 - Add SW batcher (CombinerV1/V2) for ESROGUE-516
- #1174 - Add SrpV3Emulation module for software-only SRPv3 CI testing (ESROGUE-493)
- #1166 - Fix silent fixed-point overflow (ESROGUE-735)
- #1168 - fix(memory): prevent false verify failures under concurrent access (ESROGUE-733)
- #1167 - Catch GeneralError during init read/write in start() (ESROGUE-734)
- #1176 - test: harden UDP packetizer integration test against flakiness
- #1171 - Add memBase validation for devices with remote variables (ESROGUE-732)
- #1169 - Fix Variable.set/get/post rejecting numpy integer index types (ESROGUE-724)
- #1165 - Add path to support Qt6 in the future via qtpy abstraction layer (ESROGUE-688)
- #1170 - Fix unpicklable Boost.Python exceptions crashing ZMQ server (ESROGUE-723)
- #1177 - fix: modernize super() calls in AxiStreamDmaMon
Pull Request Details
Add native C++ ctest suite
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Apr 13 13:45:10 2026 -0700 |
| Pull: | #1162 (8686 additions, 159 deletions, 30 files changed) |
| Branch: | slaclab/cpp-tests |
| Issues: | #1162 |
Notes:
Description
This branch adds the first native C++ regression suite under
tests/cpp/and wires it into the main CMake/CTest flow. The new coverage stays intentionally narrow and fast. It implements deterministic native tests for version helpers, memory bit helpers, stream frame/pool behavior, and stream iterator behavior, plus a Python-enabled API smoke test managed by CTest.This change also replaces the old standalone
tests/api_testsample executable with a CTest-managed smoke test, updates the test documentation to describe how the native suite is built and run from the standardbuild/tree, and updates CI so the native test labels run as part of the existing build jobs.Details
The native test system is added behind
ROGUE_BUILD_TESTSin the top-level CMake build and uses an in-tree single-header doctest-compatible harness plus a shared support target so individual test files stay focused on behavior. The suite is organized undertests/cpp/by subsystem and uses CTest labels (cpp,cpp-core,no-python,requires-python,smoke) to keep local runs and CI selection predictable.Two product bugs were exposed while building the deterministic native coverage and are fixed here:
src/rogue/interfaces/memory/Master.cpp
ThecopyBits,setBits, andanyBitshelpers all use ado { ... } while (...)structure after initializingrem = size. Whensize == 0, the old code still executed the loop body once before checking termination. That made zero-length operations unsafe: a no-op request could still calculate masks, read source bits, inspect destination bits, or write into the destination buffer even though no bits were requested. The fix adds an immediate zero-length return at the top of each helper, preserving the expected semantics:copyBitsandsetBitsbecome true no-ops, andanyBitsreturnsfalsewithout touching memory.
src/rogue/interfaces/stream/Pool.cpp
The pool destructor previously freeddataQ_.front()insidewhile (!dataQ_.empty())but never removed the front element from the queue. In practice that means the destructor repeatedly frees the same pointer while the queue never advances, which can lead to double-free behavior or an infinite drain loop during teardown. The fix pops the queue entry after eachfree()so the destructor actually walks and releases every pooled allocation exactly once.
Add versioned release and pre-release doc publishing workflows
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Apr 13 15:51:39 2026 -0700 |
| Pull: | #1164 (1397 additions, 24 deletions, 12 files changed) |
| Branch: | slaclab/doc-hist |
| Issues: | #1164 |
Notes:
Description
Add versioned documentation publishing on GitHub Pages so release docs can be retained per tag, expose a
latestalias for the newest release, and publish development docs frompre-release.Details
This change:
- splits docs publishing out of the main CI workflow into dedicated release and pre-release workflows
- adds a docs publishing helper script that writes versioned docs trees,
versions.json, a versions index page, and thelatestalias- adds a docs version selector and version-status banners to the Sphinx UI
- adds repo-local implementation and rollout planning documents under
docs/plans/Related
- release staging workflow supports manual validation under
/staging-docs/before production release publishing is exercised
Add path to support Qt6 in the future via qtpy abstraction layer (ESROGUE-688)
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Apr 8 10:44:30 2026 -0700 |
| Pull: | #1165 (14 additions, 12 deletions, 4 files changed) |
| Branch: | slaclab/ESROGUE-688 |
| Jira: | https://jira.slac.stanford.edu/issues/ESROGUE-688 |
Notes:
Summary
- Replace direct PyQt5 imports with qtpy in
rogue_plugin.pyandtime_plotter.py, matching PyDM's own Qt backend abstraction- Replace deprecated
QFontMetrics.width()withhorizontalAdvance()for Qt6 compatibility- Add
qtpy>=2.0andpyqtgraph>=0.13toconda.yml; addqtpytopip_requirements.txtUsers can now choose their Qt backend (PyQt5 or PySide6) via the
QT_APIenvironment variable. Existing PyQt5 users see zero behavior change since qtpy defaults to PyQt5 whenQT_APIis not set.Currently, PyDM has limited support for PyQt5 and PySide6, and does not yet support PyQt6. This will allow users to easily migrate to PyQt6 once PyDM adds support for it.
Test plan
- CI passes on ESROGUE-688 branch (all 4 jobs green)
grep -rn "PyQt5\|pyqtSlot" python/ tests/ --include="*.py"returns zero matches- flake8 clean on
python/andtests/- Full test suite passes under PyQt5 backend
- Full test suite passes under PySide6 backend
JIRA: ESROGUE-688
Fix silent fixed-point overflow (ESROGUE-735)
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Apr 8 10:28:09 2026 -0700 |
| Pull: | #1166 (375 additions, 20 deletions, 9 files changed) |
| Branch: | slaclab/ESROGUE-735 |
| Issues: | #1166 |
| Jira: | https://jira.slac.stanford.edu/issues/ESROGUE-735 |
Notes:
Summary
- Fixed-point variables (
Fixed/UFixed) now raise aGeneralErrorwhen set to a value outside the representable range, instead of silently clipping or storing an incorrect value- Added
minValue()/maxValue()toFixedandUFixedPython model classes so the existing C++ range check inBlock::setFixed()is activated- Replaced the silent positive-edge-case clipping (
fPoint -= 1) in C++ with an explicit overflow check that throws with the variable name, attempted value, and valid rangeTest plan
- Existing 103 core tests pass
- New
test_fixed_point_overflow_raises_errorcovers: positive overflow, negative overflow, unsigned overflow, negative-into-unsigned, and boundary values- Verified with
Fixed(16, 14)(the etaQ/etaI register scenario, range +-2.0) that overflow now produces a clear error message
Catch GeneralError during init read/write in start() (ESROGUE-734)
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Apr 13 12:49:44 2026 -0700 |
| Pull: | #1167 (211 additions, 2 deletions, 2 files changed) |
| Branch: | slaclab/ESROGUE-734 |
| Jira: | https://jira.slac.stanford.edu/issues/ESROGUE-734 |
Notes:
Summary
- Wraps
self._read()andself._write()calls inRoot.start()withtry/except rogue.GeneralError- A transaction timeout during initial read/write (e.g. PCIe bus contention when starting multiple SMuRF carriers simultaneously) previously propagated as an unhandled
GeneralErrorand crashedRoot.start()- The fix catches the exception in
start()and logs it viapr.logException(), allowing startup to continue_read()and_write()themselves still raiserogue.GeneralErroron timeout — only thestart()call site swallows itTest plan
- 4 new integration tests in
tests/integration/test_init_read_timeout_integration.pytest_init_read_timeout_does_not_crash— root survives timeout during init readtest_read_raises_on_timeout—_read()raisesrogue.GeneralErroron timeout (callers outsidestart()still see the exception)test_init_read_succeeds_without_timeout— sanity check for normal operationtest_concurrent_root_start_with_timeouts— 6 roots start simultaneously, 2 with timeouts, all succeed- Existing 184 tests pass with no regressions
- flake8 clean
fix(memory): prevent false verify failures under concurrent access (ESROGUE-733)
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Apr 13 09:49:05 2026 -0700 |
| Pull: | #1168 (259 additions, 2 deletions, 3 files changed) |
| Branch: | slaclab/ESROGUE-733 |
| Jira: | https://jira.slac.stanford.edu/issues/ESROGUE-733 |
Notes:
Summary
- Fix race condition in
Block::checkTransaction()where verify comparison used liveblockData_instead of the data actually written to hardware- When two variables share a block, a concurrent
set()on one variable could modifyblockData_between the write and verify check, causing spurious verify errors- Add
expectedData_buffer t...
Minor Release v6.9.0
Pull Requests Since v6.8.5
Unlabeled
- #1139 - Add many tests and fix bugs discovered by those tests.
- #1132 - Overhaul logging infrastructure and documentation
- #1161 - Add epicsV7 protocol using pythonSoftIOC (softioc)
- #1159 - Add EPICS V4 RPC test coverage and documentation
- #1160 - .planning/ removal
- #1152 - Fix PyDM debug_tree name corruption after long ZMQ transactions
- #1142 - Fix RunControl, Process, and UART worker shutdown bugs
- #1153 - Add system log record filtering to RootLogHandler.
- #1151 - Fix PyDM Plotter widget memory leak on plot refresh
- #1156 - Optimize GitHub Actions environment setup
- #1136 - Add direct PyDM display launch API
- #1150 - Add LocalVariable typeCheck flag and disable it for DataReceiver.Data
- #1163 - Add EPICS V7 Python API docs pages
- #1144 - Fix variable array write semantics and VariableWait state handling
- #1149 - Fix zip-directory YAML load ordering in Root.loadYaml
- #1148 - Fix version discovery for non-release Git tags
- #1143 - Fix Int conversions and LocalBlock in-place operators
- #1145 - Fix pack=True collisions in Device.addRemoteVariables
- #1141 - Fix FileReader config parsing and StreamReader IsOpen wrapper
- #1146 - Fix SqlLogger syslog decoding for VariableValue payloads
- #1147 - Fix malformed child sections and prologue loss in CPSW export
Pull Request Details
Overhaul logging infrastructure and documentation
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 30 15:03:06 2026 -0700 |
| Pull: | #1132 (1909 additions, 494 deletions, 80 files changed) |
| Branch: | slaclab/logging-infra-explore |
| Issues: | #1132 |
Notes:
Summary
This PR expands the logging work on top oforigin/pre-releasein two main areas:
- It makes Rogue C++ logger configuration dynamic, so
rogue.Logging.setFilter(...)androgue.Logging.setLevel(...)now update existing logger instances instead of only affecting loggers created afterward.- It adds optional forwarding of Rogue C++ log records into Python
logging, with metadata preserved so mixed Rogue/PyRogue applications can use a single logging path.The branch also updates a broad set of log messages, adds helper APIs for logger naming and level control from Python, adds tests for the new behavior, and refreshes the docs to match the new semantics.
Implementation Details
Dynamic updates for existing Rogue logger instances
Previously, Rogue C++ loggers effectively snapshot their level at construction time, so changing the global level or adding a prefix filter later did not reliably affect already-created objects.This PR changes that behavior in include/rogue/Logging.h and src/rogue/Logging.cpp:
Loggingnow tracks active logger instances in a staticloggers_list.- Each logger stores its level in
std::atomic<uint32_t> level_instead of a plain integer.- A new internal helper,
updateLevelLocked(), recomputes the effective level from the current global level plus prefix filters.setLevel(...)now updatesgblLevel_and immediately re-applies levels to all active loggers.setFilter(...)now normalizes the filter name, appends it to the filter list, and immediately re-applies levels to all active loggers.- Logger names are normalized through
normalizeName(...), so Python-facing and Rogue-facing logger/filter naming stays consistent.The practical result is that changing logging configuration after object construction now works for existing C++-backed Rogue objects, which is why the docs were updated to stop requiring “enable before construction” except when users specifically want constructor/startup messages.
Optional Rogue C++ -> Python log forwarding
This PR also adds an opt-in bridge from Rogue C++ logging into Pythonlogging.Core implementation in include/rogue/Logging.h and src/rogue/Logging.cpp:
- Adds
setForwardPython(...)/forwardPython().- Adds
setEmitStdout(...)/emitStdout()so native stdout emission can be disabled independently.intLog(...)now optionally:
- emits to stdout via the native sink, and/or
- acquires the GIL and forwards a Python
LogRecordtologging.getLogger(name_).handle(...).- Forwarded records carry extra metadata fields:
rogue_cpprogue_tidrogue_pidrogue_loggerrogue_timestamprogue_componentThis forwarding is then surfaced in PyRogue:
- python/pyrogue/_Root.py adds
unifyLogssupport onRoot, wires it intosetUnifiedLogging(True), and copies the forwarded metadata intoRoot.SystemLog.- python/pyrogue/pydm/widgets/system_log.py is updated to display/use the richer forwarded records.
- The branch also adds/extends helper APIs in python/pyrogue/_Node.py, including
logName(...),setLogLevel(...),classLogName(), andsetClassLogLevel(...), so Python code can work with the normalized logger naming model more easily.Other notable changes
- Adds coverage in tests/test_logging.py for the new logging behavior.
- Refactors many Python and C++ log statements to use parameterized formatting for consistency and to avoid eager string formatting.
- Updates docs across logging, transport, stream, memory, hardware, PRBS, file I/O, and migration pages to reflect:
- unified logging as the preferred mixed Python/C++ path,
- dynamic logger reconfiguration after construction,
- common logger names and patterns,
- forwarded C++ metadata in
SystemLog.User-facing behavior changes
rogue.Logging.setFilter(...)androgue.Logging.setLevel(...)now affect existing active Rogue loggers.- Mixed PyRogue applications can opt into a unified logging path where Rogue C++ logs appear in Python logging handlers and
Root.SystemLog.- Docs now clarify that logging can be enabled before or after construction; enabling early is only necessary when users want constructor/startup messages.
Testing
- Added logging-focused coverage in tests/test_logging.py.
Suggested reviewer focus
- Correctness of logger-level propagation in src/rogue/Logging.cpp
- Python forwarding behavior and metadata handling in src/rogue/Logging.cpp and python/pyrogue/_Root.py
- Backward-compatibility of the updated docs and helper APIs in python/pyrogue/_Node.py
Add direct PyDM display launch API
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 23 11:40:48 2026 -0700 |
| Pull: | #1136 (92 additions, 12 deletions, 4 files changed) |
| Branch: | slaclab/pydm-launch-api |
Notes:
Description
This branch improves the Rogue PyDM launch API so custom Python top-level displays can be launched directly, without routing users through the file-basedui=path.Previously, custom Python PyDM displays had to be exposed as a filesystem path and passed through
ui=..., even when the user already had apydm.Displaysubclass in normal Python code. That worked, but it exposed a PyDM loader detail in Rogue’s public API.This branch adds a cleaner Rogue-facing launch path.
What changed:
pyrogue.pydm.runPyDM(...)now accepts:
display=<Display subclass>display_factory=<callable returning Display>ui,display, anddisplay_factoryare mutually exclusive- The implementation uses the PyDM main window’s native object path:
- create the
PyDMApplication- construct the
Display- install it directly into the main window
- The existing
ui=path remains supported for:
- Qt Designer
.uifiles- legacy file-based Python display loading
Additional update:
python -m pyrogue timeplotnow uses the new object-based path directly withdisplay=TimePlotTopDocs updated:
docs/src/pydm/starting_gui.rstdocs/src/pydm/rogue_widgets.rstThe docs now:
- show the recommended
display=MyToppattern- show
display_factory=for constructor customization- keep
ui=documented as the legacy/file-based pathWhy:
- makes the PyDM launch API feel like normal Python
- avoids forcing users to think in terms of Python file paths
- keeps backward compatibility
- gives Rogue a cleaner public API while still working with PyDM’s existing infrastructure
Add many tests and fix bugs discovered by those tests.
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Wed Apr 1 12:17:35 2026 -0700 |
| Pull: | #1139 (6720 additions, 1400 deletions, 79 files changed) |
| Branch: | slaclab/add-tests |
| Issues: | #1139 |
Notes:
Summary
This branch is a substantial Python-side test expansion, focused on raising regression coverage across the core PyRogue tree/runtime APIs, cleaning up the test suite structure, and adding higher-value end-to-end interface/integration coverage.
In addition to the original core coverage push, the branch now also:
- reorganizes
tests/by behavior and execution style- adds live
VirtualClient/SimpleClientoverZmqServerintegration coverage- converts several socket-backed tests away from fixed ports
- splits benchmark-style workloads into `tests/per...
Patch Release v6.8.5
Pull Requests Since v6.8.4
Unlabeled
- #1131 - Revamp Rogue documentation structure, narrative guides, and built-in module coverage
- #1138 - Documentation - Reorganize built-in modules and align tree/interface docs
- #1134 - Add optional readiness checks to memory TcpClient
- #1133 - Stabilize timing-sensitive tests
- #1135 - Fix UdpRssiPack startup race in negotiated RX buffer setup
- #1130 - Update GitHub Actions for macos workflow to fix warnings
Pull Request Details
Update GitHub Actions for macos workflow to fix warnings
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Tue Mar 10 13:09:30 2026 -0700 |
| Pull: | #1130 (17 additions, 4 deletions, 2 files changed) |
| Branch: | slaclab/fix-macos-arm64-conda-warnings |
Notes:
Description
CI was throwing some warnings related to macos builds. These are now fixed.
Revamp Rogue documentation structure, narrative guides, and built-in module coverage
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 16 11:56:52 2026 -0700 |
| Pull: | #1131 (15586 additions, 6354 deletions, 457 files changed) |
| Branch: | slaclab/doc-update-6 |
| Issues: | #1131 |
Notes:
Summary
This branch is a large documentation rework that reorganizes Rogue around clearer top-level concepts, replaces the older interface-driven structure with better narrative sections, expands practical user guidance across PyRogue, stream, memory, built-in modules, and protocols, and significantly improves the generated API reference experience.It also moves a large amount of content into new locations, rewrites many thin or outdated pages into real narrative documentation, refreshes navigation so the docs behave more like a coherent manual instead of a collection of disconnected reference stubs, and adds new docs tooling for generated API pages and local source-code browsing.
What changed
Documentation architecture
- Established top-level sections and reduced legacy navigation clutter
- Reworked the docs entry point and sidebar organization
- Reframed the docs around user-facing concepts instead of older implementation-oriented structure
Top-level documentation structure
The docs now center on user-facing concepts instead of the oldinterfaces/-centric layout:
IntroductionInstalling & Compiling RoguePyRogue TreeStream InterfaceMemory InterfaceBuilt-in ModulesLogging In RogueUsing the PyDM GuiTutorialsCookbookMigration NotesAPI ReferenceEarlier quick-start material was folded into the installation/tutorial flow instead of remaining a standalone primary section.
Core narrative sections
- Reorganized and expanded
pyrogue_treeinto clearer core concepts such as root, device, variable, command, block, model, poll queue, and YAML configuration- Reworked
stream_interfaceinto a coherent narrative section covering connecting, sending, receiving, frame model, TCP bridge, and built-in helpers like FIFO, Filter, and RateDrop- Reworked
memory_interfaceinto clearer conceptual docs for connecting, master/slave behavior, hub usage, transactions, and TCP bridging- Added stronger lifecycle, bulk-operation, transport, and integration guidance across these areas
- Added practical Python and C++ examples throughout
Built-in modules and protocol coverage
- Consolidated
hardware,protocols, andutilitiesunderbuilt_in_modules- Expanded documentation for DMA wrappers, raw memory mapping, OS memory bridge, SQL, version helpers, GPIB, PRBS, file I/O, compression, HLS, and simulation helpers such as
Pgp2bSimandMemEmulate- Expanded and cleaned up protocol sections including UDP, RSSI, SRP, Packetizer, Batcher, EPICS V4, Xilinx/XVC, UART, network wrappers, and GPIB
- These pages now include clearer conceptual overviews, stronger integration guidance, code-backed examples, lifecycle notes, and better cross-links
API reference improvements
- Added conceptual links from API pages back to canonical narrative docs
- Regrouped Python API docs around actual package structure and user-facing topics
- Cleaned up many C++ and Python API wrapper pages to better reflect the new docs structure
- Standardized backlink language around
Related Topics- Expanded missing Python and C++ API coverage for a number of Rogue classes and bindings
- Added generated Boost.Python API documentation support for binding-heavy areas
Generated API tooling and source links
This branch now includes substantial docs tooling work in addition to content rewrites:
- Added custom Sphinx extensions for Boost.Python API generation/rendering
- Fixed the custom Boost.Python directive for Sphinx 8
- Added local Doxygen-backed source links for C++ API docs
- Enabled Doxygen source browsing and
.cppindexing so C++ API entries can link to declarations and implementations- Added a docs-only Doxygen input filter to normalize selected
.cppalias spellings during docs generation- Added a first-pass
Binding sourcelink for Boost.Python-generated API pages so wrapper.cppsources can be previewed in built docsIn practice this means:
- C++ API entries can show
[header]and, where available,[impl]- Boost.Python-generated pages can show a
Binding sourcelink- These links target local generated Doxygen HTML, not GitHub
Navigation behavior
- API sections now expand deeply in the sidebar so nested namespaces/packages are actually navigable
- Non-API sections stay shallower so the general docs do not become fully exploded
- API page-body toctrees remain shallow for readability
Related Topicsremains visible in page content without polluting API sidebar navigationTutorials, cookbook, and logging
- Expanded tutorials, cookbook content, and supplemental getting-started guidance
- Added more practical examples for advanced stream patterns, PyRogue devices/variables, system integration, and device workflow
- Reworked logging documentation substantially and added logger guidance across many module pages
Content migration
This branch performs the bulk of the documentation migration away from older locations such as:
docs/src/interfaces/*- older
protocols/*,hardware/*, andutilities/*layouts- fragmented older PyRogue structural layouts
Legacy material was moved, merged, rewritten, or deleted depending on whether it still served a useful purpose.
Suggested review focus
Because of the size, the most effective review path is:
- Top-level navigation and information architecture
pyrogue_tree,stream_interface, andmemory_interfacebuilt_in_modules- protocol sections and tutorial/cookbook additions
- API reference structure, generated Boost.Python pages, and source-link behavior
Stabilize timing-sensitive tests
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 16 09:18:31 2026 -0700 |
| Pull: | #1133 (44 additions, 13 deletions, 2 files changed) |
| Branch: | slaclab/test-sync-waits |
Notes:
Description
This branch replaces fixed synchronization sleeps with bounded waits on real completion conditions in a few timing-sensitive tests.Changes:
tests/test_udpPacketizer.py
- wait for frame drain instead of sleeping for one second
tests/test_epics.py
- wait for PV readiness and propagated values instead of fixed sleeps
This should make the tests less sensitive to host timing and transport latency, and gives better timeout failures when something does stall.
Note:
tests/test_enum.pystill contains a static sleep path elsewhere in the broader test/setup flow that should be cleaned up later.
Add optional readiness checks to memory TcpClient
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 16 12:23:36 2026 -0700 |
| Pull: | #1134 (218 additions, 50 deletions, 9 files changed) |
| Branch: | slaclab/tcpclient-wait-ready |
| Issues: | #1134 |
Notes:
Description
This branch adds an explicit readiness-check capability torogue.interfaces.memory.TcpClientand updates a few timing-sensitive tests to use it.The main change is a lightweight built-in bridge probe between
memory.TcpClientandmemory.TcpServer. This allows a client to verify that the TCP memory request/response path is actually usable, rather than relying on fixed sleeps or local socket-connect assumptions.What changed:
- Added an internal memory bridge probe transaction type:
rim::TcpBridgeProbe- Updated
memory.TcpServerto recognize and answer that probe locally- Added
memory.TcpClient.waitReady(timeout, period)- Added
waitReadyas an optionalTcpClientconstructor flag
TcpClient(addr, port, waitReady=False)- when
waitReady=True, managed_start()blocks on bridge readiness- Kept the default behavior backward-compatible
- if
waitReadyis not enabled, startup behavior is unchangedTests updated:
tests/test_enum.pytests/test_epics.pyThese now use
TcpClient(..., waitReady=True)instead of fixed startup sleeps or external readiness wrappers.Docs updated:
docs/src/pyrogue_tree/node/device/index.rstImportant compatibility note:
- Th...
Patch Release v6.8.4
Pull Requests Since v6.8.3
Enhancement
Documentation
Unlabeled
- #1126 - Docs/CI Refresh: Introduction Landing Page, Tutorial Reorg, API Reference Restructure
- #1125 - Update windows.rst for Windows11 + WSLg
- #1129 - Conda Build Release Script Updates
- #1128 - bug fix for PRBS module for high bandwidth rates (>8Gb/s)
- #1121 - Fix Python 3.12/3.13 type-annotation crash in TimePlotter legend row
Pull Request Details
Update conf.py
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Mar 2 11:08:34 2026 -0800 |
| Pull: | #1119 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/ruck314-patch-1 |
| Labels: | documentation |
Notes:
Description
- Fixed the copyright year
Fix Python 3.12/3.13 type-annotation crash in TimePlotter legend row
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Mon Mar 2 10:17:52 2026 -0800 |
| Pull: | #1121 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/issue-1120 |
| Issues: | #1120 |
Notes:
Fix for issue #1120
Description
This change fixes a runtime
TypeErrorwhen launching the PyRogue GUI on Python 3.12/3.13:
TypeError: unsupported operand type(s) for |: 'str' and 'NoneType'The issue was caused by a quoted forward reference combined with PEP 604 union syntax in
LegendRow.__init__:Before: main:
"TimePlotter" | None = None
After: main:TimePlotter | None = NoneWhy this works
On Python < 3.14, a quoted type name in this context is treated as a string at runtime, so "Type" | None attempts a string bitwise-or and fails. Using the actual symbol avoids that runtime evaluation error.
Allow rogue builds on macOS arm64
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Wed Mar 4 14:48:18 2026 -0800 |
| Pull: | #1123 (257 additions, 115 deletions, 15 files changed) |
| Branch: | slaclab/mac-build |
| Labels: | enhancement, documentation |
Notes:
Summary
This PR adds native macOS arm64 build/install support for Rogue using Conda/Miniforge, while keeping Linux workflows intact.
It also fixes packaging and formatting issues found during macOS validation.What Changed
Build system and platform support
- Added explicit macOS architecture guard: only
arm64is supported.- Fixed macOS shared library handling:
rogue-core-sharednow uses.dylibon macOS.- Added macOS runtime library path support in setup scripts:
DYLD_LIBRARY_PATHexported insetup_rogue.sh/.csh/.fish.- Improved ZeroMQ fallback lookup to include
DYLD_LIBRARY_PATHon macOS.- Avoided linking
rton Apple static builds.- Added CMake policy handling for newer CMake versions:
CMP0144set toNEWCMP0167set toOLD- Added
Boost_ROOThint (in addition toBOOST_ROOT) for conda/miniforge environments.Dependency environment
- Updated
conda.ymlto be cross-platform:
- replaced
gcc_linux-64/gxx_linux-64withc-compiler/cxx-compiler.- Updated Qt dependency pin to a modern compatible range:
pyqt>=5.15.Python packaging/install fix
- Fixed
make installfailure from invalid version strings when working tree is dirty.- Reworked version normalization in
templates/setup.py.into produce PEP 440-compliant versions, including:
vX.Y.Z-dirtyvX.Y.Z-N-g<sha>vX.Y.Z-N-g<sha>-dirty.CI updates
- Add macos-15 build to github actions CI pipeline.
- Added/expanded dedicated
macos_arm64_build_testpath.- macOS job now runs
pytest(excluding separateapi_testflow on macOS).- Added pip dependency install step in macOS workflow.
pip_requirements.txtnow uses environment marker forhwcounter:
hwcounter; platform_system == "Linux" and platform_machine == "x86_64".Test portability improvements
- Refactored
tests/test_rate.py:
- table-driven/cleaner benchmark structure
- supports optional
hwcounter- cross-platform fallback timing based on
perf_counter_ns- clearer printed output with explicit units
- restored/retained tuned cycle thresholds where
hwcounteris available.Portability/format-string fixes
- Replaced non-portable printf specifiers in Xilinx protocol code with fixed-width-safe formatting (
PRIu64) in:
XvcConnection.cppJtagDriver.cpp.Documentation updates
- Updated install docs to reflect current support:
- Native source build supported on Linux + macOS arm64.
- Windows guidance remains Docker/WSL.
- Added macOS-specific Miniforge build prerequisites and commands:
xcode-select --install- macOS Miniforge installer path
- cross-platform build command examples.
Repo hygiene
- Added
.vscode/to.gitignoreto avoid committing local editor settings.
Update windows.rst for Windows11 + WSLg
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Mar 4 10:35:30 2026 -0800 |
| Pull: | #1125 (25 additions, 14 deletions, 1 files changed) |
| Branch: | slaclab/docs-windows-update |
Notes:
Description
- Old instructions were obsolete and referring to old windows 10 material
- This modernizes it for latest Windows 11 features
Docs/CI Refresh: Introduction Landing Page, Tutorial Reorg, API Reference Restructure
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Wed Mar 4 15:10:10 2026 -0800 |
| Pull: | #1126 (4296 additions, 890 deletions, 185 files changed) |
| Branch: | slaclab/doc-update-5 |
Notes:
Summary
This PR updates Rogue docs and CI/tooling relative to
pre-release, with a focus on:
- making Introduction the docs landing page
- restructuring tutorials into clearer top-level onboarding sections
- improving API docs organization and cross-linking
- making docs builds more deterministic (
cleanbefore build)Major Changes
1. Documentation landing/navigation overhaul
- Set Sphinx root to
introduction/indexindocs/src/conf.pyand removed legacydocs/src/index.rst.- Expanded/cleaned Introduction content and nav behavior.
- Added
docs/src/documentation_index.rst(Table of Contents) and adjusted left-nav ordering (including Introduction label and Migration -> Table of Contents -> API).- Resolved toctree recursion from intro/TOC cross-linking.
2. Tutorial restructuring
- Moved tutorial roots to top-level docs paths:
docs/src/tutorials/starting->docs/src/getting_starteddocs/src/tutorials/complex->docs/src/advanced_examples- Updated toctrees/references to new paths and simplified getting-started flow (root -> device -> full example).
- Moved
osmemmasterout of getting-started todocs/src/interfaces/pyrogue/osmemmaster.rst.3. API docs organization and references
- Added/expanded Python API reference pages under
docs/src/api/python/*and a centraldocs/src/api/index.rst.- Reorganized C++ API docs into
docs/src/api/cpp/*with broad path cleanup/moves.- Updated many interface/protocol/utility pages to point to generated API docs.
4. Docs build reliability + config updates
- Standardized docs builds to clean-first (
make clean html) across local task, Cursor command, and CI docs generation.- Updated
docs/Doxyfile(includingPAPER_TYPE = a4) and related Doxygen config modernization.- Added missing Sphinx extensions to
conda.yml(sphinx-autodoc-typehints,sphinx-copybutton,sphinxcontrib-napoleon).- Intend that the conda env created by
conda.ymlcan build the documentation.7. Other code changes
- Updated
include/rogue/interfaces/memory/Variable.hmethod signatures for clearer parameter naming.
Variable.h Signature Clarity
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Wed Mar 4 12:59:45 2026 -0800 |
| Pull: | #1127 (16 additions, 16 deletions, 2 files changed) |
| Branch: | slaclab/variable-h-signature-clarity |
| Labels: | enhancement |
Notes:
Summary
This PR isolates the
Variable.hAPI signature readability cleanup into a standalone change for easier review and merge sequencing.What Changed
Updated method declarations in:
include/rogue/interfaces/memory/Variable.hThe change names previously unnamed first parameters in several method signatures, for example:
setByteArray(uint8_t* value, ...)getByteArray(uint8_t* value, ...)setUInt(uint64_t& value, ...)setInt(int64_t& value, ...)setBool(bool& value, ...)setString(const std::string& value, ...)getValue(std::string& valueRet, ...)setFloat(float& value, ...)setDouble(double& value, ...)setFixed(double& value, ...)Source updates
src/rogue/interfaces/memory/Variable.cpp- Matched parameter names with the header for:
setByteArray(uint8_t* value, ...)getByteArray(uint8_t* value, ...)getValue(std::string& valueRet, ...)Why
- Improves readability of the public C++ interface.
- Makes signatures clearer in headers/docs/IDE hovers.
- No intended behavioral/runtime change.
Scope / Risk
- Header declaration cleanup only (parameter naming).
- No logic changes.
bug fix for PRBS module for high bandwidth rates (>8Gb/s)
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Mar 4 13:07:29 2026 -0800 |
| Pull: | #1128 (12 additions, 12... |
Patch Release v6.8.3
Pull Requests Since v6.8.2
Documentation
- #1117 - Add Protocol Documentation and Update Rogue C++ API Doxygen
Unlabeled
- #1116 - Enhance PyRogue docs and typing across utilities and PyDM
- #1113 - adding AxiStream Batcher Protocol Version 2
- #1118 - Revert functionWrapper back to eval() implementation
Pull Request Details
adding AxiStream Batcher Protocol Version 2
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Feb 23 13:39:56 2026 -0800 |
| Pull: | #1113 (688 additions, 3 deletions, 8 files changed) |
| Branch: | slaclab/AxiStreamBatcherV2 |
Notes:
Description
- Version 2 of the protocol is nearly identical to Version 1, with the exception of the zero padding previously used in the “Super-Frame Header,” “Sub-Frame Payload,” and “Sub-Frame Tail.”
- By removing this zero padding, the AXI stream frame on the CPU side no longer needs to account for differences in zero-padding between firmware versions that use different AXI stream widths. This simplifies compatibility, particularly for applications that choose not to use the Rogue unbatcher API to split sub-frames.
- In addition, this reduces the overall frame size to support faster frame rates
- https://confluence.slac.stanford.edu/x/L2VlK
- Pull Request for FW support: slaclab/surf#1383
Enhance PyRogue docs and typing across utilities and PyDM
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Wed Feb 25 13:59:32 2026 -0800 |
| Pull: | #1116 (1373 additions, 368 deletions, 37 files changed) |
| Branch: | slaclab/doc-update-3 |
Notes:
Description
- Add and reorganize docs for file I/O format and HLS register parser utilities:
- add canonical Rogue file format page and cross-links from reader/writer docs
- add HLS utility docs for
pyrogue.utilities.hls._RegInterfParser(workflow, CLI usage, and function behavior)- Improve typing and docstrings in utilities modules (
cpsw,fileio,prbs, HLS parser), including clearer parameter/return docs and callback signatures.- Perform broad PyDM/UI docstring and type hint cleanup:
- strengthen type hints (including
QWidget/PyDMChannelwhere applicable)- add/complete class and method docstrings
- ensure class docstrings document
__init__parameters consistently.
Add Protocol Documentation and Update Rogue C++ API Doxygen
| Author: | Benjamin Reese bengineerd@users.noreply.github.com |
| Date: | Fri Feb 27 11:54:10 2026 -0800 |
| Pull: | #1117 (8543 additions, 2319 deletions, 128 files changed) |
| Branch: | slaclab/doc-update-4 |
| Labels: | documentation |
Notes:
Summary
This branch is a large documentation and API-reference update against
pre-release, focused on making Rogue/PyRogue docs more complete, consistent, and usable for both C++ and Python users.What Changed
1) Broad Doxygen modernization in C++ headers
- Standardized and expanded doxygen across a large set of public headers under
include/rogue/....- Added/clarified:
- class-level architecture/context
@brief/@detailsusage- method parameter/return semantics
- behavior notes for threading, queueing, timeout, and lifecycle APIs
- Improved consistency/readability and corrected many wording/signature-alignment issues.
2) Major protocol documentation expansion (
docs/src/protocols)
- RSSI
- Added substantial overview and class relationship explanations.
- Added practical usage guidance and examples.
- Clarified RFC lineage and transport stack behavior.
- SRP
- Expanded SRPv0/SRPv3 docs and class pages.
- Added usage examples and clarified transport/memory-role relationships.
- Batcher
- Added V2 support docs and class pages.
- Clarified how
Core,Splitter, andInverterfit together.- Added context on firmware batcher usage (SURF interoperability).
- Xilinx
- Added consolidated Xilinx protocol docs (XVC/JTAG driver usage and class pages).
- Network wrappers
- Replaced TODO with full
UdpRssiPackdocumentation, including Root integration and lifecycle (addInterface).3) Memory/stream interface docs updates
- Expanded memory docs (
blocks, advanced blocks, transaction docs).- Added/updated stream and utility docs for clearer behavior and usage.
- Added new Version helper docs:
docs/src/interfaces/version.rstwith Python + C++ examples.4) C++ API docs aligned with implementation
- Updated
docs/src/interfaces/cpp_api.rstto matchrogue::interfaces::api::Bspbehavior and examples.5) PyRogue tree docs expansion/reorganization
- Significant expansion/restructure of
docs/src/pyrogue_tree/...content.- Added pages for model/root/poll queue/groups/block-related topics.
- Improved command/variable/device/root documentation clarity.
Reviewer Notes
- This PR is primarily documentation quality and API-doc alignment work, but it is broad.
- Suggested review strategy:
- Protocol docs (
rssi,srp,batcher,xilinx,network)- Header doxygen consistency in
include/rogue/interfaces/*andinclude/rogue/protocols/*
Revert functionWrapper back to eval() implementation
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Fri Feb 27 12:53:03 2026 -0800 |
| Pull: | #1118 (15 additions, 38 deletions, 1 files changed) |
| Branch: | slaclab/revert-functionwrapper-0ee82ec |
Notes:
Description
The helper function
functionWrapper()was reverted back to it's previous implementation. It should not have been part of a PR that focused on documentation updates.
Patch Release v6.8.2
Pull Requests Since v6.8.1
Unlabeled
- #1112 - Documentation Update
Pull Request Details
Documentation Update
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Fri Feb 20 19:21:45 2026 -0800 |
| Pull: | #1112 (5453 additions, 4006 deletions, 71 files changed) |
| Branch: | slaclab/doc-update-tutorials |
Notes:
Description
This is round 2 of the documentation updates. The plan is to add type hints and docstrings for the core Rogue tree API.
Patch Release v6.8.1
Pull Requests Since v6.8.0
Unlabeled
- #1108 - Update Documentation, Tutorials, Docstrings, add Typehints
- #1111 - removing legacy file IO classes
- #1109 - Register Rogue PyDM plugin manually in cases where it's not loaded automatically
- #1106 - Update LICENSE.txt
Pull Request Details
Update LICENSE.txt
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Jan 5 10:51:29 2026 -0800 |
| Pull: | #1106 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/ruck314-patch-1 |
Notes:
Description
- Updating for Year 2026
Update Documentation, Tutorials, Docstrings, add Typehints
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Jan 26 13:52:42 2026 -0800 |
| Pull: | #1108 (2462 additions, 53 deletions, 54 files changed) |
| Branch: | slaclab/doc-update-tutorials |
Notes:
Description
- WIP tutorial and documentation changes
Register Rogue PyDM plugin manually in cases where it's not loaded automatically
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Jan 26 14:19:25 2026 -0800 |
| Pull: | #1109 (10 additions, 3 deletions, 2 files changed) |
| Branch: | JJL772/pr-register-rogue-plugin |
Notes:
Description
I was running into a strange issue with the Rogue conda environments on /sdf where the rogue PyDM plugin wasn't being registered despite $PYDM_DATA_PLUGINS_PATH being set correctly. Registering the plugin manually fixed the issue.
Additionally, conda environments on my Debian desktop weren't setting $PYDM_DATA_PLUGINS at all, leading to the same type of error. I think it makes sense to have fallback logic here, just in case auto-registration doesn't work.
removing legacy file IO classes
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Thu Feb 5 16:02:22 2026 -0800 |
| Pull: | #1111 (0 additions, 686 deletions, 11 files changed) |
| Branch: | slaclab/remove-LegacyFileIO |
Notes:
Description
- Removing the deprecated legacy file writer and reader
- LegacyFileWriter and LegacyFileReader
Minor Release v6.8.0
Pull Requests Since v6.7.0
Bug
- #1100 - Fix CMake configuration by removing incorrect 'PUBLIC' keyword from library list
Enhancement
- #1099 - Remove incorrect documentation
- #1097 - Update VariableWait function using an underlying class VariableWaitClass
- #1102 - Update Cmake to a cleaner approach
- #1095 - ZmqClient Messages Update
- #1103 - Update conda build meta to use older system libraries and C++
Unlabeled
- #1105 - Add bandwidth tracking and display to StreamWriter and PyDM DataWriter
- #1096 - Misc .rst updates
- #1104 - Allow setting of the SystemLog widget title at creation.
- #1101 - Fix logging handler to format strings properly
Pull Request Details
ZmqClient Messages Update
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Nov 11 12:13:03 2025 -0800 |
| Pull: | #1095 (11 additions, 11 deletions, 1 files changed) |
| Branch: | slaclab/ZmqClient-busy-msg |
| Labels: | enhancement |
Notes:
Description
Misc .rst updates
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Nov 11 12:19:51 2025 -0800 |
| Pull: | #1096 (4 additions, 3 deletions, 2 files changed) |
| Branch: | slaclab/build-rst |
Notes:
Description
- Update build.rst with misc fixes for building form source
- Update yocto.rst for v6.7.0
Update VariableWait function using an underlying class VariableWaitClass
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Tue Nov 11 16:14:58 2025 -0800 |
| Pull: | #1097 (101 additions, 54 deletions, 1 files changed) |
| Branch: | slaclab/vwait |
| Labels: | enhancement |
Notes:
This PR updates the VariableWait function to use an underlying class VariableWaitClass which enables the user to setup the test condition before doing some operation and then waiting on the update. This is useful in cases where you need to arm the wait, trigger and action and then wait for the update without worrying about a race condition between the trigger and the wait setup.
This update also allows the user to trigger on a simple update of the variables in the list by not passing a test function.
Remove incorrect documentation
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Tue Nov 11 17:06:05 2025 -0800 |
| Pull: | #1099 (5 additions, 393 deletions, 10 files changed) |
| Branch: | slaclab/doc_updates_rth |
| Labels: | enhancement |
Notes:
Remove incorrect documentation.
Fix CMake configuration by removing incorrect 'PUBLIC' keyword from library list
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Thu Nov 20 07:20:39 2025 -0800 |
| Pull: | #1100 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/cmake-config-patch |
| Labels: | bug |
Notes:
Removes PUBLIC from the list of libraries written to the CMake config.
Description
The CMake configuration currently includes the PUBLIC keyword in the list of specified libraries, which was introduced due to a typo in the build file. This improper configuration results in compilation errors when attempting to build an application against the
roguelibrary. This PR removes the erroneous PUBLIC keyword, ensuring the CMake configuration is generated correctly and resolving the build issues.JIRA
Fix logging handler to format strings properly
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Dec 9 10:02:29 2025 -0800 |
| Pull: | #1101 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/log-format |
Notes:
Description
The RootLogHandler was not formatting the log strings before capturing the message, leading to messages like this...
The fix is to use
record.getMessage(), which applies the string formatting.
Update Cmake to a cleaner approach
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Tue Dec 9 11:15:49 2025 -0800 |
| Pull: | #1102 (18 additions, 28 deletions, 1 files changed) |
| Branch: | slaclab/cmake_fix |
| Labels: | enhancement |
Notes:
This updates the cmake file to a cleaner approach. it does not yet get rid of the error related to:
set(Boost_NO_BOOST_CMAKE ON)
which is still needed to make this work
Update conda build meta to use older system libraries and C++
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Tue Dec 9 13:22:20 2025 -0800 |
| Pull: | #1103 (3 additions, 0 deletions, 1 files changed) |
| Branch: | slaclab/rocky8 |
| Labels: | enhancement |
Notes:
Update conda build meta to use older system libraries and C++.
From searching:
The correct fix is to rebuild your Anaconda package while telling the compiler to target an older version of glibc (specifically, the version on Rocky 8 or older). Rocky 8 uses glibc 2.28.
You do not need to install an older Linux distro to do this. You can use Conda's sysroot features during the build.
If you are building a custom recipe: Add the sysroot dependency to your meta.yaml file in the build section. This forces the compiler to use an older set of headers and libraries, ensuring compatibility with Rocky 8.
requirements:
build:
- {{ compiler('c') }}
- {{ compiler('cxx') }}
# Target CentOS 7 glibc (2.17) for maximum compatibility
# OR target Rocky 8 glibc (2.28) specifically
- sysroot_linux-64 2.17
Allow setting of the SystemLog widget title at creation.
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Dec 9 17:36:11 2025 -0800 |
| Pull: | #1104 (4 additions, 2 deletions, 1 files changed) |
| Branch: | slaclab/system-log-dev |
Notes:
Description
Small tweak needed for a cleaner integration into the LDMX run control gui.
Add bandwidth tracking and display to StreamWriter and PyDM DataWriter
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Dec 9 20:07:53 2025 -0800 |
| Pull: | #1105 (96 additions, 1 deletions, 5 files changed) |
| Branch: | slaclab/writer-bandwidth |
Notes:
Description
- Added rolling 1-second bandwidth accounting to StreamWriter with a new getBandwidth() (C++/Python-exposed) and reset on open/close.
- Extended DataWriter Bandwidth LocalVariable and StreamWriter wrapper to fetch it.
- Updated the PyDM DataWriter widget to show bandwidth with units alongside existing file size and frame count; adjusted layout to avoid spacing issues.
Minor Release v6.7.0
Pull Requests Since v6.6.2
Bug
- #1092 - Fix Numpy init issue which impacted linked to external libraries.
Enhancement
- #1085 - Remove the dependency on EPIC base.
- #1094 - Create linting script that can be called by the user
- #1087 - Conda CI Release Updates
- #1081 - Add warning for type changes in non-array LocalVariable values
Unlabeled
- #1089 - Remove dtype parameter from Frame.getNumpy()
- #1088 - Work around for a CI pytest randomly failing
- #1090 - delListener bug fix to allow removal from _listeners
- #1086 - updating CI test script's TCP port mapping
- #1080 - Update rogue_ci.yml
- #1093 - Update _Root.py's Time Variable Init value
- #1091 - Fix crash with segfault when attempting to log on arm32
- #1079 - Update yocto.rst
- #1082 - Update miniforge_build.rst
- #1084 - updating .gitignore
Pull Request Details
Update yocto.rst
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Thu Sep 11 13:54:22 2025 -0700 |
| Pull: | #1079 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/ruck314-patch-1 |
| Issues: | #1079 |
Notes:
Description
- Do not include rogue-dev in the Yocto images.
rogue-devappears to somehow pull along a huge amount of dependencies inflating the generated image.- Apparently this should also have been included in the images produced by the old Petalinux bold process
- but inspecting build files suggests that the setting somehow ended up ignored
- so the
rogue-devnever was in the images.
Update rogue_ci.yml
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Thu Sep 11 13:43:32 2025 -0700 |
| Pull: | #1080 (1 additions, 2 deletions, 2 files changed) |
| Branch: | slaclab/ruck314-patch-2 |
Notes:
Description
secrets.DOCKERHUB_TOKENis no longer used because publishing docker images on Github (instead of dockerhub) now
Add warning for type changes in non-array LocalVariable values
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Nov 4 08:03:44 2025 -0800 |
| Pull: | #1081 (5 additions, 0 deletions, 1 files changed) |
| Branch: | slaclab/staticType |
| Labels: | enhancement |
Notes:
Summary
This update introduces a warning when a
LocalVariableis assigned a value whose type does not match its default type. This helps prevent users from unintentionally assigning incorrect value types.Details
- Type consistency is now checked for all
LocalVariableinstances except arrays.- Arrays remain dynamic and are excluded from type checking.
- This change currently issues a warning instead of an error to allow users time to adapt.
- In a future release, this behavior will be upgraded to an error to enforce stricter type safety.
Motivation
The goal is to improve type safety and prevent subtle bugs caused by inconsistent value types while maintaining backward compatibility during the transition period.
Update miniforge_build.rst
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Sep 10 08:43:00 2025 -0700 |
| Pull: | #1082 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/ruck314-patch-3 |
Notes:
Description
- changing
maketomake -j$(nproc)for faster building
updating .gitignore
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Sep 15 15:00:27 2025 -0700 |
| Pull: | #1084 (1 additions, 0 deletions, 1 files changed) |
| Branch: | slaclab/gitignore-patch |
Notes:
Description
- Ignoring rogue.egg-info dir that can be generated with local build
$ git status On branch main Your branch is up to date with 'origin/main'. Untracked files: (use "git add <file>..." to include in what will be committed) python/rogue.egg-info/ nothing added to commit but untracked files present (use "git add" to track)
Remove the dependency on EPIC base.
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Sep 16 14:43:28 2025 -0700 |
| Pull: | #1085 (2 additions, 68 deletions, 7 files changed) |
| Branch: | slaclab/remove_epics_base |
| Labels: | enhancement |
Notes:
This PR removes rogues dependency on EPICS base.
Description
Since EPICS Base is no longer required to build Rogue, this PR removes its dependency from the CMake configuration.
updating CI test script's TCP port mapping
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Sep 16 15:23:14 2025 -0700 |
| Pull: | #1086 (4 additions, 4 deletions, 2 files changed) |
| Branch: | slaclab/pytest-patch |
Notes:
Description
test_enum.pyandtest_epics.pyandtest_streamBridge.pywere previouslly all mapped to9080- Moved
test_epics.pyto9070andtest_memory.pyto9060- Enables parallel pytest and prevents a potential conflict in CI's TCP traffic
Conda CI Release Updates
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Wed Sep 17 07:51:54 2025 -0700 |
| Pull: | #1087 (7 additions, 14 deletions, 2 files changed) |
| Branch: | slaclab/conda-numpy-v2 |
| Labels: | enhancement |
Notes:
- Moving numpy constraint from
==1.26to>= 2.0
- NumPy 1.x, including the final release in the 1.x line (NumPy 1.26.x), reaches its official End-of-Life (EOL) in September 2025
- This PR is part of rogue's NumPy migration to NumPy 2.x
Work around for a CI pytest randomly failing
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Sep 22 12:14:33 2025 -0700 |
| Pull: | #1088 (8 additions, 0 deletions, 1 files changed) |
| Branch: | slaclab/test_enum |
Notes:
Description
- https://jira.slac.stanford.edu/browse/ESROGUE-721
- It appears to be a race condition between when the TCP client/server establish the connection at start of root. Adding a 1 second time out to root.start() seems to be the work around. Not a very good solution. It would be better with the TCP server/client had something like a "getOpen" variable to poll on in root.start() for determining when the TCP links are established
Remove dtype parameter from Frame.getNumpy()
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Nov 10 08:28:03 2025 -0800 |
| Pull: | #1089 (40 additions, 34 deletions, 2 files changed) |
| Branch: | slaclab/getNumpy-fix |
Notes:
Description
The
dtypeoptional parameter was meant to conveniently get the frame pre-formatted to a specific numpy type.
But the implementation was broken and so it didn't work for anything other than the defaultuint8.Overall, there is no need for us to maintain numpy C++ code to do this conversion when you can just call
view()in python to accomplish the same thing.So
frame.getNumpy(dtype=np.uint16)now becomesframe.getNumpy().view(np.uint16).This will not break any code since the feature never worked in the first place.
delListener bug fix to allow removal from _listeners
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Mon Sep 22 11:13:36 2025 -0700 |
| Pull: | #1090 (6 additions, 2 deletions, 1 files changed) |
| Branch: | slaclab/remove-listener-patch |
Notes:
Description
- Variable class delListeners bugfix - allows deletion of listeners from _listeners
Fix crash with segfault when attempting to log on arm32
| Author: | Larry Ruckman ruckman@slac.stanford.edu |
| Date: | Tue Oct 28 07:50:03 2025 -0700 |
| Pull: | #1091 (1 additions, 1 deletions, 1 files changed) |
| Branch: | burbschat/fix_arm32_logging |
Notes:
Fix crash with segfault when attempting to use log on arm32 target.
Description
Segfault likely caused by architecture dependent types of the values passed to
printf(tv_sec,tv_usec). Now explicitly cast tolongto ensure the type matches the%lformat specifier.Details
Tested and verified to resolve the problem on a 7series Zynq CPU.
Fix Numpy init issue which impacted linked to external libraries.
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Thu Oct 30 15:19:49 2025 -0700 |
| Pull: | #1092 (64 additions, 37 deletions, 9 files changed) |
| Branch: | slaclab/numpy_init |
| Labels: | bug |
Notes:
This PR cleans up the way numpy arrays are initialized, following a proper approach and removing numpy array from the Frame.h header which may be included in external libraries.
It also fixes the naming in the unit test files to avoid a pytest warning.
Update _Root.py's Time Variable Init value
| Author: | Ryan Herbst rherbst@slac.stanford.edu |
| Date: | Mon Nov 3 20:38:03 2025 -0800 |
| Pull: | #1093 (1 additions, 1 deletions, 1 files changed) |
| Branch: | slaclab/ruck314-patch-1 |
Notes:
Description
Root.Time...
