Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
841748a
Use typed kwargs in SignalHound parameter subclasses
jenshnielsen Apr 16, 2026
c00eeab
Use typed kwargs in Keithley 2600 parameter subclasses
jenshnielsen Apr 16, 2026
4100b4d
Use typed kwargs in Keithley S46 and 7510 parameter subclasses
jenshnielsen Apr 16, 2026
19b742f
Use typed kwargs in Keysight B1500 parameter subclasses
jenshnielsen Apr 16, 2026
ab69254
Use typed kwargs in Keysight Infiniium parameter subclasses
jenshnielsen Apr 16, 2026
d51c510
Use typed kwargs in Keysight PNA (N52xx) parameter subclasses
jenshnielsen Apr 16, 2026
2f2cf48
Use typed kwargs in Keysight N9030B parameter subclasses
jenshnielsen Apr 16, 2026
082c7ff
Use typed kwargs in Keysight E4980A parameter subclasses
jenshnielsen Apr 16, 2026
998c1a3
Use typed kwargs in Keysight 344xxA parameter subclasses
jenshnielsen Apr 16, 2026
7d96b65
Use typed kwargs in Stanford Research parameter subclasses
jenshnielsen Apr 16, 2026
18e4b66
Use typed kwargs in Rohde & Schwarz parameter subclasses
jenshnielsen Apr 16, 2026
fe7f3e2
Use typed kwargs in Tektronix TPS2012 parameter subclasses
jenshnielsen Apr 16, 2026
6ed680b
Use typed kwargs in CopperMountain M5xxx parameter subclasses
jenshnielsen Apr 16, 2026
501b17a
Use typed kwargs in QDev QDac parameter subclasses
jenshnielsen Apr 16, 2026
f66efed
Use typed kwargs in mock instrument parameter subclasses
jenshnielsen Apr 16, 2026
00029b4
Add TypedDicts for ArrayParameter, MultiParameter, and ParameterWithS…
jenshnielsen Apr 16, 2026
e40c401
Use ParameterWithSetpointsKWArgs in ParameterWithSetpoints subclasses
jenshnielsen Apr 16, 2026
f5fa03d
Fix mypy errors in parameter TypedDicts and driver subclasses
jenshnielsen Apr 17, 2026
b9e36d6
Use MultiParameterKWArgs/ArrayParameterKWArgs in Rohde & Schwarz ZNB
jenshnielsen Apr 17, 2026
329a3c2
Use MultiParameterKWArgs in CopperMountain M5xxx parameter subclasses
jenshnielsen Apr 17, 2026
2f5d2d0
Use MultiParameterKWArgs in Keysight B1500 parameter subclasses
jenshnielsen Apr 17, 2026
bf50622
Use ArrayParameterKWArgs in SignalHound FrequencySweep
jenshnielsen Apr 17, 2026
f67cb97
Use ArrayParameterKWArgs in SR86x buffer readout
jenshnielsen Apr 17, 2026
b61947d
Use ArrayParameterKWArgs in RTO1000 ScopeTrace
jenshnielsen Apr 17, 2026
4aa519b
Use ArrayParameterKWArgs in TPS2012 ScopeArray
jenshnielsen Apr 17, 2026
bf64b4c
Use MultiParameterKWArgs/ArrayParameterKWArgs in mock instruments
jenshnielsen Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 75 additions & 53 deletions src/qcodes/instrument_drivers/CopperMountain/_M5xxx.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from qcodes.parameters import (
ManualParameter,
MultiParameter,
MultiParameterKWArgs,
Parameter,
ParamRawDataType,
create_on_off_val_mapping,
Expand Down Expand Up @@ -637,9 +638,9 @@ def __init__(
start: float,
stop: float,
number_of_points: int,
instrument: CopperMountainM5xxx,
*,
expected_measurement_duration: float = 600,
**kwargs: Any,
**kwargs: "Unpack[MultiParameterKWArgs[tuple[NDArray, NDArray], CopperMountainM5xxx]]",
) -> None:
"""
Linear frequency sweep that returns magnitude and phase for a single
Expand All @@ -650,40 +651,57 @@ def __init__(
start: Start frequency of linear sweep
stop: Stop frequency of linear sweep
number_of_points: Number of points of linear sweep
instrument: Instrument to which sweep is bound to.
expected_measurement_duration: Adjusts instrument timeout (seconds). Defaults to 600 seconds.
**kwargs: Any
**kwargs: Keyword arguments forwarded to MultiParameter.

"""

self.expected_measurement_duration = expected_measurement_duration

super().__init__(
name,
instrument=instrument,
names=(
instrument = kwargs.get("instrument")
assert instrument is not None

kw: dict[str, Any] = dict(kwargs)
kw.setdefault(
"names",
(
f"{instrument.short_name}_{name}_magnitude",
f"{instrument.short_name}_{name}_phase",
),
labels=(
)
kw.setdefault(
"labels",
(
f"{instrument.short_name} {name} magnitude",
f"{instrument.short_name} {name} phase",
),
units=("dB", "rad"),
setpoint_units=(("Hz",), ("Hz",)),
setpoint_labels=(
)
kw.setdefault("units", ("dB", "rad"))
kw.setdefault("setpoint_units", (("Hz",), ("Hz",)))
kw.setdefault(
"setpoint_labels",
(
(f"{instrument.short_name} frequency",),
(f"{instrument.short_name} frequency",),
),
setpoint_names=(
)
kw.setdefault(
"setpoint_names",
(
(f"{instrument.short_name}_frequency",),
(f"{instrument.short_name}_frequency",),
),
shapes=(
)
kw.setdefault(
"shapes",
(
(number_of_points,),
(number_of_points,),
),
**kwargs,
)
super().__init__(
name,
**kw,
)
self.set_sweep(start, stop, number_of_points)

Expand Down Expand Up @@ -746,44 +764,46 @@ class PointMagPhase(
def __init__(
self,
name: str,
instrument: CopperMountainM5xxx,
*,
expected_measurement_duration: float = 600,
**kwargs: Any,
**kwargs: "Unpack[MultiParameterKWArgs[tuple[np.floating, np.floating], CopperMountainM5xxx]]",
) -> None:
"""Magnitude and phase measurement of a single point at start
frequency.

Args:
name: Name of point measurement
instrument: Instrument to which parameter is bound to.
expected_measurement_duration: Adjusts instrument timeout (seconds). Defaults to 600 seconds.
**kwargs: Any
**kwargs: Keyword arguments forwarded to MultiParameter.

"""

self.expected_measurement_duration = expected_measurement_duration

super().__init__(
name,
instrument=instrument,
names=(
instrument = kwargs.get("instrument")
assert instrument is not None

kw: dict[str, Any] = dict(kwargs)
kw.setdefault(
"names",
(
f"{instrument.short_name}_{name}_magnitude",
f"{instrument.short_name}_{name}_phase",
),
labels=(
)
kw.setdefault(
"labels",
(
f"{instrument.short_name} {name} magnitude",
f"{instrument.short_name} {name} phase",
),
units=("dB", "rad"),
setpoints=(
(),
(),
),
shapes=(
(),
(),
),
**kwargs,
)
kw.setdefault("units", ("dB", "rad"))
kw.setdefault("setpoints", ((), ()))
kw.setdefault("shapes", ((), ()))
super().__init__(
name,
**kw,
)

def get_raw(self) -> tuple[ParamRawDataType, ParamRawDataType]:
Expand Down Expand Up @@ -844,44 +864,46 @@ class PointIQ(MultiParameter[tuple[np.floating, np.floating], CopperMountainM5xx
def __init__(
self,
name: str,
instrument: CopperMountainM5xxx,
*,
expected_measurement_duration: float = 600,
**kwargs: Any,
**kwargs: "Unpack[MultiParameterKWArgs[tuple[np.floating, np.floating], CopperMountainM5xxx]]",
) -> None:
"""I and Q measurement of a single point at start
frequency.

Args:
name: Name of point measurement
instrument: Instrument to which parameter is bound to.
expected_measurement_duration: Adjusts instrument timeout (seconds). Defaults to 600 seconds.
**kwargs: Any
**kwargs: Keyword arguments forwarded to MultiParameter.

"""

self.expected_measurement_duration = expected_measurement_duration

super().__init__(
name,
instrument=instrument,
names=(
instrument = kwargs.get("instrument")
assert instrument is not None

kw: dict[str, Any] = dict(kwargs)
kw.setdefault(
"names",
(
f"{instrument.short_name}_{name}_i",
f"{instrument.short_name}_{name}_q",
),
labels=(
)
kw.setdefault(
"labels",
(
f"{instrument.short_name} {name} i",
f"{instrument.short_name} {name} q",
),
units=("V", "V"),
setpoints=(
(),
(),
),
shapes=(
(),
(),
),
**kwargs,
)
kw.setdefault("units", ("V", "V"))
kw.setdefault("setpoints", ((), ()))
kw.setdefault("shapes", ((), ()))
super().__init__(
name,
**kw,
)

def get_raw(self) -> tuple[ParamRawDataType, ParamRawDataType]:
Expand Down
17 changes: 13 additions & 4 deletions src/qcodes/instrument_drivers/Keithley/Keithley_7510.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
DelegateParameter,
MultiParameter,
Parameter,
ParameterBaseKWArgs,
ParameterKWArgs,
ParamRawDataType,
create_on_off_val_mapping,
invert_val_mapping,
Expand All @@ -38,13 +40,19 @@ def __init__(
names: "Sequence[str]",
shapes: "Sequence[Sequence[int]]",
setpoints: "Sequence[Sequence[Any]] | None",
**kwargs: Any,
units: "Sequence[str] | None" = None,
setpoint_units: "Sequence[Sequence[str]] | None" = None,
setpoint_names: "Sequence[Sequence[str]] | None" = None,
**kwargs: "Unpack[ParameterBaseKWArgs]",
):
super().__init__(
name="data_array_7510",
names=names,
shapes=shapes,
setpoints=setpoints,
units=units,
setpoint_units=setpoint_units,
setpoint_names=setpoint_names,
**kwargs,
)
for param_name in self.names:
Expand All @@ -65,10 +73,11 @@ def __init__(
start: Parameter,
stop: Parameter,
n_points: Parameter,
*args: Any,
**kwargs: Any,
*,
name: str,
**kwargs: "Unpack[ParameterKWArgs]",
):
super().__init__(*args, **kwargs)
super().__init__(name, **kwargs)
self._start = start
self._stop = stop
self._n_points = n_points
Expand Down
10 changes: 5 additions & 5 deletions src/qcodes/instrument_drivers/Keithley/Keithley_s46.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

import re
from itertools import product
from typing import TYPE_CHECKING, Any, ClassVar
from typing import TYPE_CHECKING, ClassVar

from qcodes.instrument import (
VisaInstrument,
VisaInstrumentKWArgs,
)
from qcodes.parameters import Parameter, ParamRawDataType
from qcodes.parameters import Parameter, ParameterKWArgs, ParamRawDataType

if TYPE_CHECKING:
from typing_extensions import Unpack
Expand Down Expand Up @@ -72,12 +72,12 @@ class S46Parameter(Parameter[ParamRawDataType, "KeithleyS46"]):
def __init__(
self,
name: str,
instrument: "KeithleyS46",
*,
channel_number: int,
lock: KeithleyS46RelayLock,
**kwargs: Any,
**kwargs: "Unpack[ParameterKWArgs[ParamRawDataType, KeithleyS46]]",
):
super().__init__(name, instrument=instrument, **kwargs)
super().__init__(name, **kwargs)

self._lock = lock
self._channel_number = channel_number
Expand Down
5 changes: 3 additions & 2 deletions src/qcodes/instrument_drivers/Keithley/_Keithley_2600.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from qcodes.parameters import (
Parameter,
ParameterBase,
ParameterKWArgs,
ParameterWithSetpoints,
ParamRawDataType,
create_on_off_val_mapping,
Expand Down Expand Up @@ -544,8 +545,8 @@ class Keithley2600MeasurementStatus(StrEnum):


class _ParameterWithStatus(Parameter):
def __init__(self, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs)
def __init__(self, name: str, **kwargs: Unpack[ParameterKWArgs]):
super().__init__(name, **kwargs)

self._measurement_status: Keithley2600MeasurementStatus | None = None

Expand Down
32 changes: 25 additions & 7 deletions src/qcodes/instrument_drivers/Keysight/Infiniium.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
from qcodes.parameters import (
Parameter,
ParameterBase,
ParameterKWArgs,
ParameterWithSetpoints,
ParameterWithSetpointsKWArgs,
create_on_off_val_mapping,
)
from qcodes.utils.deprecate import QCoDeSDeprecationWarning
Expand All @@ -41,12 +43,20 @@ class DSOTimeAxisParam(Parameter):
Time axis parameter for the Infiniium series DSO.
"""

def __init__(self, xorigin: float, xincrement: float, points: int, **kwargs: Any):
def __init__(
self,
xorigin: float,
xincrement: float,
points: int,
*,
name: str,
**kwargs: "Unpack[ParameterKWArgs]",
):
"""
Initialize time axis. If values are unknown, they can be initialized to zero and
filled in later.
"""
super().__init__(**kwargs)
super().__init__(name, **kwargs)

self.xorigin = xorigin
self.xincrement = xincrement
Expand All @@ -69,12 +79,20 @@ class DSOFrequencyAxisParam(Parameter):
Frequency axis parameter for the Infiniium series DSO.
"""

def __init__(self, xorigin: float, xincrement: float, points: int, **kwargs: Any):
def __init__(
self,
xorigin: float,
xincrement: float,
points: int,
*,
name: str,
**kwargs: "Unpack[ParameterKWArgs]",
):
"""
Initialize frequency axis. If values are unknown, they can be initialized
to zero and filled in later.
"""
super().__init__(**kwargs)
super().__init__(name, **kwargs)

self.xorigin = xorigin
self.xincrement = xincrement
Expand Down Expand Up @@ -113,15 +131,15 @@ class DSOTraceParam(
def __init__(
self,
name: str,
instrument: "KeysightInfiniiumChannel | KeysightInfiniiumFunction",
*,
channel: str,
**kwargs: Any,
**kwargs: "Unpack[ParameterWithSetpointsKWArgs[npt.NDArray, KeysightInfiniiumChannel | KeysightInfiniiumFunction]]",
):
"""
Initialize DSOTraceParam bound to a specific channel.
"""
self._ch_valid = False
super().__init__(name, instrument=instrument, **kwargs)
super().__init__(name, **kwargs)
self._channel = channel
# This parameter will be updated prior to being retrieved if
# self.root_instrument.auto_digitize is true.
Expand Down
Loading
Loading