Release Candidate v6.10.0#1175
Merged
Merged
Conversation
- Introduced `docs_pre_release.yml` for publishing pre-release documentation on pushes to the `pre-release` branch. - Added `docs_release.yml` for publishing release documentation on tag pushes and manual dispatch. - Removed inline documentation generation from CI workflow to streamline processes. - Updated documentation configuration to support version switching and improved UI elements in the documentation layout. - Implemented a new script `docs_publish.py` for managing the documentation publishing process.
- Add qtpy>=2.0 after pyqt>=5.15 (DEP-01) - Add pyqtgraph>=0.13 for PyQt6 compatibility (DEP-03) - pyqt>=5.15 pin unchanged (DEP-04)
- Replace 'from PyQt5.QtCore import pyqtSlot, Qt' with 'from qtpy.QtCore import Slot, Qt' - Replace 'from PyQt5.QtWidgets import QApplication' with 'from qtpy.QtWidgets import QApplication' - Rename four @pyqtSlot decorators to @slot at lines 210-213
- Add bare 'qtpy' entry after pydm (DEP-02) - No version specifier (consistent with other entries like pydm, matplotlib)
…time_plotter.py - Replace 'from PyQt5.QtWidgets import QSplitter' with qtpy equivalent - Remove 'from PyQt5.QtCore import Qt' (redundant; QtCore already imported) - Update QSplitter(Qt.Vertical) and QSplitter(Qt.Horizontal) to use QtCore.Qt.*
…dvance() - Replace fm.width() at DebugHolder constructor (line ~258) - Replace fm.width() at column width calculation (line ~305) - Both sites now use fm.horizontalAdvance() for Qt5/Qt6 compatibility - flake8 --count ./python/ exits 0
Fixed and UFixed models were missing minValue()/maxValue() methods, causing the C++ range check in Block::setFixed() to be skipped. Out-of-range values were silently clipped (positive overflow) or stored incorrectly (negative overflow) with no error reported. Add minValue()/maxValue() to Fixed and UFixed Python models so the existing range check fires. Replace the silent positive-edge-case clipping in C++ with an explicit overflow error that reports the variable name, attempted value, and valid range.
…E-734) Restore try/except blocks in Root._read() and Root._write() that were lost between rogue v4 and v6. Without them, a transaction timeout during initial read (e.g. PCIe bus contention when starting 6 SMuRF carriers simultaneously) propagates as an unhandled GeneralError and crashes Root.start(). The fix catches the exception, logs it, and returns False so start() can continue — matching the v4 behavior. Add integration tests exercising this corner case with a MemEmulate subclass that drops transactions to simulate bus contention.
…rify failures (ESROGUE-733) checkTransaction() compared verify read-back against live blockData_, which could be modified by a concurrent set() on another variable sharing the same block between the write and verify check. This caused spurious verify errors in multi-variable blocks under concurrent access. Add expectedData_ buffer that snapshots blockData_ at write time. checkTransaction() now compares against the snapshot instead of live data. Add regression tests exercising interleaved and threaded concurrent set scenarios.
…E-724) Cast index to native int before passing to Boost.Python C++ _set/_get methods which require exact int type match. Adds regression test exercising np.int32, np.int64, np.uint32, np.uint64, and np.intp.
When a Boost.Python.ArgumentError is raised during a ZMQ remote procedure call, pickle.dumps() fails because Boost.Python exceptions cannot be serialized. This causes the server to crash instead of returning the error to the client. Add a fallback that converts unpicklable exceptions to a standard Exception preserving the full type name and message. Add regression test for this corner case. Resolves ESROGUE-723
- Add _validateMemBase method to Device that raises DeviceError when a device has RemoteVariable children but no memBase in its ancestor chain - Call _validateMemBase from _buildBlocks after remVars list is assembled - Detect Root via type().__name__ to avoid circular import with _Root - Covers VALID-01 through VALID-04: raises for missing memBase, silent for local-only devices, silent for sub-devices inheriting memBase from parent
- Tests for RemoteVariable device without memBase raising DeviceError (TEST-01) - Tests for RemoteCommand device without memBase raising DeviceError (TEST-02) - Tests for local-only device without memBase starting successfully (TEST-03) - Tests for sub-device inheriting memBase from parent (TEST-04)
Add Float16 model type so users can declare 16-bit half-precision floating point variables with base=pr.Float16. Implements the full C++/Python stack: model ID constant, Block get/set methods with inline IEEE 754 half-float converters, Variable dispatch, Python Model classes (Float16, Float16BE), Sphinx API documentation, and comprehensive tests including boundary values, NaN/Inf, subnormals, and cache key behavior. Resolves ESROGUE-730.
Add software batcher classes that combine individual stream frames into batcher v1/v2 super-frames, enabling SW emulation of the FW batcher and CI regression testing of the unbatcher (Splitter/Inverter) classes. New classes: - CombinerV1: builds width-dependent v1 super-frames - CombinerV2: builds fixed-format v2 super-frames Both expose acceptFrame() for queuing and sendBatch() for emitting the batched super-frame. Python bindings included. Also fix a pre-existing bug in CoreV1/CoreV2::processFrame() where the frame_ member was never assigned, causing beginHeader() to segfault when called by the Inverter classes. Includes 18 pytest regression tests covering Splitter round-trip (all widths, metadata preservation, non-aligned payloads, large payloads), Inverter processing, and re-batch identity verification. Documentation added for C++ API, Python API, and built-in modules.
- Mark single-parameter CombinerV1 constructor explicit - Add missing #include <vector> to CombinerV1.cpp and CombinerV2.cpp
…RE_MESSAGE, and FAIL macros
fix: modernize super() calls in AxiStreamDmaMon
…out test Move the thread-alive assertions inside the try/finally block in test_concurrent_root_start_with_timeouts so that Root instances are always cleaned up even if a thread hangs. Add test_init_write_timeout_does_not_crash to cover the initWrite=True timeout path in Root.start().
test: harden UDP packetizer integration test against flakiness
Replace zero-initialized memory with random data to better emulate uninitialized hardware SRAM. Both read and write paths now use a shared allocatePage() helper that fills new 4K pages with random data, ensuring consistent behavior between the two paths.
Rename to clarify this is a memory emulation module, not a real hardware server endpoint. Updates class name, files, tests, docs, and all references across the codebase.
Add SrpV3Emulation module for software-only SRPv3 CI testing (ESROGUE-493)
Catch GeneralError during init read/write in start() (ESROGUE-734)
Add native C++ ctest suite
Add versioned release and pre-release doc publishing workflows
bengineerd
approved these changes
Apr 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description