diff --git a/docs/changes/newsfragments/7187.breaking b/docs/changes/newsfragments/7187.breaking new file mode 100644 index 000000000000..50bba0ebebc6 --- /dev/null +++ b/docs/changes/newsfragments/7187.breaking @@ -0,0 +1,3 @@ +The deprecated aliases to Lakeshore modules in `qcodes.instrument_drivers.Lakeshore.lakeshore_base` have been removed. +The aliases to lakeshore drivers in `qcodes.instrument_drivers.Lakeshore.Model_325`, `qcodes.instrument_drivers.Lakeshore.Model_336` and `qcodes.instrument_drivers.Lakeshore.Model_372` +have been removed. Please make sure that all Lakeshore related imports are from `qcodes.instrument_drivers.Lakeshore` avoiding any submodules. diff --git a/pyproject.toml b/pyproject.toml index ac0c9562edea..51c8feab544c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -238,6 +238,7 @@ filterwarnings = [ 'ignore:unclosed database in:ResourceWarning', # internal should be fixed 'ignore:ConnectionPlus is deprecated:qcodes.utils.deprecate.QCoDeSDeprecationWarning', # remove once deprecated ConnectionPlus has been removed 'ignore:make_connection_plus_from is deprecated:qcodes.utils.deprecate.QCoDeSDeprecationWarning', # remove once deprecated ConnectionPlus has been removed + 'ignore:Model_336 is deprecated:qcodes.utils.deprecate.QCoDeSDeprecationWarning', # remove once deprecated Lakeshore Model_336 and its tests has been removed ] [tool.ruff] diff --git a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_325.py b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_325.py index 739b8a58ff69..e9e6b8d5b9f6 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_325.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_325.py @@ -26,6 +26,8 @@ from typing_extensions import Buffer, Unpack + from qcodes.instrument.channel import ChannelTuple + def _read_curve_file(curve_file: TextIO) -> dict[Any, Any]: """ @@ -583,23 +585,42 @@ def __init__( self, "sensor", LakeshoreModel325Sensor, snapshotable=False ) - for inp in ["A", "B"]: - sensor = LakeshoreModel325Sensor(self, f"sensor_{inp}", inp) - sensors.append(sensor) - self.add_submodule(f"sensor_{inp}", sensor) + self.sensor_A: LakeshoreModel325Sensor = self.add_submodule( + "sensor_A", LakeshoreModel325Sensor(self, "sensor_A", "A") + ) + """Sensor A""" + sensors.append(self.sensor_A) + self.sensor_B: LakeshoreModel325Sensor = self.add_submodule( + "sensor_B", LakeshoreModel325Sensor(self, "sensor_B", "B") + ) + """Sensor B""" + sensors.append(self.sensor_B) - self.add_submodule("sensor", sensors.to_channel_tuple()) + self.sensor: ChannelTuple[LakeshoreModel325Sensor] = self.add_submodule( + "sensor", sensors.to_channel_tuple() + ) + """ChannelTuple of sensors""" heaters = ChannelList( self, "heater", LakeshoreModel325Heater, snapshotable=False ) - for loop in [1, 2]: - heater = LakeshoreModel325Heater(self, f"heater_{loop}", loop) - heaters.append(heater) - self.add_submodule(f"heater_{loop}", heater) + self.heater_1: LakeshoreModel325Heater = self.add_submodule( + "heater_1", LakeshoreModel325Heater(self, "heater_1", 1) + ) + """Heater 1""" + heaters.append(self.heater_1) - self.add_submodule("heater", heaters.to_channel_tuple()) + self.heater_2: LakeshoreModel325Heater = self.add_submodule( + "heater_2", LakeshoreModel325Heater(self, "heater_2", 2) + ) + """Heater 2""" + heaters.append(self.heater_2) + + self.heater: ChannelTuple[LakeshoreModel325Heater] = self.add_submodule( + "heater", heaters.to_channel_tuple() + ) + """ChannelTuple of heaters""" curves = ChannelList(self, "curve", LakeshoreModel325Curve, snapshotable=False) @@ -607,7 +628,10 @@ def __init__( curve = LakeshoreModel325Curve(self, curve_index) curves.append(curve) - self.add_submodule("curve", curves) + self.curve: ChannelList[LakeshoreModel325Curve] = self.add_submodule( + "curve", curves + ) + """ChannelList of curves""" self.connect_message() diff --git a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_336.py b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_336.py index ea8df31b7e8e..977e04adec0f 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_336.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_336.py @@ -294,7 +294,31 @@ def __init__( ) -> None: super().__init__(name, address, **kwargs) - self.output_1 = LakeshoreModel336CurrentSource(self, "output_1", 1) - self.output_2 = LakeshoreModel336CurrentSource(self, "output_2", 2) - self.output_3 = LakeshoreModel336VoltageSource(self, "output_3", 3) - self.output_4 = LakeshoreModel336VoltageSource(self, "output_4", 4) + self.output_1: LakeshoreModel336CurrentSource = self.add_submodule( + name="output_1", + submodule=LakeshoreModel336CurrentSource(self, "output_1", 1), + ) + """ + Control output 1 of Lakeshore Model 336. + """ + self.output_2: LakeshoreModel336CurrentSource = self.add_submodule( + name="output_2", + submodule=LakeshoreModel336CurrentSource(self, "output_2", 2), + ) + """ + Control output 2 of Lakeshore Model 336. + """ + self.output_3: LakeshoreModel336VoltageSource = self.add_submodule( + name="output_3", + submodule=LakeshoreModel336VoltageSource(self, "output_3", 3), + ) + """ + Control output 3 of Lakeshore Model 336. + """ + self.output_4: LakeshoreModel336VoltageSource = self.add_submodule( + name="output_4", + submodule=LakeshoreModel336VoltageSource(self, "output_4", 4), + ) + """ + Control output 4 of Lakeshore Model 336. + """ diff --git a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_372.py b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_372.py index 005c1d2b685d..46bcec7212e2 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_372.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Lakeshore_model_372.py @@ -350,7 +350,25 @@ def __init__( super().__init__(name, address, **kwargs) heaters = {"sample_heater": 0, "warmup_heater": 1, "analog_heater": 2} - for heater_name, heater_index in heaters.items(): - self.add_submodule( - heater_name, LakeshoreModel372Output(self, heater_name, heater_index) - ) + + self.sample_heater: LakeshoreModel372Output = self.add_submodule( + "sample_heater", + LakeshoreModel372Output(self, "sample_heater", heaters["sample_heater"]), + ) + """ + Sample heater output channel. + """ + self.warmup_heater: LakeshoreModel372Output = self.add_submodule( + "warmup_heater", + LakeshoreModel372Output(self, "warmup_heater", heaters["warmup_heater"]), + ) + """ + Warm-up heater output channel. + """ + self.analog_heater: LakeshoreModel372Output = self.add_submodule( + "analog_heater", + LakeshoreModel372Output(self, "analog_heater", heaters["analog_heater"]), + ) + """ + Analog heater output channel. + """ diff --git a/src/qcodes/instrument_drivers/Lakeshore/Model_325.py b/src/qcodes/instrument_drivers/Lakeshore/Model_325.py index 2c344f4c0e97..8dd477310beb 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Model_325.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Model_325.py @@ -8,6 +8,8 @@ from itertools import takewhile from typing import TYPE_CHECKING, Any, Optional, TextIO, cast +from typing_extensions import deprecated + from qcodes.instrument import ( ChannelList, InstrumentChannel, @@ -15,6 +17,7 @@ VisaInstrumentKWArgs, ) from qcodes.parameters import Group, GroupParameter +from qcodes.utils import QCoDeSDeprecationWarning from qcodes.validators import Enum, Numbers from .Lakeshore_model_325 import LakeshoreModel325Curve as Model_325_Curve @@ -28,6 +31,11 @@ from typing_extensions import Unpack +@deprecated( + "Model_325 is deprecated. Please use qcodes.instrument_drivers.Lakeshore.LakeshoreModel325 instead.", + category=QCoDeSDeprecationWarning, + stacklevel=1, +) class Model_325(VisaInstrument): """ Lakeshore Model 325 Temperature Controller Driver diff --git a/src/qcodes/instrument_drivers/Lakeshore/Model_336.py b/src/qcodes/instrument_drivers/Lakeshore/Model_336.py index b2c62b522515..70980e04c4a3 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Model_336.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Model_336.py @@ -5,14 +5,15 @@ from typing import TYPE_CHECKING, Any, ClassVar +from typing_extensions import deprecated + import qcodes.validators as vals from qcodes.parameters import Group, GroupParameter +from qcodes.utils import QCoDeSDeprecationWarning -from .lakeshore_base import ( - BaseOutput, # pyright: ignore - BaseSensorChannel, # pyright: ignore - LakeshoreBase, -) +from .lakeshore_base import LakeshoreBase +from .lakeshore_base import LakeshoreBaseOutput as BaseOutput +from .lakeshore_base import LakeshoreBaseSensorChannel as BaseSensorChannel from .Lakeshore_model_336 import LakeshoreModel336Channel as Model_336_Channel from .Lakeshore_model_336 import ( LakeshoreModel336CurrentSource as Output_336_CurrentSource, @@ -28,6 +29,11 @@ from qcodes.instrument import VisaInstrumentKWArgs +@deprecated( + "Model_336 is deprecated. Please use qcodes.instrument_drivers.Lakeshore.LakeshoreModel336 instead.", + category=QCoDeSDeprecationWarning, + stacklevel=1, +) class Model_336(LakeshoreBase): """ Lakeshore Model 336 Temperature Controller Driver diff --git a/src/qcodes/instrument_drivers/Lakeshore/Model_372.py b/src/qcodes/instrument_drivers/Lakeshore/Model_372.py index 55b539d0ffaa..d532007711de 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/Model_372.py +++ b/src/qcodes/instrument_drivers/Lakeshore/Model_372.py @@ -5,13 +5,20 @@ from typing import TYPE_CHECKING, Any, ClassVar +from typing_extensions import deprecated + import qcodes.validators as vals from qcodes.instrument_drivers.Lakeshore.lakeshore_base import ( - BaseOutput, # pyright: ignore - BaseSensorChannel, # pyright: ignore LakeshoreBase, ) +from qcodes.instrument_drivers.Lakeshore.lakeshore_base import ( + LakeshoreBaseOutput as BaseOutput, +) +from qcodes.instrument_drivers.Lakeshore.lakeshore_base import ( + LakeshoreBaseSensorChannel as BaseSensorChannel, +) from qcodes.parameters import Group, GroupParameter +from qcodes.utils import QCoDeSDeprecationWarning from .Lakeshore_model_372 import LakeshoreModel372Channel as Model_372_Channel from .Lakeshore_model_372 import LakeshoreModel372Output as Output_372 @@ -25,6 +32,11 @@ _n_channels = 16 +@deprecated( + "Model_372 is deprecated. Please use qcodes.instrument_drivers.Lakeshore.LakeshoreModel372 instead.", + category=QCoDeSDeprecationWarning, + stacklevel=1, +) class Model_372(LakeshoreBase): """ Lakeshore Model 372 Temperature Controller Driver diff --git a/src/qcodes/instrument_drivers/Lakeshore/_lakeshore_model_335.py b/src/qcodes/instrument_drivers/Lakeshore/_lakeshore_model_335.py index 8529cf92702d..90867211b023 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/_lakeshore_model_335.py +++ b/src/qcodes/instrument_drivers/Lakeshore/_lakeshore_model_335.py @@ -206,7 +206,19 @@ def __init__( self.visa_handle.data_bits = 7 self.visa_handle.parity = pyvisa.constants.Parity(1) - self.output_1 = LakeshoreModel335CurrentSource(self, "output_1", 1) - self.output_2 = LakeshoreModel335CurrentSource(self, "output_2", 2) + self.output_1: LakeshoreModel335CurrentSource = self.add_submodule( + name="output_1", + submodule=LakeshoreModel335CurrentSource(self, "output_1", 1), + ) + """ + An InstrumentChannel for the first current source of Lakeshore Model 335. + """ + self.output_2 = self.add_submodule( + name="output_2", + submodule=LakeshoreModel335CurrentSource(self, "output_2", 2), + ) + """ + An InstrumentChannel for the second current source of Lakeshore Model 335. + """ self.connect_message() diff --git a/src/qcodes/instrument_drivers/Lakeshore/lakeshore_base.py b/src/qcodes/instrument_drivers/Lakeshore/lakeshore_base.py index cd95259971d7..3305230337d8 100644 --- a/src/qcodes/instrument_drivers/Lakeshore/lakeshore_base.py +++ b/src/qcodes/instrument_drivers/Lakeshore/lakeshore_base.py @@ -3,7 +3,7 @@ from typing import TYPE_CHECKING, Any, ClassVar, Generic import numpy as np -from typing_extensions import TypeVar, deprecated +from typing_extensions import TypeVar from qcodes import validators as vals from qcodes.instrument import ( @@ -14,13 +14,14 @@ VisaInstrumentKWArgs, ) from qcodes.parameters import Group, GroupParameter, Parameter -from qcodes.utils import QCoDeSDeprecationWarning if TYPE_CHECKING: from collections.abc import Sequence from typing_extensions import Unpack + from qcodes.instrument.channel import ChannelTuple + class LakeshoreBaseOutput(InstrumentChannel): MODES: ClassVar[dict[str, int]] = {} @@ -505,15 +506,6 @@ def wait_until_set_point_reached( time.sleep(wait_cycle_time) -@deprecated( - "Base class renamed to LakeshoreBaseOutput", - category=QCoDeSDeprecationWarning, - stacklevel=2, -) -class BaseOutput(LakeshoreBaseOutput): - pass - - class LakeshoreBaseSensorChannel(InstrumentChannel): # A dictionary of sensor statuses that assigns a string representation of # the status to a status bit weighting (e.g. {4: 'VMIX OVL'}) @@ -668,15 +660,6 @@ def _get_sum_terms(available_terms: "Sequence[int]", number: int) -> list[int]: return terms_in_number -@deprecated( - "Base class renamed to LakeshoreBaseSensorChannel", - category=QCoDeSDeprecationWarning, - stacklevel=2, -) -class BaseSensorChannel(LakeshoreBaseSensorChannel): - pass - - ChanType_co = TypeVar( "ChanType_co", bound=LakeshoreBaseSensorChannel, @@ -742,7 +725,9 @@ def __init__( channel = self.CHANNEL_CLASS(self, channel_name, command) channels.append(channel) self.add_submodule(channel_name, channel) - self.channels = self.add_submodule("channels", channels.to_channel_tuple()) + self.channels: ChannelTuple[ChanType_co] = self.add_submodule( + "channels", channels.to_channel_tuple() + ) """A ChannelTuple of sensor channels on the Lakeshore instrument.""" # on Model335 we need to change serial port settings diff --git a/tests/drivers/test_lakeshore_335.py b/tests/drivers/test_lakeshore_335.py index 8ddce6edb9f3..0120707befa9 100644 --- a/tests/drivers/test_lakeshore_335.py +++ b/tests/drivers/test_lakeshore_335.py @@ -4,7 +4,7 @@ from qcodes.instrument import InstrumentBase from qcodes.instrument_drivers.Lakeshore import LakeshoreModel335 -from .test_lakeshore import ( +from .test_lakeshore_372 import ( DictClass, MockVisaInstrument, command, diff --git a/tests/drivers/test_lakeshore_336.py b/tests/drivers/test_lakeshore_336.py index 8ad92cff29f5..0ba20e47b295 100644 --- a/tests/drivers/test_lakeshore_336.py +++ b/tests/drivers/test_lakeshore_336.py @@ -4,7 +4,7 @@ from qcodes.instrument import InstrumentBase from qcodes.instrument_drivers.Lakeshore import LakeshoreModel336 -from .test_lakeshore import ( +from .test_lakeshore_372 import ( DictClass, MockVisaInstrument, command, diff --git a/tests/drivers/test_lakeshore_336_legacy.py b/tests/drivers/test_lakeshore_336_legacy.py index 5bfc06423cbc..3501ce2b3f5b 100644 --- a/tests/drivers/test_lakeshore_336_legacy.py +++ b/tests/drivers/test_lakeshore_336_legacy.py @@ -2,9 +2,11 @@ import time from qcodes.instrument import InstrumentBase -from qcodes.instrument_drivers.Lakeshore.Model_336 import Model_336 +from qcodes.instrument_drivers.Lakeshore.Model_336 import ( + Model_336, # pyright: ignore[reportDeprecated] +) -from .test_lakeshore import ( +from .test_lakeshore_372 import ( DictClass, MockVisaInstrument, command, @@ -18,7 +20,7 @@ VISA_LOGGER = ".".join((InstrumentBase.__module__, "com", "visa")) -class Model_336_Mock(MockVisaInstrument, Model_336): +class Model_336_Mock(MockVisaInstrument, Model_336): # pyright: ignore[reportDeprecated] def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) diff --git a/tests/drivers/test_lakeshore.py b/tests/drivers/test_lakeshore_372.py similarity index 98% rename from tests/drivers/test_lakeshore.py rename to tests/drivers/test_lakeshore_372.py index 04f8ed6e50dd..4f59e3f3d1ae 100644 --- a/tests/drivers/test_lakeshore.py +++ b/tests/drivers/test_lakeshore_372.py @@ -11,10 +11,10 @@ from typing_extensions import ParamSpec from qcodes.instrument import InstrumentBase +from qcodes.instrument_drivers.Lakeshore import LakeshoreModel372 from qcodes.instrument_drivers.Lakeshore.lakeshore_base import ( LakeshoreBaseSensorChannel, ) -from qcodes.instrument_drivers.Lakeshore.Model_372 import Model_372 from qcodes.logger import get_instrument_logger from qcodes.utils import QCoDeSDeprecationWarning @@ -138,7 +138,7 @@ def __setattr__(self, name: str, value: Any) -> None: self._attrs[name] = value -class Model_372_Mock(MockVisaInstrument, Model_372): +class LakeshoreModel372Mock(MockVisaInstrument, LakeshoreModel372): def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) @@ -365,7 +365,7 @@ def wrapped_fixture(): @instrument_fixture(scope="function") def lakeshore_372(): - return Model_372_Mock( + return LakeshoreModel372Mock( "lakeshore_372_fixture", "GPIB::3::INSTR", pyvisa_sim_file="lakeshore_model372.yaml", diff --git a/tests/test_logger.py b/tests/test_logger.py index 35cf8a933958..a148a9657caa 100644 --- a/tests/test_logger.py +++ b/tests/test_logger.py @@ -17,7 +17,7 @@ from qcodes.instrument_drivers.american_magnetics import AMIModel430, AMIModel4303D from qcodes.instrument_drivers.tektronix import TektronixAWG5208 from qcodes.logger.log_analysis import capture_dataframe -from tests.drivers.test_lakeshore import Model_372_Mock +from tests.drivers.test_lakeshore_372 import LakeshoreModel372Mock if TYPE_CHECKING: from collections.abc import Callable, Generator @@ -58,8 +58,8 @@ def awg5208(caplog: LogCaptureFixture) -> "Generator[TektronixAWG5208, None, Non @pytest.fixture -def model372() -> "Generator[Model_372_Mock, None, None]": - inst = Model_372_Mock( +def model372() -> "Generator[LakeshoreModel372Mock, None, None]": + inst = LakeshoreModel372Mock( "lakeshore_372", "GPIB::3::INSTR", pyvisa_sim_file="lakeshore_model372.yaml", @@ -231,7 +231,7 @@ def test_capture_dataframe() -> None: assert df.message[0] == TEST_LOG_MESSAGE -def test_channels(model372: Model_372_Mock) -> None: +def test_channels(model372: LakeshoreModel372Mock) -> None: """ Test that messages logged in a channel are propagated to the main instrument. @@ -265,7 +265,7 @@ def test_channels(model372: Model_372_Mock) -> None: assert f == u -def test_channels_nomessages(model372: Model_372_Mock) -> None: +def test_channels_nomessages(model372: LakeshoreModel372Mock) -> None: """ Test that messages logged in a channel are not propagated to any instrument. diff --git a/tests/test_station.py b/tests/test_station.py index 1b5be2406386..8fab32294554 100644 --- a/tests/test_station.py +++ b/tests/test_station.py @@ -280,7 +280,7 @@ def _make_example_station_config(): test_config = f""" instruments: lakeshore: - type: qcodes.instrument_drivers.Lakeshore.Model_336.Model_336 + type: qcodes.instrument_drivers.Lakeshore.LakeshoreModel336 enable_forced_reconnect: true address: GPIB::2::INSTR init: @@ -540,7 +540,7 @@ def test_init_parameters() -> None: f""" instruments: lakeshore: - type: qcodes.instrument_drivers.Lakeshore.Model_336.Model_336 + type: qcodes.instrument_drivers.Lakeshore.LakeshoreModel336 enable_forced_reconnect: true address: GPIB::2::INSTR init: