Skip to content

Commit 0de943c

Browse files
authored
change: handling capability upgrade issues (#1075)
1 parent 08fe69c commit 0de943c

File tree

2 files changed

+33
-7
lines changed

2 files changed

+33
-7
lines changed

src/braket/aws/aws_device.py

+16-7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from enum import Enum
2323
from typing import Any, ClassVar, Optional
2424

25+
import pydantic
2526
from botocore.errorfactory import ClientError
2627
from networkx import DiGraph, complete_graph, from_edgelist
2728

@@ -379,13 +380,21 @@ def _populate_properties(self, session: AwsSession) -> None:
379380
self._status = metadata.get("deviceStatus")
380381
self._type = AwsDeviceType(metadata.get("deviceType"))
381382
self._provider_name = metadata.get("providerName")
382-
self._properties = BraketSchemaBase.parse_raw_schema(metadata.get("deviceCapabilities"))
383-
device_poll_interval = self._properties.service.getTaskPollIntervalMillis
384-
self._poll_interval_seconds = (
385-
device_poll_interval / 1000.0
386-
if device_poll_interval
387-
else AwsQuantumTask.DEFAULT_RESULTS_POLL_INTERVAL
388-
)
383+
try:
384+
self._properties = BraketSchemaBase.parse_raw_schema(metadata.get("deviceCapabilities"))
385+
device_poll_interval = self._properties.service.getTaskPollIntervalMillis
386+
self._poll_interval_seconds = (
387+
device_poll_interval / 1000.0
388+
if device_poll_interval
389+
else AwsQuantumTask.DEFAULT_RESULTS_POLL_INTERVAL
390+
)
391+
except (pydantic.v1.ValidationError, pydantic.ValidationError):
392+
warnings.warn(
393+
f"Unable to determine device capabilities for '{self._arn}'."
394+
" Please make sure you are using the latest version of amazon-braket-schemas.",
395+
stacklevel=1,
396+
)
397+
self._poll_interval_seconds = AwsQuantumTask.DEFAULT_RESULTS_POLL_INTERVAL
389398
self._topology_graph = None
390399
self._frames = None
391400
self._ports = None

test/unit_tests/braket/aws/test_aws_device.py

+17
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,14 @@ def test_gate_model_sim_schema():
466466
"tasks",
467467
)
468468

469+
MOCK_GATE_MODEL_INVALID_CAPABILITIES_QPU = {
470+
"deviceName": "Aspen-10",
471+
"deviceType": "QPU",
472+
"providerName": "Rigetti",
473+
"deviceStatus": "OFFLINE",
474+
"deviceCapabilities": {},
475+
}
476+
469477

470478
@pytest.fixture(
471479
params=[
@@ -677,6 +685,15 @@ def test_device_refresh_metadata(arn):
677685
_assert_device_fields(device, MOCK_GATE_MODEL_QPU_CAPABILITIES_2, MOCK_GATE_MODEL_QPU_2)
678686

679687

688+
def test_get_device_invalid_capabilities(arn):
689+
mock_session = Mock()
690+
mock_session.get_device.return_value = MOCK_GATE_MODEL_INVALID_CAPABILITIES_QPU
691+
mock_session.region = RIGETTI_REGION
692+
device = AwsDevice(arn, mock_session)
693+
assert device is not None
694+
assert device.properties is None
695+
696+
680697
MOCK_PULSE_MODEL_QPU_PULSE_CAPABILITIES_JSON_1 = {
681698
"braketSchemaHeader": {
682699
"name": "braket.device_schema.pulse.pulse_device_action_properties",

0 commit comments

Comments
 (0)