diff --git a/src/qcodes/dataset/data_set_protocol.py b/src/qcodes/dataset/data_set_protocol.py index a9c2641ece3..8b7fb9675a6 100644 --- a/src/qcodes/dataset/data_set_protocol.py +++ b/src/qcodes/dataset/data_set_protocol.py @@ -12,7 +12,6 @@ Any, Literal, Protocol, - Union, runtime_checkable, ) @@ -56,8 +55,8 @@ str | complex | np.integer | np.floating | np.complexfloating ) values_type: TypeAlias = scalar_res_types | np.ndarray | Sequence[scalar_res_types] -res_type: TypeAlias = tuple[Union["ParameterBase", str], values_type] -setpoints_type: TypeAlias = Sequence[Union[str, "ParameterBase"]] +res_type: TypeAlias = "tuple[ParameterBase | str, values_type]" +setpoints_type: TypeAlias = "Sequence[str | ParameterBase]" SPECS: TypeAlias = list[ParamSpec] # Transition period type: SpecsOrInterDeps. We will allow both as input to # the DataSet constructor for a while, then deprecate SPECS and finally remove diff --git a/src/qcodes/dataset/threading.py b/src/qcodes/dataset/threading.py index 7bb3599c690..78d4a829850 100644 --- a/src/qcodes/dataset/threading.py +++ b/src/qcodes/dataset/threading.py @@ -9,21 +9,20 @@ import itertools import logging from collections import defaultdict -from collections.abc import Callable from functools import partial -from typing import TYPE_CHECKING, Protocol, TypeVar, Union +from typing import TYPE_CHECKING, Protocol, TypeAlias, TypeVar from qcodes.utils import RespondingThread if TYPE_CHECKING: - from collections.abc import Sequence + from collections.abc import Callable, Sequence from types import TracebackType from qcodes.dataset.data_set_protocol import values_type from qcodes.parameters import ParamDataType, ParameterBase -ParamMeasT = Union["ParameterBase", Callable[[], None]] -OutType = list[tuple["ParameterBase", "values_type"]] +ParamMeasT: TypeAlias = "ParameterBase | Callable[[], None]" +OutType: TypeAlias = "list[tuple[ParameterBase, values_type]]" T = TypeVar("T") diff --git a/src/qcodes/instrument_drivers/AlazarTech/ats_api.py b/src/qcodes/instrument_drivers/AlazarTech/ats_api.py index 66daf2752fe..f5bd2b6afa7 100644 --- a/src/qcodes/instrument_drivers/AlazarTech/ats_api.py +++ b/src/qcodes/instrument_drivers/AlazarTech/ats_api.py @@ -6,7 +6,7 @@ import ctypes from ctypes import POINTER -from typing import TYPE_CHECKING, Any, ClassVar, Union +from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias # `ParameterBase` is needed because users may pass instrument parameters # that originate from `Instrument.parameters` dictionary which is typed @@ -30,6 +30,9 @@ POINTER_c_long = Any +int_or_param: TypeAlias = "int | Parameter" + + class AlazarATSAPI(WrappedDll): """ A thread-safe wrapper for the ATS API library. @@ -54,7 +57,7 @@ class AlazarATSAPI(WrappedDll): signatures: ClassVar[dict[str, Signature]] = {} def set_trigger_time_out( - self, handle: int, timeout_ticks: Union[int, "Parameter"] + self, handle: int, timeout_ticks: int_or_param ) -> ReturnCode: return self._sync_dll_call("AlazarSetTriggerTimeOut", handle, timeout_ticks) @@ -227,10 +230,10 @@ def set_parameter( def set_capture_clock( self, handle: int, - source_id: Union[int, "Parameter"], - sample_rate_id_or_value: Union[int, "Parameter"], - edge_id: Union[int, "Parameter"], - decimation: Union[int, "Parameter"], + source_id: int_or_param, + sample_rate_id_or_value: int_or_param, + edge_id: int_or_param, + decimation: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarSetCaptureClock", @@ -252,10 +255,10 @@ def set_capture_clock( def input_control( self, handle: int, - channel_id: Union[int, "Parameter"], - coupling_id: Union[int, "Parameter"], - range_id: Union[int, "Parameter"], - impedance_id: Union[int, "Parameter"], + channel_id: int_or_param, + coupling_id: int_or_param, + range_id: int_or_param, + impedance_id: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarInputControl", @@ -273,8 +276,8 @@ def input_control( def set_bw_limit( self, handle: int, - channel_id: Union[int, "Parameter"], - flag: Union[int, "Parameter"], + channel_id: int_or_param, + flag: int_or_param, ) -> ReturnCode: return self._sync_dll_call("AlazarSetBWLimit", handle, channel_id, flag) @@ -285,15 +288,15 @@ def set_bw_limit( def set_trigger_operation( self, handle: int, - trigger_operation: Union[int, "Parameter"], - trigger_engine_id_1: Union[int, "Parameter"], - source_id_1: Union[int, "Parameter"], - slope_id_1: Union[int, "Parameter"], - level_1: Union[int, "Parameter"], - trigger_engine_id_2: Union[int, "Parameter"], - source_id_2: Union[int, "Parameter"], - slope_id_2: Union[int, "Parameter"], - level_2: Union[int, "Parameter"], + trigger_operation: int_or_param, + trigger_engine_id_1: int_or_param, + source_id_1: int_or_param, + slope_id_1: int_or_param, + level_1: int_or_param, + trigger_engine_id_2: int_or_param, + source_id_2: int_or_param, + slope_id_2: int_or_param, + level_2: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarSetTriggerOperation", @@ -320,8 +323,8 @@ def set_trigger_operation( def set_external_trigger( self, handle: int, - coupling_id: Union[int, "Parameter"], - range_id: Union[int, "Parameter"], + coupling_id: int_or_param, + range_id: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarSetExternalTrigger", handle, coupling_id, range_id @@ -331,9 +334,7 @@ def set_external_trigger( {"AlazarSetExternalTrigger": Signature(argument_types=[HANDLE, U32, U32])} ) - def set_trigger_delay( - self, handle: int, value: Union[int, "Parameter"] - ) -> ReturnCode: + def set_trigger_delay(self, handle: int, value: int_or_param) -> ReturnCode: return self._sync_dll_call("AlazarSetTriggerDelay", handle, value) signatures.update( @@ -343,8 +344,8 @@ def set_trigger_delay( def configure_aux_io( self, handle: int, - mode_id: Union[int, "Parameter"], - mode_parameter_value: Union[int, "Parameter"], + mode_id: int_or_param, + mode_parameter_value: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarConfigureAuxIO", handle, mode_id, mode_parameter_value @@ -357,8 +358,8 @@ def configure_aux_io( def set_record_size( self, handle: int, - pre_trigger_samples: Union[int, "Parameter"], - post_trigger_samples: Union[int, "Parameter"], + pre_trigger_samples: int_or_param, + post_trigger_samples: int_or_param, ) -> ReturnCode: return self._sync_dll_call( "AlazarSetRecordSize", handle, pre_trigger_samples, post_trigger_samples diff --git a/src/qcodes/instrument_drivers/Keithley/Keithley_2450.py b/src/qcodes/instrument_drivers/Keithley/Keithley_2450.py index 0ee2cd48e7e..7c6fcf5a971 100644 --- a/src/qcodes/instrument_drivers/Keithley/Keithley_2450.py +++ b/src/qcodes/instrument_drivers/Keithley/Keithley_2450.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Any, ClassVar, Optional, cast +from typing import TYPE_CHECKING, Any, ClassVar, cast import numpy as np from typing_extensions import TypedDict, Unpack @@ -138,7 +138,7 @@ def __exit__( self, exception_type: type[BaseException] | None, value: BaseException | None, - traceback: Optional["TracebackType"], + traceback: "TracebackType | None", ) -> None: self.delete() diff --git a/src/qcodes/instrument_drivers/Keithley/Keithley_7510.py b/src/qcodes/instrument_drivers/Keithley/Keithley_7510.py index 8a121cdf416..97791ce5ce8 100644 --- a/src/qcodes/instrument_drivers/Keithley/Keithley_7510.py +++ b/src/qcodes/instrument_drivers/Keithley/Keithley_7510.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING, Any, ClassVar, Optional, TypedDict, cast +from typing import TYPE_CHECKING, Any, ClassVar, TypedDict, cast import numpy as np @@ -36,7 +36,7 @@ def __init__( self, names: "Sequence[str]", shapes: "Sequence[Sequence[int]]", - setpoints: Optional["Sequence[Sequence[Any]]"], + setpoints: "Sequence[Sequence[Any]] | None", **kwargs: Any, ): super().__init__( @@ -282,7 +282,7 @@ def __exit__( self, exception_type: type[BaseException] | None, value: BaseException | None, - traceback: Optional["TracebackType"], + traceback: "TracebackType | None", ) -> None: self.delete() diff --git a/src/qcodes/instrument_drivers/Keysight/Infiniium.py b/src/qcodes/instrument_drivers/Keysight/Infiniium.py index 177e4b7b7a4..0f12e9c9048 100644 --- a/src/qcodes/instrument_drivers/Keysight/Infiniium.py +++ b/src/qcodes/instrument_drivers/Keysight/Infiniium.py @@ -1,6 +1,6 @@ import re from pathlib import Path -from typing import TYPE_CHECKING, Any, ClassVar, Literal, Optional, Union +from typing import TYPE_CHECKING, Any, ClassVar, Literal import numpy as np from pyvisa import VisaIOError @@ -102,7 +102,7 @@ class DSOTraceParam(ParameterWithSetpoints): def __init__( self, name: str, - instrument: Union["KeysightInfiniiumChannel", "KeysightInfiniiumFunction"], + instrument: "KeysightInfiniiumChannel | KeysightInfiniiumFunction", channel: str, **kwargs: Any, ): @@ -170,7 +170,7 @@ def unit(self, unit: Any) -> None: """ return - def update_setpoints(self, preamble: Optional["Sequence[str]"] = None) -> None: + def update_setpoints(self, preamble: "Sequence[str] | None" = None) -> None: """ Update waveform parameters. Must be called before data acquisition if instr.cache_setpoints is False @@ -466,7 +466,7 @@ def _create_query(self, cmd: str, pre_cmd: str = "", post_cmd: str = "") -> str: class KeysightInfiniiumBoundMeasurement(AbstractMeasurementSubsystem): def __init__( self, - parent: Union["KeysightInfiniiumChannel", "KeysightInfiniiumFunction"], + parent: "KeysightInfiniiumChannel | KeysightInfiniiumFunction", name: str, **kwargs: "Unpack[InstrumentBaseKWArgs]", ): diff --git a/src/qcodes/instrument_drivers/Keysight/keysight_34934a.py b/src/qcodes/instrument_drivers/Keysight/keysight_34934a.py index 9aba3563a5a..44a03ed5630 100644 --- a/src/qcodes/instrument_drivers/Keysight/keysight_34934a.py +++ b/src/qcodes/instrument_drivers/Keysight/keysight_34934a.py @@ -1,6 +1,6 @@ import logging import re -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING from qcodes import validators @@ -32,7 +32,7 @@ class Keysight34934A(Keysight34980ASwitchMatrixSubModule): def __init__( self, - parent: Union["VisaInstrument", "InstrumentChannel"], + parent: "VisaInstrument | InstrumentChannel", name: str, slot: int, **kwargs: "Unpack[InstrumentBaseKWArgs]", diff --git a/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1500_base.py b/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1500_base.py index 8054bfbd5f4..ce6eaac643b 100644 --- a/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1500_base.py +++ b/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1500_base.py @@ -1,7 +1,7 @@ import re import textwrap from collections import defaultdict -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Any from qcodes.instrument import VisaInstrument, VisaInstrumentKWArgs from qcodes.parameters import MultiParameter, Parameter, create_on_off_val_mapping @@ -516,9 +516,9 @@ def __init__(self, name: str, instrument: KeysightB1517A, **kwargs: Any): def set_names_labels_and_units( self, - names: Optional["Sequence[str]"] = None, - labels: Optional["Sequence[str]"] = None, - units: Optional["Sequence[str]"] = None, + names: "Sequence[str] | None" = None, + labels: "Sequence[str] | None" = None, + units: "Sequence[str] | None" = None, ) -> None: """ Set names, labels, and units of the measured parts of the MultiParameter. diff --git a/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1517A.py b/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1517A.py index cb306c86deb..acb2333e127 100644 --- a/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1517A.py +++ b/src/qcodes/instrument_drivers/Keysight/keysightb1500/KeysightB1517A.py @@ -1,6 +1,6 @@ import re import textwrap -from typing import TYPE_CHECKING, Any, Literal, Optional, cast, overload +from typing import TYPE_CHECKING, Any, Literal, cast, overload import numpy as np from typing_extensions import NotRequired, TypedDict, Unpack @@ -713,7 +713,7 @@ def measurement_status(self) -> MeasurementStatus | None: def snapshot_base( self, update: bool | None = True, - params_to_skip_update: Optional["Sequence[str]"] = None, + params_to_skip_update: "Sequence[str] | None" = None, ) -> dict[Any, Any]: snapshot = super().snapshot_base( update=update, params_to_skip_update=params_to_skip_update diff --git a/src/qcodes/instrument_drivers/QDev/QDac_channels.py b/src/qcodes/instrument_drivers/QDev/QDac_channels.py index ba42b975e7c..3b8314a3b09 100644 --- a/src/qcodes/instrument_drivers/QDev/QDac_channels.py +++ b/src/qcodes/instrument_drivers/QDev/QDac_channels.py @@ -3,7 +3,7 @@ import logging import time from functools import partial -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Any import pyvisa import pyvisa.constants @@ -142,7 +142,7 @@ def __init__( def snapshot_base( self, update: bool | None = False, - params_to_skip_update: Optional["Sequence[str]"] = None, + params_to_skip_update: "Sequence[str] | None" = None, ) -> dict[Any, Any]: update_currents = self._parent._update_currents and update if update and not self._parent._get_status_performed: @@ -327,7 +327,7 @@ def __init__( def snapshot_base( self, update: bool | None = False, - params_to_skip_update: Optional["Sequence[str]"] = None, + params_to_skip_update: "Sequence[str] | None" = None, ) -> dict[Any, Any]: update_currents = self._update_currents and update is True if update: diff --git a/src/qcodes/instrument_drivers/rigol/Rigol_DG4000.py b/src/qcodes/instrument_drivers/rigol/Rigol_DG4000.py index 3bdf95cb551..2fd4623ffdf 100644 --- a/src/qcodes/instrument_drivers/rigol/Rigol_DG4000.py +++ b/src/qcodes/instrument_drivers/rigol/Rigol_DG4000.py @@ -1,5 +1,5 @@ from functools import partial -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING from qcodes.instrument import VisaInstrument, VisaInstrumentKWArgs from qcodes.validators import Anything, Enum, Ints, MultiType, Numbers @@ -745,7 +745,7 @@ def __init__( self.connect_message() - def _upload_data(self, data: Union["Sequence[float]", "np.ndarray"]) -> None: + def _upload_data(self, data: "Sequence[float] | np.ndarray") -> None: """ Upload data to the AWG memory. diff --git a/src/qcodes/logger/logger.py b/src/qcodes/logger/logger.py index e3ebc969725..bfb2f7c1d47 100644 --- a/src/qcodes/logger/logger.py +++ b/src/qcodes/logger/logger.py @@ -15,7 +15,7 @@ from contextlib import contextmanager from copy import copy from datetime import datetime -from typing import TYPE_CHECKING, Any, Optional, Union +from typing import TYPE_CHECKING, Any from typing_extensions import deprecated @@ -66,7 +66,7 @@ # console hander. console_handler: logging.Handler | None = None file_handler: logging.Handler | None = None -telemetry_handler: Optional["AzureLogHandler"] = None +telemetry_handler: AzureLogHandler | None = None _opencensus_filter = logging.Filter(name="opencensus") @@ -385,7 +385,7 @@ def running_in_test_or_tool() -> bool: @contextmanager def handler_level( - level: LevelType, handler: Union[logging.Handler, "Sequence[logging.Handler]"] + level: LevelType, handler: "logging.Handler | Sequence[logging.Handler]" ) -> "Iterator[None]": """ Context manager to temporarily change the level of handlers. @@ -469,7 +469,7 @@ def __exit__( self, exception_type: type[BaseException] | None, exception_value: BaseException | None, - traceback: Optional["TracebackType"], + traceback: "TracebackType | None", ) -> None: self.logger.removeHandler(self.string_handler) self.value = self.log_capture.getvalue() diff --git a/src/qcodes/metadatable/metadatable_base.py b/src/qcodes/metadatable/metadatable_base.py index 8ed766e2a26..a37897b4ee2 100644 --- a/src/qcodes/metadatable/metadatable_base.py +++ b/src/qcodes/metadatable/metadatable_base.py @@ -1,5 +1,5 @@ from abc import abstractmethod -from typing import TYPE_CHECKING, Any, Optional, final +from typing import TYPE_CHECKING, Any, final from qcodes.utils import deep_update @@ -19,7 +19,7 @@ class Metadatable: - def __init__(self, metadata: Optional["Mapping[str, Any]"] = None): + def __init__(self, metadata: "Mapping[str, Any] | None" = None): self.metadata: dict[str, Any] = {} self.load_metadata(metadata or {}) @@ -58,7 +58,7 @@ def snapshot(self, update: bool | None = False) -> Snapshot: def snapshot_base( self, update: bool | None = False, - params_to_skip_update: Optional["Sequence[str]"] = None, + params_to_skip_update: "Sequence[str] | None" = None, ) -> Snapshot: """ Override this with the primary information for a subclass. diff --git a/src/qcodes/validators/validators.py b/src/qcodes/validators/validators.py index c19837021ff..82739744772 100644 --- a/src/qcodes/validators/validators.py +++ b/src/qcodes/validators/validators.py @@ -9,7 +9,7 @@ import typing from collections import abc from collections.abc import Hashable -from typing import Any, Generic, Literal, TypeVar, Union, cast +from typing import Any, Generic, Literal, TypeVar, cast import numpy as np @@ -317,7 +317,7 @@ def max_value(self) -> float: return float(self._max_value) -class Ints(Validator[Union[int, "np.integer[Any]", bool]]): +class Ints(Validator[int | np.integer[Any] | bool]): """ Requires an integer. Optional parameters min_value and max_value, enforce @@ -428,7 +428,7 @@ def validate(self, value: numbertypes, context: str = "") -> None: super().validate(castvalue, context=context) -class ComplexNumbers(Validator[Union[complex, "np.complexfloating[Any,Any]"]]): +class ComplexNumbers(Validator[complex | np.complexfloating[Any, Any]]): """ A validator for complex numbers. """