- The constructor of
Session
fails when attempting to connect to a data-server on a different LabOne version. This behavior can be overridden by setting the newly added allow_version_mismatch keyword argument to True. When allow_version_mismatch=True is passed to theSession
constructor the connection to the data-server succeeds even if the version doesn't match.
- Add QHub driver
- Function
wait_for_state_change
now works with zero timeout; the node value is always checked at least once. - Improved the stability of device interface auto-detection when it is not supplied while connecting to a device.
- Adapt
write_integration_weights
function in the readout module to be callable within transactions.
- The function
enable_qccs_mode
of the HDAWG driver now accept an optional argument to select the QCCS generation. It's advised to set it to 2 (gen2) when the HDAWG is operated with PQSC together with SHF instruments, and set it to 1 (gen1) when the HDAWG is operated with PQSC together with UHFQA instruments. - Improved
CommandTable
performance whenCommandTable.active_validation
is disabled. - Added
CommandTable.is_valid()
method to check validity of the command table. - Added
py.typed
type information marker file. - Add command table property to the sequencer class to have a simple way to store them together.
- Deep gets on nodes with keywords returns an enum like the regular get.
- Fix rare failures of
wait_for_state_change
function that resulted in early timeouts. - All keywords on nodes are correctly supported, and not only the first one for each option.
- Function
wait_for_state_change
now supports strings and enums for keywords nodes. - Fix #252. ListNodes now also supports numpy integer types as index argument.
- The function
check_zsync_connection
of PQSC now raise an error if the port is in a faulty state, instead of return False.
- Revert full support of
fnmatch
wildcards and instead use the LabOne wildcard support. This means only*
symbols are supported. A*
in the middle of the path matches everything instead of a/
. A*
at the end of the path matches everything. - Fix problem of garbage collection daq sessions. The problem was caused due to using
lru caches for instance methods. The usage of lru cache has now been bypassed or
replaced with the
functools.cached_property
decorator (which is currently copied to ensure support for python 3.7). device.factory_reset
now raises an exception if the factory reset was not successful (#243
).- Fixed issue where calling a
Node
withdir()
returned duplicate values on some nodes. - Factory preset is now available for SHFSG, SHFQA, SHFQA devices (
#249
).
- Add internal trigger to SHFQA sweeper class.
- Add SHFQA / SHFQC Power Spectral Density (PSD) node and example
- Added full support for the following LabOne modules (no need to fallback to
zhinst.core
):- Impedance Module
- Precompensation Advisor Module
- Introduced new base exception class
zhinst.toolkit.exceptions.ToolkitError
, deriving fromRuntimeError
.- Changed some
RuntimeError
exceptions toToolkitError
.
- Changed some
- Added
find_zsync_worker_port()
toPQSC
device class. The function can be used to find the ID of the PQSC ZSync port connected to a given device. - Added
session
property toBaseInstrument
. This enables getting the givenSession
from the instrument. - Changed SHFQA node
qachannels/*/oscs/0/freq
value range from (-500e6 Hz, 500e6 Hz) to (-1e9 Hz, 1e9 Hz). Out-of-range values now rounds to (-1e9 Hz, 1e9 Hz). The functionality is changed to be consistent with LabOne UI. - Improved verbosity of the error message when invalid attributes of
CommandTable.header
andCommandTable.table
are used. - Fix issue with downloading waveforms from the device. This issue prevented indexes larger than 9 to be read from the device.
- Added full support for the following LabOne modules (no need to fallback to zhinst.core):
- Scope Module
- Sweeper Module
- DAQ Module
- Renamed
zhinst.toolkit.nodetree.node.WildcardResult
tozhinst.toolkit.nodetree.helpers.NodeDict
- Added
active_validation
argument toCommandTable
. By disabling it,CommandTable
does not actively validate the inputs and therefore it improves the speed for command table creation. - Adapt
awg.enable_sequencer
to check the acknowledged value instead of usingwait_for_state_change
. This makes it much more stable when used with short sequences. - Fix issue with downloading waveforms from the device. This issue prevented reading waveforms from any other than the base channel.
- Normalize the
zhinst-core
dependency version. - Update SHFQA Sweeper to expose new properties through nodes (
predicted_cycle_time
,actual_hold_off_time
,actual_settling_time
) - Tested against Python 3.11
- Fix issue that prevented correct compilation of sequences for AWG cores other than the first one.
- Embed multistate utils for the SHFQA into the node tree
- shfqa.qachannels[n].readout.multistate.qudits[m].configure(settings)
- shfqa.qachannels[n].readout.multistate.get_qudits_results()
- Added new example for the multistate discrimination (shfqa_multistate_discrimination) for the SHFQA
- Fixed issue
#181
(Wrong _device_type of awg node of UHFQA/UHFLI) which prevented the compilation of sequences. - Waveform validation moved from the
write_to_waveform_memory
intoWaveforms.validate
- Command Table
$schema
key removed from the output ofCommandTable.as_dict
function - Command Table validation changed to disabled by default
- Command Table upload check disabled when called within a transaction.
- New dependency
pyelftools
for extracting waveform information from a complied sequencer code. - Interface auto detection adapted to support
none
, which was introduced with LabOne 22.08
- For all LabOne modules forward the
execute
function from the zhinst-core in zhinst-toolkit
- Add new class
zhinst.toolkit.Sequence
that allows a more flexible use of sequences in toolkit (#141
). - Add support for session wide transactions that bundle set command from all
devices connected to the data server. (
#134
) - Add
from_existing_connection()
tozhinst.toolkit.Session
to help reusing the existing DataServer connection. - Bugfix: Nodes with nameless options don't raise an exception when their enum attribute is called (
#165
). - Bugfix: Values of enumerated nodes can now be pickled (
#129
). - Bugfix:
SHFScope
run()
andstop()
shows specified timeout value whenTimeoutError
is raised. - Bugfix: Allow capital letters in node paths. (
#173
). - Adapt toolkit to use the offline awg compiler when uploading a sequencer code to a awg node. Improves the performance a lot and also enables the uploading of a sequencer code within a transaction (Works both for AWGs and Generators).
- Add new function
compile_sequencer_code
to the awg node.
- Adapt AWG Waveform upload (
write_to_waveform_memory
) to append to existing transactions. - Make consistency validate during waveform upload optional (new flag
validate
inwrite_to_waveform_memory
). - Add
get_sequence_snippet
function tozhinst.toolkit.Waveforms
class. The function is able to generated a sequence code snippet that defines and assigns the waveforms for this object. Additional meta information like an optional name or the output configuration can be specified through a newly addedWave
class fromzhinst.toolkit.Waveforms
. - Getting a value by calling a wildcard node now returns
zhinst.toolkit.nodetree.node.WildcardResult
-
Commandtable.load_validation_schema
can also get the command table JSON schema from the device. -
load_sequencer_program
now raises anValueError
if emptysequencer_program
string is given. :issue:138
-
Added a new
raise_for_invalid_node
keyword-argument toNodeTree.update_nodes
. :issue:110
Now only a warning (instead of
KeyError
) is issued when trying to initialize device/module object, which does not have nodes defined in node value parsers. -
Minor type hint fixes. :pr:
#147
- Added support for SHFQC
- Added a helper function
uhfqa.qas[n].integration.write_integration_weights
for QAS integration weights configuration - Bugfix: Adapt Node Tree to be able to get daq result data #113
- Bugfix: in the
Waveform
class to be able to convert a single waveform into a complex waveform. - Bugfix: HF2 PID nodes are available.
- Add missing nodes setting for QCCS mode #108
- pqsc.check_zsync_connection blocks even if nothing is connected
- Create a temporary awg module every time a sequencer code is uploaded (The reason for it is to have de defined state) #104
- reintroduce uhfqa.qa_delay function
- uhfli/uhfqa return node object for
uhfli.awg
instead of raising an error (necessary for qcodes drivers) #102 hdawg.enable_qccs_mode
wrong reference clock source fixed- Small docstring corrections
- Redesign and complete refactoring of zhinst-toolkit
- Lazy node tree to improve setup times
- Switch to session based approach (no longer device based)
- Command table handling improved
- Waveform handling improved
- Removed automated sequencer code generation
- Added LabOne modules
- Improved testing with mocking
- Adapt modulation frequency range to +-1GHz (shfsg.sgchannels[i].modulation_freq, shfqa.qachannels[i].sweeper.oscillator_freq)
- Bugfix: DAQ module timeout exception raises AttributeError
- Make the command table validation optional
- SHFQA Adapt oscillator_freq to +-500e6 Hz
- Initial support for SHFSG
- Make Node Tree generation case insensitive
- Bugfix #86
- Python 3.8 support
- General
- Add
sync
function used ashdawg.sync()
to perform global synchronization - Add support for
syncSet
- Add support for
setVector
- Add support for loading factory presets
- General documentation improvements
- Add
- AWG Core
- Update sequencer commands
- Update triggering in predefined sequences
- Update sequencer programs
- UHFQA
- Add
qa_delay
,allowed_sequences
,allowed_trigger_modes
parameter - Add support for PQSC
- Add scope module
- Add
- HDAWG
- Add
allowed_sequences
,allowed_trigger_modes
parameter - Add support for PQSC
- Add command table support
- Add
- Add PQSC driver
- Add SHFQA driver
- fix error when the device serial is uppercase
- fix busy error on AWG program upload
- extend AWG upload timeout to 100 s
- add type hints
- more documentation
- more documentation
- minor fixes and additions
- Initial release