From 1f8037829f148b76ddaac09adb0e1d78ca020035 Mon Sep 17 00:00:00 2001 From: Stavros Efthymiou <35475381+stavros11@users.noreply.github.com> Date: Sun, 23 Feb 2025 20:07:57 +0400 Subject: [PATCH 1/2] test: add test for create_platform when Hardware is used --- src/qibolab/_core/dummy/platform.py | 15 ++++++++++----- tests/dummy_hardware/platform.py | 16 ++++++++++++++++ tests/test_platform.py | 8 ++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 tests/dummy_hardware/platform.py diff --git a/src/qibolab/_core/dummy/platform.py b/src/qibolab/_core/dummy/platform.py index e4c40330a..8cab902ac 100644 --- a/src/qibolab/_core/dummy/platform.py +++ b/src/qibolab/_core/dummy/platform.py @@ -2,14 +2,15 @@ from qibolab._core.components import AcquisitionChannel, DcChannel, IqChannel from qibolab._core.instruments.dummy import DummyInstrument, DummyLocalOscillator +from qibolab._core.parameters import Hardware from qibolab._core.platform import Platform from qibolab._core.qubits import Qubit FOLDER = pathlib.Path(__file__).parent -def create_dummy() -> Platform: - """Create a dummy platform using the dummy instrument.""" +def create_dummy_hardware() -> Hardware: + """Create dummy hardware configuration based on the dummy instrument.""" qubits = {} channels = {} # attach the channels @@ -38,6 +39,10 @@ def create_dummy() -> Platform: pump_name: DummyLocalOscillator(address="0.0.0.0"), } - return Platform.load( - path=FOLDER, instruments=instruments, qubits=qubits, couplers=couplers - ) + return Hardware(instruments=instruments, qubits=qubits, couplers=couplers) + + +def create_dummy() -> Platform: + """Create a dummy platform using the dummy instrument.""" + hardware = create_dummy_hardware() + return Platform.load(path=FOLDER, **vars(hardware)) diff --git a/tests/dummy_hardware/platform.py b/tests/dummy_hardware/platform.py new file mode 100644 index 000000000..5fe23dc6e --- /dev/null +++ b/tests/dummy_hardware/platform.py @@ -0,0 +1,16 @@ +"""Dummy platform to test loading via ``Hardware`` object.""" + +from pathlib import Path + +from qibolab import Hardware, initialize_parameters +from qibolab._core.dummy.platform import create_dummy_hardware +from qibolab._core.platform.platform import PARAMETERS + + +def create() -> Hardware: + hardware = create_dummy_hardware() + parameters = initialize_parameters(hardware=hardware) + (Path(__file__).parent / PARAMETERS).write_text( + parameters.model_dump_json(indent=4) + ) + return hardware diff --git a/tests/test_platform.py b/tests/test_platform.py index 14d32fab4..f68453387 100644 --- a/tests/test_platform.py +++ b/tests/test_platform.py @@ -35,6 +35,14 @@ def test_create_platform_error(): _ = create_platform("nonexistent") +def test_create_platform_from_hardware(): + original_value = os.environ.get(PLATFORMS) + os.environ[PLATFORMS] = str(Path(__file__).parent) + _ = create_platform("dummy_hardware") + os.remove(Path(__file__).parent / "dummy_hardware" / PARAMETERS) + os.environ[PLATFORMS] = original_value + + def test_platform_basics(): platform = Platform( name="ciao", From fa1b22e26d91b4d341220c3a71c5c3020d87128b Mon Sep 17 00:00:00 2001 From: Stavros Efthymiou <35475381+stavros11@users.noreply.github.com> Date: Mon, 24 Feb 2025 17:49:39 +0400 Subject: [PATCH 2/2] refactor: use fixture and monkeypatch for dummy hardware --- tests/dummy_hardware/platform.py | 12 ++---------- tests/test_platform.py | 24 ++++++++++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/dummy_hardware/platform.py b/tests/dummy_hardware/platform.py index 5fe23dc6e..ce4f6ed7f 100644 --- a/tests/dummy_hardware/platform.py +++ b/tests/dummy_hardware/platform.py @@ -1,16 +1,8 @@ """Dummy platform to test loading via ``Hardware`` object.""" -from pathlib import Path - -from qibolab import Hardware, initialize_parameters +from qibolab import Hardware from qibolab._core.dummy.platform import create_dummy_hardware -from qibolab._core.platform.platform import PARAMETERS def create() -> Hardware: - hardware = create_dummy_hardware() - parameters = initialize_parameters(hardware=hardware) - (Path(__file__).parent / PARAMETERS).write_text( - parameters.model_dump_json(indent=4) - ) - return hardware + return create_dummy_hardware() diff --git a/tests/test_platform.py b/tests/test_platform.py index f68453387..88f4f66e6 100644 --- a/tests/test_platform.py +++ b/tests/test_platform.py @@ -9,11 +9,11 @@ from qibo.models import Circuit from qibo.result import CircuitResult -from qibolab import create_platform +from qibolab import create_platform, initialize_parameters from qibolab._core.backends import QibolabBackend from qibolab._core.components import AcquisitionConfig, IqConfig, OscillatorConfig from qibolab._core.dummy import create_dummy -from qibolab._core.dummy.platform import FOLDER +from qibolab._core.dummy.platform import FOLDER, create_dummy_hardware from qibolab._core.native import SingleQubitNatives, TwoQubitNatives from qibolab._core.parameters import NativeGates, Parameters, update_configs from qibolab._core.platform import Platform @@ -35,12 +35,20 @@ def test_create_platform_error(): _ = create_platform("nonexistent") -def test_create_platform_from_hardware(): - original_value = os.environ.get(PLATFORMS) - os.environ[PLATFORMS] = str(Path(__file__).parent) - _ = create_platform("dummy_hardware") - os.remove(Path(__file__).parent / "dummy_hardware" / PARAMETERS) - os.environ[PLATFORMS] = original_value +@pytest.fixture +def dummy_hardware(monkeypatch): + parameters = initialize_parameters(hardware=create_dummy_hardware()) + path = Path(__file__).parent / "dummy_hardware" / PARAMETERS + path.write_text(parameters.model_dump_json(indent=4)) + monkeypatch.setenv(PLATFORMS, str(Path(__file__).parent)) + yield + path.unlink() + + +def test_create_platform_from_hardware(dummy_hardware): + platform = create_platform("dummy_hardware") + assert isinstance(platform, Platform) + assert list(platform.qubits.keys()) == list(range(5)) def test_platform_basics():