Skip to content

Release Candidate v6.10.0#1175

Merged
ruck314 merged 146 commits into
mainfrom
pre-release
Apr 13, 2026
Merged

Release Candidate v6.10.0#1175
ruck314 merged 146 commits into
mainfrom
pre-release

Conversation

bengineerd and others added 30 commits March 31, 2026 09:42
- 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
bengineerd and others added 15 commits April 13, 2026 10:16
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)
@ruck314 ruck314 requested a review from bengineerd April 13, 2026 19:44
@ruck314 ruck314 marked this pull request as ready for review April 13, 2026 19:44
@ruck314 ruck314 merged commit aa4fcaa into main Apr 13, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants