diff --git a/src/braket/device_schema/device_capabilities.py b/src/braket/device_schema/device_capabilities.py index 6d4a70c9..9e782210 100644 --- a/src/braket/device_schema/device_capabilities.py +++ b/src/braket/device_schema/device_capabilities.py @@ -47,6 +47,16 @@ class DeviceCapabilities(BaseModel): ... } ... ], ... "shotsRange": [1, 10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... }, + ... "deviceLocation": "us-east-1" ... }, ... "action": { ... "braket.ir.jaqcd.program": { @@ -54,7 +64,7 @@ class DeviceCapabilities(BaseModel): ... "version": ["1.0", "1.1"], ... } ... }, - ... "deviceParameters": {#Schema of specific device parameter instance} + ... "deviceParameters": {#Schema of specific device parameter instance}, ... } >>> DeviceCapabilities.parse_raw(json.dumps(input_json)) """ diff --git a/src/braket/device_schema/device_service_properties_v1.py b/src/braket/device_schema/device_service_properties_v1.py index 09c73580..c3fa1733 100644 --- a/src/braket/device_schema/device_service_properties_v1.py +++ b/src/braket/device_schema/device_service_properties_v1.py @@ -11,14 +11,60 @@ # ANY KIND, either express or implied. See the License for the specific # language governing permissions and limitations under the License. -from typing import List, Tuple +from typing import List, Optional, Tuple -from pydantic import Field +from pydantic import BaseModel, Field from braket.device_schema.device_execution_window import DeviceExecutionWindow from braket.schema_common import BraketSchemaBase, BraketSchemaHeader +class DeviceCost(BaseModel): + + """ + This class provides the details on the cost of a device. + + Attributes: + price: Price of the device in terms of US dollars + unit: unit for charging the price, eg: minute, hour, task [price per task] + + Examples: + >>> import json + >>> input_json = { + ... "price": 0.25, + ... "unit": "minute" + ... } + >>> DeviceCost.parse_raw(json.dumps(input_json)) + """ + + price: float + unit: str + + +class DeviceDocumentation(BaseModel): + """ + This class provides the device documentations like image, summary of it and external documentation. + + Attributes: + imageUrl: url for the image of the device + summary: brief description on the device + externalDocumentationUrl: link to provide any useful information to the users. + + Examples: + >>> import json + >>> input_json = { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... } + >>> DeviceDocumentation.parse_raw(json.dumps(input_json)) + """ + + imageUrl: Optional[str] + summary: Optional[str] + externalDocumentationUrl: Optional[str] + + class DeviceServiceProperties(BraketSchemaBase): """ This class defines the common service properties for each device. @@ -43,6 +89,16 @@ class DeviceServiceProperties(BraketSchemaBase): ... } ... ], ... "shotsRange": [1,10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... }, + ... "deviceLocation": "us-east-1" ... } >>> DeviceServiceProperties.parse_raw_schema(json.dumps(input_json)) @@ -54,3 +110,6 @@ class DeviceServiceProperties(BraketSchemaBase): braketSchemaHeader: BraketSchemaHeader = Field(default=_PROGRAM_HEADER, const=_PROGRAM_HEADER) executionWindows: List[DeviceExecutionWindow] shotsRange: Tuple[int, int] + deviceCost: Optional[DeviceCost] + deviceDocumentation: Optional[DeviceDocumentation] + deviceLocation: Optional[str] diff --git a/src/braket/device_schema/dwave/dwave_device_capabilities_v1.py b/src/braket/device_schema/dwave/dwave_device_capabilities_v1.py index b04303e0..3c828c6c 100644 --- a/src/braket/device_schema/dwave/dwave_device_capabilities_v1.py +++ b/src/braket/device_schema/dwave/dwave_device_capabilities_v1.py @@ -75,6 +75,16 @@ class DwaveDeviceCapabilities(DeviceCapabilities, BraketSchemaBase): ... } ... ], ... "shotsRange": [1, 10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... }, + ... "deviceLocation": "us-east-1" ... }, ... "action": { ... "braket.ir.jaqcd.program": { diff --git a/src/braket/device_schema/ionq/ionq_device_capabilities_v1.py b/src/braket/device_schema/ionq/ionq_device_capabilities_v1.py index f296aa41..4a945a8c 100644 --- a/src/braket/device_schema/ionq/ionq_device_capabilities_v1.py +++ b/src/braket/device_schema/ionq/ionq_device_capabilities_v1.py @@ -54,13 +54,28 @@ class IonqDeviceCapabilities(BraketSchemaBase, DeviceCapabilities): ... } ... ], ... "shotsRange": [1, 10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "external doc link", + ... }, + ... "deviceLocation": "us-east-1" ... }, ... "action": { ... "braket.ir.jaqcd.program": { ... "actionType": "braket.ir.jaqcd.program", ... "version": ["1.0", "1.1"], ... "supportedOperations": ["x", "y"], - ... "supportedResultTypes": ["expectation"], + ... "supportedResultTypes": [{ + ... "name": "resultType1", + ... "observables": ["observable1"], + ... "minShots": 0, + ... "maxShots": 4, + ... }], ... } ... }, ... "paradigm": { diff --git a/src/braket/device_schema/jaqcd_device_action_properties.py b/src/braket/device_schema/jaqcd_device_action_properties.py index 81a853b9..37fcee34 100644 --- a/src/braket/device_schema/jaqcd_device_action_properties.py +++ b/src/braket/device_schema/jaqcd_device_action_properties.py @@ -13,9 +13,39 @@ from typing import List, Optional +from pydantic import BaseModel + from braket.device_schema.device_action_properties import DeviceActionProperties +class ResultType(BaseModel): + """ + This class provides the result type for a quantum task to return. + + Attributes: + + name: name of the result type + observables: supported result types for this result type. + minShots: min shots for the results + maxShots: max shots for the results + + Examples: + >>> import json + >>> input_json = { + ... "name": "resultType1", + ... "observables": ["observable1"], + ... "minShots": 0, + ... "maxShots": 4, + ... } + >>> ResultType.parse_raw(json.dumps(input_json)) + """ + + name: str + observables: Optional[List[str]] + minShots: Optional[int] + maxShots: Optional[int] + + class JaqcdDeviceActionProperties(DeviceActionProperties): """ @@ -32,11 +62,16 @@ class JaqcdDeviceActionProperties(DeviceActionProperties): ... "actionType": "braket.ir.jaqcd.program", ... "version": ["1.0", "1.1"], ... "supportedOperations": ["x", "y"], - ... "supportedResultTypes": ["expectation"], + ... "supportedResultTypes": [{ + ... "name": "resultType1", + ... "observables": ["observable1"], + ... "minShots": 0, + ... "maxShots": 4, + ... }], ... } >>> JaqcdDeviceActionProperties.parse_raw(json.dumps(input_json)) """ supportedOperations: List[str] - supportedResultTypes: Optional[List[str]] + supportedResultTypes: Optional[List[ResultType]] diff --git a/src/braket/device_schema/rigetti/rigetti_device_capabilities_v1.py b/src/braket/device_schema/rigetti/rigetti_device_capabilities_v1.py index 819e8807..8357b6fd 100644 --- a/src/braket/device_schema/rigetti/rigetti_device_capabilities_v1.py +++ b/src/braket/device_schema/rigetti/rigetti_device_capabilities_v1.py @@ -53,13 +53,28 @@ class RigettiDeviceCapabilities(BraketSchemaBase, DeviceCapabilities): ... } ... ], ... "shotsRange": [1, 10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... }, + ... "deviceLocation": "us-east-1" ... }, ... "action": { ... "braket.ir.jaqcd.program": { ... "actionType": "braket.ir.jaqcd.program", ... "version": ["1.0", "1.1"], ... "supportedOperations": ["x", "y"], - ... "supportedResultTypes": ["expectation"], + ... "supportedResultTypes": [{ + ... "name": "resultType1", + ... "observables": ["observable1"], + ... "minShots": 0, + ... "maxShots": 4, + ... }], ... } ... }, ... "paradigm": { diff --git a/src/braket/device_schema/simulators/gate_model_simulator_device_capabilities_v1.py b/src/braket/device_schema/simulators/gate_model_simulator_device_capabilities_v1.py index 824582c2..57adf83e 100644 --- a/src/braket/device_schema/simulators/gate_model_simulator_device_capabilities_v1.py +++ b/src/braket/device_schema/simulators/gate_model_simulator_device_capabilities_v1.py @@ -55,13 +55,28 @@ class GateModelSimulatorDeviceCapabilities(BraketSchemaBase, DeviceCapabilities) ... } ... ], ... "shotsRange": [1, 10], + ... "deviceCost": { + ... "price": 0.25, + ... "unit": "minute" + ... }, + ... "deviceDocumentation": { + ... "imageUrl": "image_url", + ... "summary": "Summary on the device", + ... "externalDocumentationUrl": "exter doc link", + ... }, + ... "deviceLocation": "us-east-1" ... }, ... "action": { ... "braket.ir.jaqcd.program": { ... "actionType": "braket.ir.jaqcd.program", ... "version": ["1.0", "1.1"], ... "supportedOperations": ["x", "y"], - ... "supportedResultTypes": ["expectation"], + ... "supportedResultTypes":[{ + ... "name": "resultType1", + ... "observables": ["observable1"], + ... "minShots": 0, + ... "maxShots": 4, + ... }], ... } ... }, ... "paradigm": { @@ -71,7 +86,7 @@ class GateModelSimulatorDeviceCapabilities(BraketSchemaBase, DeviceCapabilities) ... }, ... "qubitCount": 31 ... }, - ... "deviceParameters": {GateModelSimulatorDeviceParameters.schema_json()} + ... "deviceParameters": {GateModelSimulatorDeviceParameters.schema_json()}, ... } >>> GateModelSimulatorDeviceCapabilities.parse_raw_schema(json.dumps(input_json)) diff --git a/src/braket/task_result/rigetti_metadata_v1.py b/src/braket/task_result/rigetti_metadata_v1.py index df53b790..ab3a2593 100644 --- a/src/braket/task_result/rigetti_metadata_v1.py +++ b/src/braket/task_result/rigetti_metadata_v1.py @@ -33,6 +33,7 @@ class NativeQuilMetadata(BaseModel): qpuRuntimeEstimation=191.21, topologicalSwaps=0) """ + finalRewiring: conlist(int) gateDepth: conint(ge=0) gateVolume: conint(ge=0) diff --git a/test/braket/device_schema/dwave/test_dwave_device_capabilities_v1.py b/test/braket/device_schema/dwave/test_dwave_device_capabilities_v1.py index accdb056..b9874044 100644 --- a/test/braket/device_schema/dwave/test_dwave_device_capabilities_v1.py +++ b/test/braket/device_schema/dwave/test_dwave_device_capabilities_v1.py @@ -67,6 +67,13 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", }, "action": { "braket.ir.jaqcd.program": { diff --git a/test/braket/device_schema/ionq/test_ionq_device_capabilities_v1.py b/test/braket/device_schema/ionq/test_ionq_device_capabilities_v1.py index 377d2dbf..049eef01 100644 --- a/test/braket/device_schema/ionq/test_ionq_device_capabilities_v1.py +++ b/test/braket/device_schema/ionq/test_ionq_device_capabilities_v1.py @@ -39,13 +39,27 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", }, "action": { "braket.ir.jaqcd.program": { "actionType": "braket.ir.jaqcd.program", "version": ["1.0", "1.1"], "supportedOperations": ["x", "y"], - "supportedResultTypes": ["expectation"], + "supportedResultTypes": [ + { + "name": "resultType1", + "observables": ["observable1"], + "minShots": 2, + "maxShots": 4, + } + ], } }, "paradigm": { diff --git a/test/braket/device_schema/rigetti/test_rigetti_device_capabilities_v1.py b/test/braket/device_schema/rigetti/test_rigetti_device_capabilities_v1.py index 09117c28..dbda750b 100644 --- a/test/braket/device_schema/rigetti/test_rigetti_device_capabilities_v1.py +++ b/test/braket/device_schema/rigetti/test_rigetti_device_capabilities_v1.py @@ -39,13 +39,27 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", }, "action": { "braket.ir.jaqcd.program": { "actionType": "braket.ir.jaqcd.program", "version": ["1.0", "1.1"], "supportedOperations": ["x", "y"], - "supportedResultTypes": ["expectation"], + "supportedResultTypes": [ + { + "name": "resultType1", + "observables": ["observable1"], + "minShots": 2, + "maxShots": 4, + } + ], } }, "paradigm": { diff --git a/test/braket/device_schema/simulator/test_gate_model_simulator_device_capabilities_v1.py b/test/braket/device_schema/simulator/test_gate_model_simulator_device_capabilities_v1.py index 0cd04d02..36ae7306 100644 --- a/test/braket/device_schema/simulator/test_gate_model_simulator_device_capabilities_v1.py +++ b/test/braket/device_schema/simulator/test_gate_model_simulator_device_capabilities_v1.py @@ -41,13 +41,27 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", }, "action": { "braket.ir.jaqcd.program": { "actionType": "braket.ir.jaqcd.program", "version": ["1.0", "1.1"], "supportedOperations": ["x", "y"], - "supportedResultTypes": ["expectation"], + "supportedResultTypes": [ + { + "name": "resultType1", + "observables": ["observable1"], + "minShots": 2, + "maxShots": 4, + } + ], } }, "paradigm": { diff --git a/test/braket/device_schema/test_device_capabilities.py b/test/braket/device_schema/test_device_capabilities.py index d5a9dd26..2b2ab2ea 100644 --- a/test/braket/device_schema/test_device_capabilities.py +++ b/test/braket/device_schema/test_device_capabilities.py @@ -35,6 +35,13 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", }, "action": { "braket.ir.jaqcd.program": { diff --git a/test/braket/device_schema/test_device_service_properties_v1.py b/test/braket/device_schema/test_device_service_properties_v1.py index ca2660dc..53a9890e 100644 --- a/test/braket/device_schema/test_device_service_properties_v1.py +++ b/test/braket/device_schema/test_device_service_properties_v1.py @@ -34,6 +34,13 @@ def valid_input(): } ], "shotsRange": [1, 10], + "deviceCost": {"price": 0.25, "unit": "minute"}, + "deviceDocumentation": { + "imageUrl": "image_url", + "summary": "Summary on the device", + "externalDocumentationUrl": "exter doc link", + }, + "deviceLocation": "us-east-1", } return input diff --git a/test/braket/device_schema/test_jaqcd_device_action_properties.py b/test/braket/device_schema/test_jaqcd_device_action_properties.py index e8f1d822..a5906bc3 100644 --- a/test/braket/device_schema/test_jaqcd_device_action_properties.py +++ b/test/braket/device_schema/test_jaqcd_device_action_properties.py @@ -25,7 +25,9 @@ def valid_input(): "actionType": "braket.ir.jaqcd.program", "version": ["1.0", "1.1"], "supportedOperations": ["x", "y"], - "supportedResultTypes": ["expectation"], + "supportedResultTypes": [ + {"name": "resultType1", "observables": ["observable1"], "minShots": 2, "maxShots": 4,} + ], } return input