diff --git a/cirq-superstaq/cirq_superstaq/service.py b/cirq-superstaq/cirq_superstaq/service.py index 7f5c8b6c3..f8e52cbb7 100644 --- a/cirq-superstaq/cirq_superstaq/service.py +++ b/cirq-superstaq/cirq_superstaq/service.py @@ -753,6 +753,9 @@ def ibmq_compile( if not target.startswith("ibmq_"): raise ValueError(f"{target!r} is not a valid IBMQ target.") + options = {"dynamical_decoupling": dynamical_decoupling, "dd_strategy": dd_strategy} + kwargs.update(options) + return self.compile(circuits, target=target, **kwargs) def compile( diff --git a/cirq-superstaq/cirq_superstaq/service_test.py b/cirq-superstaq/cirq_superstaq/service_test.py index 129ecaa9a..c6fea6abf 100644 --- a/cirq-superstaq/cirq_superstaq/service_test.py +++ b/cirq-superstaq/cirq_superstaq/service_test.py @@ -661,7 +661,16 @@ def test_service_ibmq_compile(mock_post: mock.MagicMock) -> None: "final_logical_to_physicals": cirq.to_json([list(final_logical_to_physical.items())]), } - assert service.ibmq_compile(circuit, test_options="yes").circuit == circuit + assert ( + service.ibmq_compile(circuit, dd_strategy="dynamic", test_options="yes").circuit == circuit + ) + + assert json.loads(mock_post.call_args.kwargs["json"]["options"]) == { + "dd_strategy": "dynamic", + "dynamical_decoupling": True, + "test_options": "yes", + } + assert service.ibmq_compile([circuit]).circuits == [circuit] assert service.ibmq_compile(circuit).pulse_sequence == mock.DEFAULT assert service.ibmq_compile([circuit]).pulse_sequences == [mock.DEFAULT] diff --git a/qiskit-superstaq/qiskit_superstaq/superstaq_backend.py b/qiskit-superstaq/qiskit_superstaq/superstaq_backend.py index a03f421b8..80b8d1b09 100644 --- a/qiskit-superstaq/qiskit_superstaq/superstaq_backend.py +++ b/qiskit-superstaq/qiskit_superstaq/superstaq_backend.py @@ -288,6 +288,7 @@ def ibmq_compile( options: Dict[str, Any] = {**kwargs} options["dynamical_decoupling"] = dynamical_decoupling + options["dd_strategy"] = dd_strategy request_json = self._get_compile_request_json(circuits, **options) circuits_is_list = not isinstance(circuits, qiskit.QuantumCircuit) json_dict = self._provider._client.compile(request_json) diff --git a/qiskit-superstaq/qiskit_superstaq/superstaq_backend_test.py b/qiskit-superstaq/qiskit_superstaq/superstaq_backend_test.py index fde7194a3..f1ad943b5 100644 --- a/qiskit-superstaq/qiskit_superstaq/superstaq_backend_test.py +++ b/qiskit-superstaq/qiskit_superstaq/superstaq_backend_test.py @@ -218,8 +218,15 @@ def test_ibmq_compile(mock_post: MagicMock) -> None: "pulses": gss.serialization.serialize([DEFAULT]), } assert backend.compile( - qiskit.QuantumCircuit(), test_options="yes" + qiskit.QuantumCircuit(), dd_strategy="static", test_options="yes" ) == qss.compiler_output.CompilerOutput(qc, final_logical_to_physical, pulse_sequences=DEFAULT) + + assert json.loads(mock_post.call_args.kwargs["json"]["options"]) == { + "dd_strategy": "static", + "dynamical_decoupling": True, + "test_options": "yes", + } + assert backend.compile([qiskit.QuantumCircuit()]) == qss.compiler_output.CompilerOutput( [qc], [final_logical_to_physical], pulse_sequences=[DEFAULT] ) diff --git a/qiskit-superstaq/qiskit_superstaq/superstaq_provider.py b/qiskit-superstaq/qiskit_superstaq/superstaq_provider.py index d603f631b..f6c2a84c5 100644 --- a/qiskit-superstaq/qiskit_superstaq/superstaq_provider.py +++ b/qiskit-superstaq/qiskit_superstaq/superstaq_provider.py @@ -294,6 +294,9 @@ def ibmq_compile( if not target.startswith("ibmq_"): raise ValueError(f"{target!r} is not a valid IBMQ target.") + options = {"dynamical_decoupling": dynamical_decoupling, "dd_strategy": dd_strategy} + kwargs.update(options) + return self.get_backend(target).compile(circuits, **kwargs) def qscout_compile( diff --git a/qiskit-superstaq/qiskit_superstaq/superstaq_provider_test.py b/qiskit-superstaq/qiskit_superstaq/superstaq_provider_test.py index 40f3645e8..67a15583a 100644 --- a/qiskit-superstaq/qiskit_superstaq/superstaq_provider_test.py +++ b/qiskit-superstaq/qiskit_superstaq/superstaq_provider_test.py @@ -161,6 +161,15 @@ def test_ibmq_compile(mock_post: MagicMock, fake_superstaq_provider: MockSuperst [qiskit.QuantumCircuit()] ) == qss.compiler_output.CompilerOutput([qc], [final_logical_to_physical], pulse_sequences=None) + assert fake_superstaq_provider.ibmq_compile( + qiskit.QuantumCircuit(), dd_strategy="static", test_options="yes" + ) == qss.compiler_output.CompilerOutput(qc, final_logical_to_physical, pulse_sequences=None) + assert json.loads(mock_post.call_args.kwargs["json"]["options"]) == { + "dd_strategy": "static", + "dynamical_decoupling": True, + "test_options": "yes", + } + def test_invalid_target_ibmq_compile() -> None: provider = qss.SuperstaqProvider(api_key="MY_TOKEN")