From 0a16d16c88de6712a0915294f3ab63865df41599 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Wed, 17 Jul 2024 13:12:12 -0400 Subject: [PATCH 1/2] Use Aer's SamplerV2 instead of SamplerV1 Addresses part of #506 --- test/cutting/test_cutting_roundtrip.py | 5 +++-- test/cutting/test_cutting_workflows.py | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/test/cutting/test_cutting_roundtrip.py b/test/cutting/test_cutting_roundtrip.py index 6ea7547cb..4fcdd101a 100644 --- a/test/cutting/test_cutting_roundtrip.py +++ b/test/cutting/test_cutting_roundtrip.py @@ -42,7 +42,7 @@ ) from qiskit.quantum_info import PauliList, random_unitary from qiskit.primitives import Estimator -from qiskit_aer.primitives import Sampler +from qiskit_aer.primitives import Sampler, SamplerV2 from circuit_knitting.utils.simulation import ExactSampler from circuit_knitting.cutting import ( @@ -172,7 +172,8 @@ def test_cutting_exact_reconstruction(example_circuit): @pytest.mark.parametrize( - "sampler,is_exact_sampler", [(Sampler(), False), (ExactSampler(), True)] + "sampler,is_exact_sampler", + [(Sampler(), False), (SamplerV2(), False), (ExactSampler(), True)], ) def test_sampler_with_identity_subobservable(sampler, is_exact_sampler): """This test ensures that the sampler works for a subcircuit with no observable measurements. diff --git a/test/cutting/test_cutting_workflows.py b/test/cutting/test_cutting_workflows.py index c34d14015..71c0e3b9b 100644 --- a/test/cutting/test_cutting_workflows.py +++ b/test/cutting/test_cutting_workflows.py @@ -21,7 +21,7 @@ from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import GenericBackendV2 from qiskit_ibm_runtime import SamplerV2 -from qiskit_aer.primitives import Sampler +from qiskit_aer.primitives import SamplerV2 as AerSamplerV2 from qiskit_aer import AerSimulator from circuit_knitting.cutting.qpd.instructions import SingleQubitQPDGate @@ -89,8 +89,8 @@ def test_exotic_labels(label1, label2): assert subexperiments.keys() == subcircuits.keys() samplers = { - label1: Sampler(run_options={"shots": 10}), - label2: Sampler(run_options={"shots": 10}), + label1: AerSamplerV2(run_options={"shots": 10}), + label2: AerSamplerV2(run_options={"shots": 10}), } results = { label: sampler.run(subexperiments[label]).result() From 4ae8e39f8421bb2212d25128a03828d1b1b4a3cf Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Wed, 17 Jul 2024 14:25:08 -0400 Subject: [PATCH 2/2] `qiskit_aer.primitives.SamplerV2` does not support mid-circuit measurements so we use runtime `SamplerV2` with `AerSimulator` as the backend instead --- test/cutting/test_cutting_roundtrip.py | 6 ++++-- test/cutting/test_cutting_workflows.py | 7 +++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/test/cutting/test_cutting_roundtrip.py b/test/cutting/test_cutting_roundtrip.py index 4fcdd101a..d1f5b638d 100644 --- a/test/cutting/test_cutting_roundtrip.py +++ b/test/cutting/test_cutting_roundtrip.py @@ -42,7 +42,9 @@ ) from qiskit.quantum_info import PauliList, random_unitary from qiskit.primitives import Estimator -from qiskit_aer.primitives import Sampler, SamplerV2 +from qiskit_ibm_runtime import SamplerV2 +from qiskit_aer import AerSimulator +from qiskit_aer.primitives import Sampler from circuit_knitting.utils.simulation import ExactSampler from circuit_knitting.cutting import ( @@ -173,7 +175,7 @@ def test_cutting_exact_reconstruction(example_circuit): @pytest.mark.parametrize( "sampler,is_exact_sampler", - [(Sampler(), False), (SamplerV2(), False), (ExactSampler(), True)], + [(Sampler(), False), (SamplerV2(AerSimulator()), False), (ExactSampler(), True)], ) def test_sampler_with_identity_subobservable(sampler, is_exact_sampler): """This test ensures that the sampler works for a subcircuit with no observable measurements. diff --git a/test/cutting/test_cutting_workflows.py b/test/cutting/test_cutting_workflows.py index 71c0e3b9b..406d92816 100644 --- a/test/cutting/test_cutting_workflows.py +++ b/test/cutting/test_cutting_workflows.py @@ -21,7 +21,6 @@ from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.providers.fake_provider import GenericBackendV2 from qiskit_ibm_runtime import SamplerV2 -from qiskit_aer.primitives import SamplerV2 as AerSamplerV2 from qiskit_aer import AerSimulator from circuit_knitting.cutting.qpd.instructions import SingleQubitQPDGate @@ -89,11 +88,11 @@ def test_exotic_labels(label1, label2): assert subexperiments.keys() == subcircuits.keys() samplers = { - label1: AerSamplerV2(run_options={"shots": 10}), - label2: AerSamplerV2(run_options={"shots": 10}), + label1: SamplerV2(AerSimulator()), + label2: SamplerV2(AerSimulator()), } results = { - label: sampler.run(subexperiments[label]).result() + label: sampler.run(subexperiments[label], shots=10).result() for label, sampler in samplers.items() }