An open source library that contains the schemas for Amazon Braket
Project description
Amazon Braket Python Schemas
Amazon Braket Python Schemas is an open source library that contains the schemas for Braket, including:
- intermediate representations (IR) for Amazon Braket quantum tasks and offers serialization and deserialization of those IR payloads. Think of the IR as the contract between the Amazon Braket SDK and Amazon Braket API for quantum programs.
- schemas for the S3 results of each quantum task
- schemas for the device capabilities of each device
Installation
Prerequisites
- Python 3.7+
Steps
The preferred way to get Amazon Braket Python Schemas is by installing the Amazon Braket Python SDK, which will pull in the schemas. Follow the instructions in the README for setup.
However, if you only want to use the schemas, it can be installed on its own as follows:
pip install amazon-braket-schemas
You can install from source by cloning this repository and running a pip install command in the root directory of the repository:
git clone https://github.com/aws/amazon-braket-schemas-python.git
cd amazon-braket-schemas-python
pip install .
You can check your currently installed version of amazon-braket-schemas
with pip show
:
pip show amazon-braket-schemas
or alternatively from within Python:
>>> import braket._schemas as braket_schemas
>>> braket_schemas.__version__
Usage
There are currently two types of IR, including jaqcd (JsonAwsQuantumCircuitDescription) and annealing. See below for their usage.
Serializing python structures
from braket.ir.openqasm import Program as OpenQASMProgram
from braket.ir.jaqcd import CNot, H
from braket.ir.gate_model_shared import Expectation
from braket.ir.jaqcd import Program as JaqcdProgram
from braket.ir.annealing import Problem, ProblemType
program = OpenQASMProgram(source="OPENQASM 3.0; cnot $0, $1;")
print(program.json(indent=2))
"""
{
"braketSchemaHeader": {
"name": "braket.ir.openqasm.program",
"version": "1"
},
"source": "OPENQASM 3.0; cnot $0, $1;",
}
"""
program = JaqcdProgram(instructions=[H(target=0), CNot(control=0, target=1)])
print(program.json(indent=2))
"""
{
"braketSchemaHeader": {
"name": "braket.ir.jaqcd.program",
"version": "1"
},
"instructions": [
{
"target": 0,
"type": "h"
},
{
"control": 0,
"target": 1,
"type": "cnot"
}
],
"results": null,
"basis_rotation_instructions": null,
}
"""
program = JaqcdProgram(
instructions=[H(target=0), CNot(control=0, target=1)],
results=[Expectation(targets=[0], observable=['x'])],
basis_rotation_instructions=[H(target=0)]
)
print(program.json(indent=2))
"""
{
"braketSchemaHeader": {
"name": "braket.ir.jaqcd.program",
"version": "1"
},
"instructions": [
{
"target": 0,
"type": "h"
},
{
"control": 0,
"target": 1,
"type": "cnot"
}
],
"results": [
{
"observable": [
"x"
],
"targets": [
0
],
"type": "expectation"
}
],
"basis_rotation_instructions": [
{
"target": 0,
"type": "h"
}
]
}
"""
problem = Problem(type=ProblemType.QUBO, linear={0: 0.3, 4: -0.3}, quadratic={"0,5": 0.667})
print(problem.json(indent=2))
"""
{
"braketSchemaHeader": {
"name": "braket.ir.annealing.problem",
"version": "1"
},
"type": "QUBO",
"linear": {0: 0.3, 4: -0.3},
"quadratic": {"0,5": 0.667}
}
"""
Deserializing into python structures
from braket.ir.openqasm import Program as OpenQASMProgram
from braket.ir.jaqcd import Program as JaqcdProgram
from braket.ir.annealing import Problem
openqasm_string = """
{
"braketSchemaHeader": {
"name": "braket.ir.openqasm.program",
"version": "1"
},
"source": "OPENQASM 3.0; cnot $0, $1;",
}"""
program = OpenQASMProgram.parse_raw(openqasm_string)
print(program)
"""
braketSchemaHeader=BraketSchemaHeader(name='braket.ir.openqasm.program', version='1') source='OPENQASM 3.0; cnot $0, $1;'
"""
jaqcd_string = """
{
"instructions": [
{
"target": 0,
"type": "h"
},
{
"control": 0,
"target": 1,
"type": "cnot"
}
],
"results": [
{
"observable": [
"x"
],
"targets": [
0
],
"type": "expectation"
}
],
"basis_rotation_instructions": [
{
"target": 0,
"type": "h"
}
]
}
"""
program = JaqcdProgram.parse_raw(jaqcd_string)
print(program)
"""
braketSchemaHeader=BraketSchemaHeader(name='braket.ir.jaqcd.program', version='1') instructions=[H(target=0, type=<Type.h: 'h'>), CNot(control=0, target=1, type=<Type.cnot: 'cnot'>)] results=[Expectation(observable=['x'], targets=[0], type=<Type.expectation: 'expectation'>)] basis_rotation_instructions=[H(target=0, type=<Type.h: 'h'>)]
"""
annealing_string = """
{
"type": "QUBO",
"linear": {0: 0.3, 4: -0.3},
"quadratic": {"0,5": 0.667}
}
"""
problem = Problem.parse_raw(annealing_string)
print(problem)
"""
braketSchemaHeader=BraketSchemaHeader(name='braket.ir.annealing.problem', version='1') type=<ProblemType.QUBO: 'QUBO'>, linear={0: 0.3, 4: -0.3}, quadratic={'0,5': 0.667}
"""
Documentation
Detailed documentation, including the API reference, can be found on Read the Docs.
You can also generate the docs from source. First, install tox:
pip install tox
To build the Sphinx docs, run the following command in the root repo directory:
tox -e docs
You can then find the generated HTML files in build/documentation/html
.
Testing
Make sure to install test dependencies first:
pip install -e "amazon-braket-schemas-python[test]"
To run the unit tests:
tox -e unit-tests
You can also pass in various pytest arguments to run selected tests:
tox -e unit-tests -- your-arguments
To run linters and doc generators and unit tests:
tox
For more information, please see pytest usage.
License
This project is licensed under the Apache-2.0 License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file amazon-braket-schemas-1.10.0.tar.gz
.
File metadata
- Download URL: amazon-braket-schemas-1.10.0.tar.gz
- Upload date:
- Size: 36.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4cf0f075312a530ccd14feccb96603e0c32e552735639c145d2f6046e3ebabf |
|
MD5 | 75169fa8125aa18f2758ef8996d81dd1 |
|
BLAKE2b-256 | c8837e7a5379f8a631449fa9eb8fce132a2644d0c39de162776328142d233f6b |
File details
Details for the file amazon_braket_schemas-1.10.0-py3-none-any.whl
.
File metadata
- Download URL: amazon_braket_schemas-1.10.0-py3-none-any.whl
- Upload date:
- Size: 92.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.9.13
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3391e61590a91d65c45b67c9a35912dc3125125b33bc3b04c7e4e506b2d1cd14 |
|
MD5 | 1bc3c7bd4213693812aa0d7fa1f952f4 |
|
BLAKE2b-256 | 87b2454fd540a82745338d57df82b8652aed8d4f1e1dad0c44066fc636284406 |