diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index 64cfaed761d0..092b9ed2da41 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -29,10 +29,8 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] - python-version: ["3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] exclude: - - os: windows-latest - python-version: 3.11 - os: windows-latest python-version: 3.13 - os: windows-latest @@ -122,7 +120,7 @@ jobs: - name: Download artifact uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: - name: docs_3.11_ubuntu-latest + name: docs_3.12_ubuntu-latest path: build_docs - name: Deploy to gh pages diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index 7d940a0ccf5f..6de2b26f0dd0 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -30,17 +30,13 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] - python-version: ["3.11", "3.12", "3.13", "3.14"] + python-version: ["3.12", "3.13", "3.14"] min-version: [false] include: - os: ubuntu-latest - python-version: "3.11" + python-version: "3.12" min-version: true exclude: - - os: ubuntu-latest - python-version: "3.11" - - os: windows-latest - python-version: "3.11" - os: windows-latest python-version: "3.13" - os: windows-latest diff --git a/.github/workflows/upload_to_pypi.yaml b/.github/workflows/upload_to_pypi.yaml index fe538c3918bf..ccac29ccda20 100644 --- a/.github/workflows/upload_to_pypi.yaml +++ b/.github/workflows/upload_to_pypi.yaml @@ -25,7 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 with: - python-version: '3.11' + python-version: '3.12' - name: Install build deps run: pip install --upgrade pip setuptools wheel build - name: Build diff --git a/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb b/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb index b3b9bcbf9247..cbf428624b09 100644 --- a/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb +++ b/docs/examples/writing_drivers/A-ParameterWithSetpoints-Example-with-Dual-Setpoints.ipynb @@ -21,7 +21,7 @@ "from typing import TYPE_CHECKING\n", "\n", "if TYPE_CHECKING:\n", - " from typing_extensions import Unpack\n", + " from typing import Unpack\n", "\n", "import numpy as np\n", "import numpy.typing as npt\n", diff --git a/docs/examples/writing_drivers/Creating-Instrument-Drivers.ipynb b/docs/examples/writing_drivers/Creating-Instrument-Drivers.ipynb index ed0e65d11955..62d7174e64c8 100644 --- a/docs/examples/writing_drivers/Creating-Instrument-Drivers.ipynb +++ b/docs/examples/writing_drivers/Creating-Instrument-Drivers.ipynb @@ -21,9 +21,7 @@ "from typing import TYPE_CHECKING, Any\n", "\n", "if TYPE_CHECKING:\n", - " from typing_extensions import (\n", - " Unpack, # can be imported from typing if python >= 3.12\n", - " )\n", + " from typing import Unpack\n", "\n", "import numpy as np\n", "\n", diff --git a/docs/examples/writing_drivers/Creating-Simulated-PyVISA-Instruments.ipynb b/docs/examples/writing_drivers/Creating-Simulated-PyVISA-Instruments.ipynb index 69cbec180a4c..03a841739330 100644 --- a/docs/examples/writing_drivers/Creating-Simulated-PyVISA-Instruments.ipynb +++ b/docs/examples/writing_drivers/Creating-Simulated-PyVISA-Instruments.ipynb @@ -74,7 +74,7 @@ "from qcodes.instrument.visa import VisaInstrument, VisaInstrumentKWArgs\n", "\n", "if TYPE_CHECKING:\n", - " from typing_extensions import Unpack\n", + " from typing import Unpack\n", "\n", "\n", "class Weinschel8320(VisaInstrument):\n", diff --git a/pyproject.toml b/pyproject.toml index 4515823ee8db..4bb89440662c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,6 @@ classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", @@ -21,20 +20,20 @@ classifiers = [ ] license = "MIT" readme = "README.rst" -requires-python = ">=3.11" +requires-python = ">=3.12" dependencies = [ "broadbean>=0.11.0", - "h5netcdf>=0.14.1", - "h5py>=3.8.0", + "h5netcdf>=1.3.0", + "h5py>=3.10.0", "ipywidgets>=8.0.0,<9.0.0", "ipykernel>=6.12.0", # implicitly required by ipywidgets >=8.0.5 "jsonschema>=4.9.0", - "matplotlib>=3.6.0", + "matplotlib>=3.8.0", "networkx>=3.1", - "numpy>=1.22.4", + "numpy>=1.26.0", "packaging>=20.0", - "pandas>=1.5.0", - "pyarrow>=11.0.0", # will become a requirement of pandas. Installing explicitly silences a warning + "pandas>=2.1.1", + "pyarrow>=14.0.0", # will become a requirement of pandas. Installing explicitly silences a warning "pyvisa>=1.12.0, <1.17.0", "ruamel.yaml>=0.16.0,!=0.16.6", "tabulate>=0.9.0", @@ -46,7 +45,7 @@ dependencies = [ "xarray>=2023.08.0", "cf_xarray>=0.8.4", "opentelemetry-api>=1.17.0", - "pillow>=9.2.0", + "pillow>=10.2.0", "dask>=2022.1.0", # we are making use of xarray features that requires dask implicitly ] @@ -100,7 +99,7 @@ docs = [ "furo>=2024.8.6", "sphinxcontrib-towncrier>=0.5.0a0", "towncrier>=24.8.0,<26.0.0", # sphinxcontrib-towncrier is likely to break with new versions - "scipy>=1.10.0", # examples using scipy + "scipy>=1.12.0", # examples using scipy "qcodes_loop>=0.1.1", # legacy dataset import examples "intersphinx_registry>=0.2603.16" ] @@ -219,7 +218,6 @@ markers = "serial" # and error on all other warnings filterwarnings = [ 'error', - 'ignore:open_binary is deprecated:DeprecationWarning', # pyvisa-sim deprecated in 3.11 un-deprecated in 3.12. Drop filter once we drop support for 3.11 'ignore:unclosed database in:ResourceWarning', # internal should be fixed 'ignore:unclosed\ str: diff --git a/src/qcodes/instrument_drivers/tektronix/TPS2012.py b/src/qcodes/instrument_drivers/tektronix/TPS2012.py index 3b373dc3d1d6..9de61876de19 100644 --- a/src/qcodes/instrument_drivers/tektronix/TPS2012.py +++ b/src/qcodes/instrument_drivers/tektronix/TPS2012.py @@ -1,12 +1,12 @@ import binascii import logging from functools import partial -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Unpack import numpy as np import numpy.typing as npt from pyvisa.errors import VisaIOError -from typing_extensions import TypedDict, Unpack +from typing_extensions import TypedDict from qcodes import validators as vals from qcodes.instrument import ( diff --git a/src/qcodes/instrument_drivers/tektronix/Tektronix_70001A.py b/src/qcodes/instrument_drivers/tektronix/Tektronix_70001A.py index 98171d9119e5..967909786862 100644 --- a/src/qcodes/instrument_drivers/tektronix/Tektronix_70001A.py +++ b/src/qcodes/instrument_drivers/tektronix/Tektronix_70001A.py @@ -3,7 +3,7 @@ from .AWG70000A import TektronixAWG70000Base if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import VisaInstrumentKWArgs diff --git a/src/qcodes/instrument_drivers/tektronix/Tektronix_70001B.py b/src/qcodes/instrument_drivers/tektronix/Tektronix_70001B.py index f229f516f6a5..571d68876741 100644 --- a/src/qcodes/instrument_drivers/tektronix/Tektronix_70001B.py +++ b/src/qcodes/instrument_drivers/tektronix/Tektronix_70001B.py @@ -3,7 +3,7 @@ from .AWG70000A import TektronixAWG70000Base if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import VisaInstrumentKWArgs diff --git a/src/qcodes/instrument_drivers/tektronix/Tektronix_70002B.py b/src/qcodes/instrument_drivers/tektronix/Tektronix_70002B.py index 3c9483ecc8c6..db13806a12f8 100644 --- a/src/qcodes/instrument_drivers/tektronix/Tektronix_70002B.py +++ b/src/qcodes/instrument_drivers/tektronix/Tektronix_70002B.py @@ -3,7 +3,7 @@ from .AWG70000A import TektronixAWG70000Base if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import VisaInstrumentKWArgs diff --git a/src/qcodes/instrument_drivers/weinschel/Weinschel_8320.py b/src/qcodes/instrument_drivers/weinschel/Weinschel_8320.py index 47f5b8de7c39..f06b8e1c2c57 100644 --- a/src/qcodes/instrument_drivers/weinschel/Weinschel_8320.py +++ b/src/qcodes/instrument_drivers/weinschel/Weinschel_8320.py @@ -9,7 +9,7 @@ from qcodes.utils.deprecate import QCoDeSDeprecationWarning if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack class Weinschel8320(VisaInstrument): diff --git a/src/qcodes/instrument_drivers/yokogawa/GS200.py b/src/qcodes/instrument_drivers/yokogawa/GS200.py index 908ab1268b9f..1fcc3731d5ca 100644 --- a/src/qcodes/instrument_drivers/yokogawa/GS200.py +++ b/src/qcodes/instrument_drivers/yokogawa/GS200.py @@ -19,7 +19,7 @@ from qcodes.validators import Bool, Enum, Ints, Numbers if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack from qcodes.parameters import Parameter diff --git a/src/qcodes/instrument_drivers/yokogawa/Yokogawa_GS200.py b/src/qcodes/instrument_drivers/yokogawa/Yokogawa_GS200.py index 93e45d61c4e4..488ca8e3d9db 100644 --- a/src/qcodes/instrument_drivers/yokogawa/Yokogawa_GS200.py +++ b/src/qcodes/instrument_drivers/yokogawa/Yokogawa_GS200.py @@ -23,9 +23,7 @@ ) if TYPE_CHECKING: - from typing import assert_never - - from typing_extensions import Unpack + from typing import Unpack, assert_never from qcodes.parameters import Parameter diff --git a/src/qcodes/parameters/array_parameter.py b/src/qcodes/parameters/array_parameter.py index 8d4782cf1b12..196fd600b01c 100644 --- a/src/qcodes/parameters/array_parameter.py +++ b/src/qcodes/parameters/array_parameter.py @@ -24,8 +24,7 @@ if TYPE_CHECKING: from collections.abc import Sequence - - from typing_extensions import Unpack + from typing import Unpack try: diff --git a/src/qcodes/parameters/delegate_parameter.py b/src/qcodes/parameters/delegate_parameter.py index 35f8b44bb971..566a42f22b1f 100644 --- a/src/qcodes/parameters/delegate_parameter.py +++ b/src/qcodes/parameters/delegate_parameter.py @@ -10,8 +10,7 @@ if TYPE_CHECKING: from collections.abc import Sequence from datetime import datetime - - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import InstrumentBase from qcodes.validators.validators import Validator diff --git a/src/qcodes/parameters/group_parameter.py b/src/qcodes/parameters/group_parameter.py index a179fa76fb75..0759b3225f82 100644 --- a/src/qcodes/parameters/group_parameter.py +++ b/src/qcodes/parameters/group_parameter.py @@ -13,8 +13,7 @@ if TYPE_CHECKING: from collections.abc import Callable, Mapping, Sequence - - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import InstrumentBase diff --git a/src/qcodes/parameters/grouped_parameter.py b/src/qcodes/parameters/grouped_parameter.py index b47c4142be43..9173feec8488 100644 --- a/src/qcodes/parameters/grouped_parameter.py +++ b/src/qcodes/parameters/grouped_parameter.py @@ -15,8 +15,7 @@ if TYPE_CHECKING: from collections.abc import Callable, Iterable, Mapping, Sequence - - from typing_extensions import Unpack + from typing import Unpack from .parameter import Parameter, ParameterKWArgs diff --git a/src/qcodes/parameters/multi_parameter.py b/src/qcodes/parameters/multi_parameter.py index b8f2139502bf..448534a51088 100644 --- a/src/qcodes/parameters/multi_parameter.py +++ b/src/qcodes/parameters/multi_parameter.py @@ -15,7 +15,7 @@ from .sequence_helpers import is_sequence_of if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack try: from qcodes_loop.data.data_array import DataArray diff --git a/src/qcodes/parameters/parameter.py b/src/qcodes/parameters/parameter.py index 7bcfbf304a58..11882689cee4 100644 --- a/src/qcodes/parameters/parameter.py +++ b/src/qcodes/parameters/parameter.py @@ -22,9 +22,7 @@ if TYPE_CHECKING: from collections.abc import Callable, Iterable, Mapping - from typing import NotRequired - - from typing_extensions import Unpack + from typing import NotRequired, Unpack from qcodes.logger.instrument_logger import InstrumentLoggerAdapter from qcodes.parameters import ParamSpecBase diff --git a/src/qcodes/parameters/parameter_with_setpoints.py b/src/qcodes/parameters/parameter_with_setpoints.py index 5207089c5f1e..4b684c9acd89 100644 --- a/src/qcodes/parameters/parameter_with_setpoints.py +++ b/src/qcodes/parameters/parameter_with_setpoints.py @@ -19,8 +19,7 @@ if TYPE_CHECKING: from collections.abc import Callable, Sequence - - from typing_extensions import Unpack + from typing import Unpack from qcodes.dataset.data_set_protocol import ValuesType from qcodes.parameters.parameter_base import ParamDataType, ParameterBase diff --git a/src/qcodes/parameters/specialized_parameters.py b/src/qcodes/parameters/specialized_parameters.py index 344470f09a89..bb039c157768 100644 --- a/src/qcodes/parameters/specialized_parameters.py +++ b/src/qcodes/parameters/specialized_parameters.py @@ -14,7 +14,7 @@ from .parameter import Parameter, ParameterKWArgs if TYPE_CHECKING: - from typing_extensions import Unpack + from typing import Unpack from qcodes.instrument import InstrumentBase diff --git a/tests/test_channels.py b/tests/test_channels.py index 9c5cb18f0ae7..b15567a5ec8c 100644 --- a/tests/test_channels.py +++ b/tests/test_channels.py @@ -20,8 +20,9 @@ ) if TYPE_CHECKING: + from typing import Unpack + import pytest_mock - from typing_extensions import Unpack from qcodes.instrument.instrument_base import InstrumentBaseKWArgs