Skip to content

Commit f6b1528

Browse files
committed
Fix type checking
1 parent 8e54361 commit f6b1528

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

src/qcodes/instrument_drivers/Keysight/keysightb1500/message_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class MessageBuilder:
6666
"""
6767

6868
def __init__(self) -> None:
69-
self._msg = CommandList()
69+
self._msg: CommandList[str] = CommandList()
7070

7171
@property
7272
def message(self) -> str:

src/qcodes/parameters/parameter.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,9 @@ class Parameter(
185185
def __init__(
186186
self,
187187
name: str,
188-
instrument: _InstrumentType_co = None,
188+
# mypy seems to be confused here. The bound and default for _InstrumentType_co
189+
# contains None but mypy will now allow it as a default as of v 1.19.0
190+
instrument: _InstrumentType_co = None, # type: ignore[assignment]
189191
label: str | None = None,
190192
unit: str | None = None,
191193
get_cmd: str | Callable[..., Any] | Literal[False] | None = None,

src/qcodes/parameters/parameter_base.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ class ParameterBase(
222222
def __init__(
223223
self,
224224
name: str,
225-
instrument: _InstrumentType_co = None,
225+
instrument: _InstrumentType_co = None, # type: ignore[assignment]
226226
snapshot_get: bool = True,
227227
metadata: Mapping[Any, Any] | None = None,
228228
step: float | None = None,
@@ -696,36 +696,40 @@ def _from_raw_value_to_value(
696696
else:
697697
value = raw_value
698698

699+
# the code below is not very type safe but relies on duck typing / try except
700+
# and assumes the user does not set scale/offset unless the datatype is numeric
701+
# this should probably be rewritten but for now we ignore type errors
699702
# apply offset first (native scale)
700703

701704
if self.offset is not None and value is not None:
702705
# offset values
703706
try:
704-
value = value - self.offset
707+
value = value - self.offset # type: ignore[operator,assignment]
705708
except TypeError:
706709
if isinstance(self.offset, collections.abc.Iterable):
707710
# offset contains multiple elements, one for each value
708-
value = tuple(
709-
val - offset for val, offset in zip(value, self.offset)
711+
value = tuple( # type: ignore[assignment]
712+
val - offset
713+
for val, offset in zip(value, self.offset) # type: ignore[call-overload]
710714
)
711715
elif isinstance(value, collections.abc.Iterable):
712716
# Use single offset for all values
713-
value = tuple(val - self.offset for val in value)
717+
value = tuple(val - self.offset for val in value) # type: ignore[assignment]
714718
else:
715719
raise
716720

717721
# scale second
718722
if self.scale is not None and value is not None:
719723
# Scale values
720724
try:
721-
value = value / self.scale
725+
value = value / self.scale # type: ignore[assignment,operator]
722726
except TypeError:
723727
if isinstance(self.scale, collections.abc.Iterable):
724728
# Scale contains multiple elements, one for each value
725-
value = tuple(val / scale for val, scale in zip(value, self.scale))
729+
value = tuple(val / scale for val, scale in zip(value, self.scale)) # type: ignore[call-overload,assignment]
726730
elif isinstance(value, collections.abc.Iterable):
727731
# Use single scale for all values
728-
value = tuple(val / self.scale for val in value)
732+
value = tuple(val / self.scale for val in value) # type: ignore[assignment]
729733
else:
730734
raise
731735

@@ -734,11 +738,11 @@ def _from_raw_value_to_value(
734738
value = self.inverse_val_mapping[value]
735739
else:
736740
try:
737-
value = self.inverse_val_mapping[int(value)]
741+
value = self.inverse_val_mapping[int(value)] # type: ignore[call-overload]
738742
except (ValueError, KeyError):
739743
raise KeyError(f"'{value}' not in val_mapping")
740744

741-
return value
745+
return value # pyright: ignore[reportReturnType]
742746

743747
def _wrap_get(
744748
self, get_function: Callable[..., ParamRawDataType]
@@ -782,17 +786,20 @@ def set_wrapper(value: _ParameterDataTypeVar, **kwargs: Any) -> None:
782786
)
783787
self.validate(value)
784788

789+
# the code below is written in a duck typed way that assumes that
790+
# the user has correctly set step size etc. This could be rewritten
791+
785792
# In some cases intermediate sweep values must be used.
786793
# Unless `self.step` is defined, get_sweep_values will return
787794
# a list containing only `value`.
788-
steps = self.get_ramp_values(value, step=self.step)
795+
steps = self.get_ramp_values(value, step=self.step) # type: ignore[arg-type]
789796

790797
for val_step in steps:
791798
# even if the final value is valid we may be generating
792799
# steps that are not so validate them too
793-
self.validate(val_step)
800+
self.validate(val_step) # type: ignore[arg-type]
794801

795-
raw_val_step = self._from_value_to_raw_value(val_step)
802+
raw_val_step = self._from_value_to_raw_value(val_step) # type: ignore[arg-type]
796803

797804
# Check if delay between set operations is required
798805
t_elapsed = time.perf_counter() - self._t_last_set
@@ -817,7 +824,7 @@ def set_wrapper(value: _ParameterDataTypeVar, **kwargs: Any) -> None:
817824

818825
self.cache._update_with(value=val_step, raw_value=raw_val_step)
819826

820-
self._call_on_set_callback(val_step)
827+
self._call_on_set_callback(val_step) # type: ignore[arg-type]
821828

822829
except Exception as e:
823830
e.args = (*e.args, f"setting {self} to {value}")

0 commit comments

Comments
 (0)