Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 9 additions & 7 deletions projectq/backends/_azure/_azure_quantum.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,17 +201,19 @@ def is_available(self, cmd):

return False # pragma: no cover

@property
def _target_factory(self):
@staticmethod
def _target_factory(workspace, target_name, provider_id): # pragma: no cover
target_factory = TargetFactory(
base_cls=Target, workspace=self._workspace, default_targets=AzureQuantumBackend.DEFAULT_TARGETS
base_cls=Target, workspace=workspace, default_targets=AzureQuantumBackend.DEFAULT_TARGETS
)

return target_factory
return target_factory.get_targets(name=target_name, provider_id=provider_id)

@property
def _target(self):
target = self._target_factory.get_targets(name=self._target_name, provider_id=self._provider_id)
target = self._target_factory(
workspace=self._workspace, target_name=self._target_name, provider_id=self._provider_id
)

if isinstance(target, list) and len(target) == 0: # pragma: no cover
raise AzureQuantumTargetNotFoundError(
Expand Down Expand Up @@ -328,7 +330,7 @@ def _run(self): # pylint: disable=too-many-locals
verbose=self._verbose,
)

if res is None:
if res is None: # pragma: no cover
raise RuntimeError('Failed to submit job to the Azure Quantum!')
else:
res = retrieve(
Expand All @@ -339,7 +341,7 @@ def _run(self): # pylint: disable=too-many-locals
verbose=self._verbose,
)

if res is None:
if res is None: # pragma: no cover
raise RuntimeError(
f"Failed to retrieve job from Azure Quantum with job id: '{self._retrieve_execution}'!"
)
Expand Down
34 changes: 33 additions & 1 deletion projectq/backends/_azure/_azure_quantum_client_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import pytest

from projectq.backends._exceptions import DeviceOfflineError
from .._exceptions import DeviceOfflineError, RequestTimeoutError

_has_azure_quantum = True
try:
Expand Down Expand Up @@ -381,3 +381,35 @@ def get_mock_target():
actual_res = retrieve(job_id=ZERO_GUID, target=get_mock_target(), num_retries=1000, interval=1, verbose=True)

assert actual_res == expected_res


@has_azure_quantum
def test_send_timeout_error():
def get_mock_target():
mock_job = mock.MagicMock()
mock_job.id = ZERO_GUID
mock_job.get_results = mock.MagicMock()
mock_job.get_results.side_effect = TimeoutError()

mock_target = mock.MagicMock()
mock_target.current_availability = 'Available'
mock_target.submit = mock.MagicMock(return_value=mock_job)

return mock_target

input_data = {
'qubits': 3,
'circuit': [{'gate': 'h', 'targets': [0]}, {'gate': 'h', 'targets': [1]}, {'gate': 'h', 'targets': [2]}],
}
metadata = {'num_qubits': 3, 'meas_map': [0, 1, 2]}

with pytest.raises(RequestTimeoutError):
_ = send(
input_data=input_data,
metadata=metadata,
num_shots=100,
target=get_mock_target(),
num_retries=1000,
interval=1,
verbose=True,
)
Loading