qbraid 0.6.0__tar.gz → 0.6.0.dev20240404040745__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/PKG-INFO +14 -18
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/README.md +12 -16
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/pyproject.toml +2 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/__init__.py +4 -1
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/_about.py +1 -1
- qbraid-0.6.0.dev20240404040745/qbraid/_version.py +1 -0
- qbraid-0.6.0/qbraid/_compat.py → qbraid-0.6.0.dev20240404040745/qbraid/_warnings.py +14 -15
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/get_devices.py +58 -51
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/get_jobs.py +45 -35
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/__init__.py +0 -6
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/job.py +1 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/device.py +9 -10
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/ibm/job.py +1 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/ibm/provider.py +1 -2
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/job.py +1 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/provider.py +1 -1
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/__init__.py +14 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/braket/cirq_to_braket.py +3 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/cirq/conversions_qasm.py +5 -6
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/openqasm3/convert_qasm.py +1 -1
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pyquil/conversions.py +2 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pyquil/quil_output.py +3 -1
- {qbraid-0.6.0/qbraid/programs → qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions}/qasm_passes.py +1 -1
- {qbraid-0.6.0/qbraid/programs → qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions}/qasm_qelib1.py +1 -1
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/converter.py +8 -8
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/graph.py +3 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/PKG-INFO +14 -18
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/SOURCES.txt +3 -3
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/requires.txt +1 -1
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/requirements.txt +1 -1
- qbraid-0.6.0.dev20240404040745/tools/set_provider_configs.py +91 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/tox.ini +1 -4
- qbraid-0.6.0/qbraid/_version.py +0 -17
- qbraid-0.6.0/tools/set_provider_configs.py +0 -75
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/CODE_OF_CONDUCT.md +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/CONTRIBUTING.md +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/LICENSE +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/MANIFEST.in +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/cards/jupyter.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/cards/python.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/cards/terminal.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/favicon.ico +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/logo.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/braket.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/cirq.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/pennylane.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/pyquil.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/qasm.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/qir.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/qiskit.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/pkg-logos/quantinuum.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/batch_counts.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/conversion_graph.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/get_devices.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/hub_spokes.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/lab_jobs.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/_static/sdk-files/plot_counts.png +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.compiler.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.interface.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.programs.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.providers.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.transpiler.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/api/qbraid.visualization.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/conf.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/index.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/devices.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/jobs.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/overview.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/programs.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/providers.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/results.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/docs/sdk/transpiler.rst +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/_display.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/_import.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/compiler/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/compiler/braket/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/compiler/braket/ionq.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/compiler/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/circuit_equality.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/random/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/random/cirq_random.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/random/qasm3_random.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/random/qiskit_random.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/interface/random/random.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/_import.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/abc_program.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/inspector.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/braket.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/cirq.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/pennylane.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/pyquil.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/pytket.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/qasm2.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/qasm3.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/libs/qiskit.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/programs/loader.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/_import.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/device.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/provider.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/result.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/aws/tracker.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/enums.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/ibm/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/ibm/device.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/ibm/result.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/result.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/providers/status_maps.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/braket/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/braket/cirq_from_braket.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/braket/conversions_qasm.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/braket/custom_gates.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/cirq/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/cirq/cirq_gates.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/cirq/cirq_qasm_parser.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/openqasm3/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pennylane/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pennylane/conversions_qasm.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pyquil/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pyquil/quil_input.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pytket/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/pytket/conversions_qasm.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/qiskit/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/conversions/qiskit/conversions_qasm.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/edge.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/transpiler/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/__init__.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/draw_circuit.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/draw_qasm3.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/exceptions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/plot_conversions.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid/visualization/plot_counts.py +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/dependency_links.txt +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/entry_points.txt +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/qbraid.egg-info/top_level.txt +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/requirements-dev.txt +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/setup.cfg +0 -0
- {qbraid-0.6.0 → qbraid-0.6.0.dev20240404040745}/tools/verify_headers.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: qbraid
|
|
3
|
-
Version: 0.6.0
|
|
3
|
+
Version: 0.6.0.dev20240404040745
|
|
4
4
|
Summary: A Python toolkit for cross-framework abstraction of quantum programs.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -703,7 +703,7 @@ Requires-Dist: networkx<4.0,>=2.5
|
|
|
703
703
|
Requires-Dist: numpy<1.27,>=1.17
|
|
704
704
|
Requires-Dist: openqasm3[parser]<0.6.0,>=0.4.0
|
|
705
705
|
Requires-Dist: ply>=3.6
|
|
706
|
-
Requires-Dist: qbraid-core
|
|
706
|
+
Requires-Dist: qbraid-core==0.1.0.dev3
|
|
707
707
|
Provides-Extra: braket
|
|
708
708
|
Requires-Dist: amazon-braket-sdk<1.77.0,>=1.42.1; extra == "braket"
|
|
709
709
|
Provides-Extra: cirq
|
|
@@ -794,7 +794,11 @@ For the best experience, install the qBraid-SDK environment on
|
|
|
794
794
|
[create an account](https://account.qbraid.com)) and follow the steps to
|
|
795
795
|
[install an environment](https://docs.qbraid.com/projects/lab/en/latest/lab/environments.html#install-environment).
|
|
796
796
|
|
|
797
|
-
Using the SDK on
|
|
797
|
+
Using the SDK on qBraid Lab means direct, pre-configured access to all
|
|
798
|
+
[Amazon Braket supported devices](https://docs.aws.amazon.com/braket/latest/developerguide/braket-devices.html)
|
|
799
|
+
with no additional access keys or API tokens required. See
|
|
800
|
+
[qBraid Quantum Jobs](https://docs.qbraid.com/projects/lab/en/latest/lab/quantum_jobs.html)
|
|
801
|
+
for more.
|
|
798
802
|
|
|
799
803
|
### Local install
|
|
800
804
|
|
|
@@ -898,24 +902,12 @@ from qbraid.transpiler import ConversionGraph
|
|
|
898
902
|
from qbraid.visualization import plot_conversion_graph
|
|
899
903
|
|
|
900
904
|
graph = ConversionGraph()
|
|
901
|
-
|
|
902
|
-
graph.plot()
|
|
905
|
+
plot_conversion_graph(graph)
|
|
903
906
|
```
|
|
904
907
|
|
|
905
908
|
<img align="middle" width="full" alt="conversion_graph" src="https://qbraid-static.s3.amazonaws.com/conversion_graph.png">
|
|
906
909
|
|
|
907
|
-
You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges.
|
|
908
|
-
|
|
909
|
-
```python
|
|
910
|
-
from qbraid_qir.qasm3 import qasm3_to_qir
|
|
911
|
-
from qbraid.transpiler import Conversion
|
|
912
|
-
|
|
913
|
-
conversion = Conversion("qasm3", "qir", qasm3_to_qir)
|
|
914
|
-
|
|
915
|
-
graph.add_conversion(conversion)
|
|
916
|
-
|
|
917
|
-
graph.plot()
|
|
918
|
-
```
|
|
910
|
+
You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges. See [example](https://github.com/qBraid/qbraid-lab-demo/blob/main/qbraid_sdk/qbraid_sdk_transpiler_braket_qiskit.ipynb).
|
|
919
911
|
|
|
920
912
|
### Devices & Jobs
|
|
921
913
|
|
|
@@ -1049,10 +1041,14 @@ Use the badge in your project's `README.rst`:
|
|
|
1049
1041
|
[CONTRIBUTING.md](CONTRIBUTING.md)
|
|
1050
1042
|
- For feature requests and bug reports:
|
|
1051
1043
|
[Submit an issue](https://github.com/qBraid/qBraid/issues)
|
|
1052
|
-
- For discussions, and specific questions about the qBraid
|
|
1044
|
+
- For discussions, and specific questions about the qBraid SDK, qBraid Lab, or
|
|
1045
|
+
other topics, [join our discord community](https://discord.gg/TPBU2sa8Et)
|
|
1053
1046
|
- For questions that are more suited for a forum, post to
|
|
1054
1047
|
[Quantum Computing Stack Exchange](https://quantumcomputing.stackexchange.com/)
|
|
1055
1048
|
with the [`qbraid`](https://quantumcomputing.stackexchange.com/questions/tagged/qbraid) tag.
|
|
1049
|
+
- Want your open-source project featured as its own runtime environment on
|
|
1050
|
+
qBraid Lab? Fill out our
|
|
1051
|
+
[New Environment Request Form](https://forms.gle/a4v7Kdn7G7bs9jYD8)
|
|
1056
1052
|
|
|
1057
1053
|
## License
|
|
1058
1054
|
|
|
@@ -49,7 +49,11 @@ For the best experience, install the qBraid-SDK environment on
|
|
|
49
49
|
[create an account](https://account.qbraid.com)) and follow the steps to
|
|
50
50
|
[install an environment](https://docs.qbraid.com/projects/lab/en/latest/lab/environments.html#install-environment).
|
|
51
51
|
|
|
52
|
-
Using the SDK on
|
|
52
|
+
Using the SDK on qBraid Lab means direct, pre-configured access to all
|
|
53
|
+
[Amazon Braket supported devices](https://docs.aws.amazon.com/braket/latest/developerguide/braket-devices.html)
|
|
54
|
+
with no additional access keys or API tokens required. See
|
|
55
|
+
[qBraid Quantum Jobs](https://docs.qbraid.com/projects/lab/en/latest/lab/quantum_jobs.html)
|
|
56
|
+
for more.
|
|
53
57
|
|
|
54
58
|
### Local install
|
|
55
59
|
|
|
@@ -153,24 +157,12 @@ from qbraid.transpiler import ConversionGraph
|
|
|
153
157
|
from qbraid.visualization import plot_conversion_graph
|
|
154
158
|
|
|
155
159
|
graph = ConversionGraph()
|
|
156
|
-
|
|
157
|
-
graph.plot()
|
|
160
|
+
plot_conversion_graph(graph)
|
|
158
161
|
```
|
|
159
162
|
|
|
160
163
|
<img align="middle" width="full" alt="conversion_graph" src="https://qbraid-static.s3.amazonaws.com/conversion_graph.png">
|
|
161
164
|
|
|
162
|
-
You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges.
|
|
163
|
-
|
|
164
|
-
```python
|
|
165
|
-
from qbraid_qir.qasm3 import qasm3_to_qir
|
|
166
|
-
from qbraid.transpiler import Conversion
|
|
167
|
-
|
|
168
|
-
conversion = Conversion("qasm3", "qir", qasm3_to_qir)
|
|
169
|
-
|
|
170
|
-
graph.add_conversion(conversion)
|
|
171
|
-
|
|
172
|
-
graph.plot()
|
|
173
|
-
```
|
|
165
|
+
You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges. See [example](https://github.com/qBraid/qbraid-lab-demo/blob/main/qbraid_sdk/qbraid_sdk_transpiler_braket_qiskit.ipynb).
|
|
174
166
|
|
|
175
167
|
### Devices & Jobs
|
|
176
168
|
|
|
@@ -304,10 +296,14 @@ Use the badge in your project's `README.rst`:
|
|
|
304
296
|
[CONTRIBUTING.md](CONTRIBUTING.md)
|
|
305
297
|
- For feature requests and bug reports:
|
|
306
298
|
[Submit an issue](https://github.com/qBraid/qBraid/issues)
|
|
307
|
-
- For discussions, and specific questions about the qBraid
|
|
299
|
+
- For discussions, and specific questions about the qBraid SDK, qBraid Lab, or
|
|
300
|
+
other topics, [join our discord community](https://discord.gg/TPBU2sa8Et)
|
|
308
301
|
- For questions that are more suited for a forum, post to
|
|
309
302
|
[Quantum Computing Stack Exchange](https://quantumcomputing.stackexchange.com/)
|
|
310
303
|
with the [`qbraid`](https://quantumcomputing.stackexchange.com/questions/tagged/qbraid) tag.
|
|
304
|
+
- Want your open-source project featured as its own runtime environment on
|
|
305
|
+
qBraid Lab? Fill out our
|
|
306
|
+
[New Environment Request Form](https://forms.gle/a4v7Kdn7G7bs9jYD8)
|
|
311
307
|
|
|
312
308
|
## License
|
|
313
309
|
|
|
@@ -28,7 +28,7 @@ dependencies = [
|
|
|
28
28
|
"numpy>=1.17,<1.27",
|
|
29
29
|
"openqasm3[parser]>=0.4.0,<0.6.0",
|
|
30
30
|
"ply>=3.6",
|
|
31
|
-
"qbraid-core
|
|
31
|
+
"qbraid-core==0.1.0.dev3"
|
|
32
32
|
]
|
|
33
33
|
requires-python = ">= 3.9"
|
|
34
34
|
|
|
@@ -100,8 +100,7 @@ source = ["qbraid"]
|
|
|
100
100
|
omit = [
|
|
101
101
|
"**/qbraid/transpiler/conversions/cirq/cirq_gates.py",
|
|
102
102
|
"**/qbraid/visualization/plot_conversions.py",
|
|
103
|
-
"**/qbraid/visualization/draw_circuit.py.py"
|
|
104
|
-
"**/qbraid/_compat.py",
|
|
103
|
+
"**/qbraid/visualization/draw_circuit.py.py"
|
|
105
104
|
]
|
|
106
105
|
|
|
107
106
|
[tool.coverage.paths]
|
|
@@ -21,6 +21,7 @@ Functions
|
|
|
21
21
|
|
|
22
22
|
about
|
|
23
23
|
get_devices
|
|
24
|
+
refresh_devices
|
|
24
25
|
get_jobs
|
|
25
26
|
|
|
26
27
|
|
|
@@ -44,11 +45,12 @@ Exceptions
|
|
|
44
45
|
"""
|
|
45
46
|
import sys
|
|
46
47
|
|
|
48
|
+
from . import _warnings
|
|
47
49
|
from ._about import about
|
|
48
50
|
from ._import import LazyLoader
|
|
49
51
|
from ._version import __version__
|
|
50
52
|
from .exceptions import QbraidError
|
|
51
|
-
from .get_devices import get_devices
|
|
53
|
+
from .get_devices import get_devices, refresh_devices
|
|
52
54
|
from .get_jobs import get_jobs
|
|
53
55
|
|
|
54
56
|
if "sphinx" in sys.modules:
|
|
@@ -72,6 +74,7 @@ __all__ = [
|
|
|
72
74
|
"programs",
|
|
73
75
|
"providers",
|
|
74
76
|
"QbraidError",
|
|
77
|
+
"refresh_devices",
|
|
75
78
|
"transpiler",
|
|
76
79
|
"visualization",
|
|
77
80
|
]
|
|
@@ -22,7 +22,7 @@ def about() -> None:
|
|
|
22
22
|
from numpy import __version__ as numpy_version
|
|
23
23
|
from openqasm3 import __version__ as openqasm3_version
|
|
24
24
|
from ply import __version__ as ply_version
|
|
25
|
-
from qbraid_core import __version__ as qbraid_core_version
|
|
25
|
+
from qbraid_core._version import __version__ as qbraid_core_version
|
|
26
26
|
|
|
27
27
|
from ._version import __version__ as qbraid_version
|
|
28
28
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.6.0.dev20240404040745"
|
|
@@ -9,35 +9,34 @@
|
|
|
9
9
|
# THERE IS NO WARRANTY for the qBraid-SDK, as per Section 15 of the GPL v3.
|
|
10
10
|
|
|
11
11
|
"""
|
|
12
|
-
Module for emitting and
|
|
12
|
+
Module for emitting and disabling warnings at top level.
|
|
13
13
|
|
|
14
14
|
"""
|
|
15
15
|
import logging
|
|
16
|
-
import os
|
|
17
16
|
import warnings
|
|
18
17
|
|
|
19
|
-
from qbraid_core.
|
|
18
|
+
from qbraid_core._warnings import _check_version
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
level = os.getenv("LOG_LEVEL", "INFO").upper() # Default to INFO if not set
|
|
25
|
-
logging.basicConfig(
|
|
26
|
-
level=getattr(logging, level, logging.INFO),
|
|
27
|
-
format="%(levelname)s - %(module)s - %(message)s",
|
|
28
|
-
)
|
|
20
|
+
# Set up logging configuration to suppress INFO messages
|
|
21
|
+
logging.basicConfig(level=logging.WARNING)
|
|
22
|
+
logging.getLogger("qiskit").setLevel(logging.WARNING)
|
|
29
23
|
|
|
30
24
|
|
|
31
|
-
def
|
|
25
|
+
def _filterwarnings():
|
|
32
26
|
"""Filter out warnings that are not relevant to the user."""
|
|
33
27
|
warnings.filterwarnings("ignore", category=SyntaxWarning)
|
|
34
28
|
warnings.filterwarnings(
|
|
35
29
|
"ignore", category=UserWarning, message="Setuptools is replacing distutils"
|
|
36
30
|
)
|
|
37
31
|
warnings.filterwarnings("ignore", category=DeprecationWarning)
|
|
32
|
+
# warnings.filterwarnings("ignore", category=PendingDeprecationWarning)
|
|
38
33
|
warnings.filterwarnings("ignore", category=RuntimeWarning, module="numpy")
|
|
39
34
|
|
|
40
35
|
|
|
41
|
-
def
|
|
42
|
-
"""Emit a warning
|
|
43
|
-
|
|
36
|
+
def _warn_version():
|
|
37
|
+
"""Emit a warning."""
|
|
38
|
+
_check_version("qbraid")
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
_warn_version()
|
|
42
|
+
_filterwarnings()
|
|
@@ -15,20 +15,68 @@ Module to retrieve, update, and display information about devices
|
|
|
15
15
|
supported by the qBraid SDK.
|
|
16
16
|
|
|
17
17
|
"""
|
|
18
|
-
from typing import Any, Dict, List, Optional
|
|
18
|
+
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
|
19
|
+
|
|
20
|
+
from qbraid_core import QbraidSession
|
|
21
|
+
from qbraid_core.services.quantum import QuantumClient, process_device_data
|
|
19
22
|
|
|
20
23
|
try:
|
|
21
24
|
from IPython.display import HTML, clear_output, display
|
|
22
25
|
except ImportError:
|
|
23
26
|
pass
|
|
24
27
|
|
|
25
|
-
from qbraid_core import QbraidSession
|
|
26
|
-
from qbraid_core.services.quantum import QuantumClient, process_device_data
|
|
27
|
-
|
|
28
28
|
from ._display import running_in_jupyter, update_progress_bar
|
|
29
29
|
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from IPython.display import DisplayHandle
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def refresh_devices() -> None:
|
|
35
|
+
"""Refreshes status for all qbraid supported devices. Requires credential for each vendor."""
|
|
36
|
+
# pylint: disable-next=import-outside-toplevel
|
|
37
|
+
from qbraid.providers import QbraidProvider
|
|
30
38
|
|
|
31
|
-
|
|
39
|
+
client = QuantumClient()
|
|
40
|
+
provider = QbraidProvider(client=client)
|
|
41
|
+
devices = client.search_devices()
|
|
42
|
+
count = 0
|
|
43
|
+
num_devices = len(devices) # i.e. number of iterations
|
|
44
|
+
for document in devices:
|
|
45
|
+
progress = count / num_devices
|
|
46
|
+
update_progress_bar(progress)
|
|
47
|
+
if document["statusRefresh"] is not None: # None => internally not available at moment
|
|
48
|
+
qbraid_id = document["qbraid_id"]
|
|
49
|
+
try:
|
|
50
|
+
device = provider.get_device(qbraid_id)
|
|
51
|
+
status = device.status().name
|
|
52
|
+
client.update_device(data={"qbraid_id": qbraid_id, "status": status})
|
|
53
|
+
except Exception: # pylint: disable=broad-except
|
|
54
|
+
pass
|
|
55
|
+
|
|
56
|
+
count += 1
|
|
57
|
+
update_progress_bar(1)
|
|
58
|
+
print()
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _get_device_data(query: Dict[str, Any]) -> Tuple[List[List[str]], int]:
|
|
62
|
+
"""Get devices helper function that queries the qBraid API for all supported devices
|
|
63
|
+
and returns a list of devices that match the query filters. Each device is
|
|
64
|
+
represented by its own length-4 list containing the [provider, name, qbraid_id, status].
|
|
65
|
+
"""
|
|
66
|
+
session = QbraidSession()
|
|
67
|
+
|
|
68
|
+
# forward compatibility for casing transition
|
|
69
|
+
if query.get("type") == "SIMULATOR":
|
|
70
|
+
query["type"] = "Simulator"
|
|
71
|
+
|
|
72
|
+
# get-devices must be a POST request with kwarg `json` (not `data`) to
|
|
73
|
+
# encode the query. This is because certain queries contain regular
|
|
74
|
+
# expressions which cannot be encoded in GET request `params`.
|
|
75
|
+
devices = session.post("/public/lab/get-devices", json=query).json()
|
|
76
|
+
return process_device_data(devices)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _display_basic(data: List[str], message: str) -> None:
|
|
32
80
|
if len(data) == 0:
|
|
33
81
|
print(message)
|
|
34
82
|
else:
|
|
@@ -86,34 +134,9 @@ def _display_jupyter(data: List[str], message: Optional[str] = None, align: str
|
|
|
86
134
|
return display(HTML(html))
|
|
87
135
|
|
|
88
136
|
|
|
89
|
-
def
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
from qbraid.providers import QbraidProvider
|
|
93
|
-
|
|
94
|
-
client = QuantumClient()
|
|
95
|
-
provider = QbraidProvider(client=client)
|
|
96
|
-
devices = client.search_devices()
|
|
97
|
-
count = 0
|
|
98
|
-
num_devices = len(devices) # i.e. number of iterations
|
|
99
|
-
for document in devices:
|
|
100
|
-
progress = count / num_devices
|
|
101
|
-
update_progress_bar(progress)
|
|
102
|
-
if document["statusRefresh"] is not None: # None => internally not available at moment
|
|
103
|
-
qbraid_id = document["qbraid_id"]
|
|
104
|
-
try:
|
|
105
|
-
device = provider.get_device(qbraid_id)
|
|
106
|
-
status = device.status().name
|
|
107
|
-
client.update_device(data={"qbraid_id": qbraid_id, "status": status})
|
|
108
|
-
except Exception: # pylint: disable=broad-except
|
|
109
|
-
pass
|
|
110
|
-
|
|
111
|
-
count += 1
|
|
112
|
-
update_progress_bar(1)
|
|
113
|
-
print()
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
def get_devices(filters: Optional[Dict[str, Any]] = None, refresh: bool = False):
|
|
137
|
+
def get_devices(
|
|
138
|
+
filters: Optional[Dict[str, Any]] = None, refresh: bool = False
|
|
139
|
+
) -> "Optional[Union[DisplayHandle, Any]]":
|
|
117
140
|
"""Displays a list of all supported devices matching given filters, tabulated by provider,
|
|
118
141
|
name, and qBraid ID. Each device also has a status given by a solid green bubble or a hollow
|
|
119
142
|
red bubble, indicating that the device is online or offline, respectively. You can narrow your
|
|
@@ -178,25 +201,9 @@ def get_devices(filters: Optional[Dict[str, Any]] = None, refresh: bool = False)
|
|
|
178
201
|
|
|
179
202
|
"""
|
|
180
203
|
if refresh:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
session = QbraidSession()
|
|
204
|
+
refresh_devices()
|
|
184
205
|
query = {} if filters is None else filters
|
|
185
|
-
|
|
186
|
-
# forward compatibility for casing transition
|
|
187
|
-
if query.get("type") == "SIMULATOR":
|
|
188
|
-
query["type"] = "Simulator"
|
|
189
|
-
|
|
190
|
-
if len(query) == 0:
|
|
191
|
-
client = QuantumClient(session=session)
|
|
192
|
-
devices = client.search_devices()
|
|
193
|
-
else:
|
|
194
|
-
# get-devices must be a POST request with kwarg `json` (not `data`) to
|
|
195
|
-
# encode the query. This is because certain queries contain regular
|
|
196
|
-
# expressions which cannot be encoded in GET request `params`.
|
|
197
|
-
devices = session.post("/public/lab/get-devices", json=query).json()
|
|
198
|
-
|
|
199
|
-
device_data, msg = process_device_data(devices)
|
|
206
|
+
device_data, msg = _get_device_data(query)
|
|
200
207
|
align = "center" if len(device_data) == 0 else "right"
|
|
201
208
|
|
|
202
209
|
if running_in_jupyter():
|
|
@@ -17,7 +17,7 @@ jobs submitted through the qBraid SDK.
|
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
import warnings
|
|
20
|
-
from typing import Any, Dict, List, Optional
|
|
20
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
21
21
|
|
|
22
22
|
try:
|
|
23
23
|
from IPython.display import HTML, clear_output, display
|
|
@@ -25,14 +25,14 @@ except ImportError:
|
|
|
25
25
|
pass
|
|
26
26
|
|
|
27
27
|
from qbraid_core import QbraidSession
|
|
28
|
-
from qbraid_core.services.quantum import
|
|
28
|
+
from qbraid_core.services.quantum.adapter import _job_status_msg
|
|
29
29
|
|
|
30
|
-
from ._display import running_in_jupyter, update_progress_bar
|
|
30
|
+
from qbraid._display import running_in_jupyter, update_progress_bar
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def
|
|
33
|
+
def _display_jobs_basic(data, msg):
|
|
34
34
|
if len(data) == 0:
|
|
35
|
-
print(
|
|
35
|
+
print(msg)
|
|
36
36
|
else:
|
|
37
37
|
headers = ["Job ID", "Submitted", "Status"]
|
|
38
38
|
|
|
@@ -43,7 +43,7 @@ def _display_basic(data: List[str], message: str) -> None:
|
|
|
43
43
|
separator_format = "{:<" + str(max_job_id_length) + "} {:<25} {:<15}"
|
|
44
44
|
row_format = "{:<" + str(max_job_id_length) + "} {:<25} {:<15}"
|
|
45
45
|
|
|
46
|
-
print(f"{
|
|
46
|
+
print(f"{msg}:\n")
|
|
47
47
|
print(header_format.format(*headers))
|
|
48
48
|
|
|
49
49
|
separators = ["-" * len(header) for header in headers]
|
|
@@ -53,7 +53,7 @@ def _display_basic(data: List[str], message: str) -> None:
|
|
|
53
53
|
print(row_format.format(job_id, timestamp, status))
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
def
|
|
56
|
+
def _display_jobs_jupyter(data, msg):
|
|
57
57
|
clear_output(wait=True)
|
|
58
58
|
|
|
59
59
|
html = """<h3>Quantum Jobs</h3><table><tr>
|
|
@@ -87,29 +87,43 @@ def _display_jupyter(data: List[str], message: Optional[str] = None, align: str
|
|
|
87
87
|
<td style='text-align:left'>{status}</td></tr>
|
|
88
88
|
"""
|
|
89
89
|
|
|
90
|
-
html += f"<tr><td colspan='4'; style='text-align:
|
|
90
|
+
html += f"<tr><td colspan='4'; style='text-align:right'>{msg}</td></tr>"
|
|
91
91
|
|
|
92
92
|
html += "</table>"
|
|
93
93
|
|
|
94
94
|
return display(HTML(html))
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
def
|
|
98
|
-
|
|
97
|
+
def _get_jobs_data(
|
|
98
|
+
query: Dict[str, Any],
|
|
99
|
+
refresh: bool = False,
|
|
100
|
+
session: Optional[QbraidSession] = None,
|
|
101
|
+
) -> Tuple[List[List[str]], str]:
|
|
99
102
|
from qbraid.providers import QuantumJob # pylint: disable=import-outside-toplevel
|
|
100
103
|
|
|
104
|
+
session = QbraidSession() if not session else session
|
|
105
|
+
jobs = session.post("/get-user-jobs", json=query).json()
|
|
101
106
|
count = 0
|
|
102
|
-
num_jobs = len(
|
|
103
|
-
|
|
104
|
-
for
|
|
107
|
+
num_jobs = len(jobs)
|
|
108
|
+
job_data = []
|
|
109
|
+
for document in jobs:
|
|
105
110
|
count += 1
|
|
106
111
|
progress = count / num_jobs
|
|
107
|
-
|
|
112
|
+
if refresh:
|
|
113
|
+
update_progress_bar(progress)
|
|
114
|
+
job_id = document.get("qbraidJobId", document.get("_id"))
|
|
115
|
+
if job_id is None:
|
|
116
|
+
continue
|
|
117
|
+
created_at = document.get("createdAt")
|
|
118
|
+
if created_at is None:
|
|
119
|
+
timestamps = document.get("timestamps", {})
|
|
120
|
+
created_at = timestamps.get("createdAt", timestamps.get("jobStarted"))
|
|
121
|
+
status = document.get("qbraidStatus", document.get("status", "UNKNOWN"))
|
|
108
122
|
try:
|
|
109
123
|
status_final = QuantumJob.status_final(status)
|
|
110
124
|
except Exception: # pylint: disable=broad-except
|
|
111
125
|
status_final = True
|
|
112
|
-
if not status_final:
|
|
126
|
+
if refresh and not status_final:
|
|
113
127
|
try:
|
|
114
128
|
qbraid_job = QuantumJob.retrieve(job_id)
|
|
115
129
|
with warnings.catch_warnings():
|
|
@@ -118,12 +132,19 @@ def _refresh_jobs(job_data: List[str]) -> List[str]:
|
|
|
118
132
|
status = status_obj.name
|
|
119
133
|
except Exception: # pylint: disable=broad-except
|
|
120
134
|
pass
|
|
121
|
-
|
|
135
|
+
job_data.append([job_id, created_at, status])
|
|
122
136
|
|
|
123
|
-
|
|
137
|
+
msg = _job_status_msg(num_jobs, query)
|
|
124
138
|
|
|
139
|
+
return job_data, msg
|
|
125
140
|
|
|
126
|
-
|
|
141
|
+
|
|
142
|
+
def get_jobs(
|
|
143
|
+
filters: Optional[dict] = None,
|
|
144
|
+
refresh: bool = False,
|
|
145
|
+
raw: bool = False,
|
|
146
|
+
session: Optional[QbraidSession] = None,
|
|
147
|
+
): # pylint: disable=too-many-statements
|
|
127
148
|
"""Displays a list of quantum jobs submitted by user, tabulated by job ID,
|
|
128
149
|
the date/time it was submitted, and status. You can specify filters to
|
|
129
150
|
narrow the search by supplying a dictionary containing the desired criteria.
|
|
@@ -161,28 +182,17 @@ def get_jobs(filters: Optional[Dict[str, Any]] = None, refresh: bool = False, ra
|
|
|
161
182
|
filters (dict): A dictionary containing any filters to be applied.
|
|
162
183
|
refresh (bool): If True, refreshes the status of all jobs before displaying them.
|
|
163
184
|
raw (bool): If True, returns a list of job IDs instead of displaying the jobs.
|
|
185
|
+
session (QbraidSession): A qBraid session object. If not provided, a new session will be created.
|
|
164
186
|
|
|
165
187
|
"""
|
|
166
188
|
filters = filters or {}
|
|
167
189
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
if len(filters) == 0:
|
|
171
|
-
client = QuantumClient(session=session)
|
|
172
|
-
jobs = client.search_jobs()
|
|
173
|
-
else:
|
|
174
|
-
jobs = session.post("/get-user-jobs", json=filters).json()
|
|
175
|
-
|
|
176
|
-
job_data, msg = process_job_data(jobs, filters)
|
|
177
|
-
|
|
178
|
-
if refresh:
|
|
179
|
-
job_data = _refresh_jobs(job_data)
|
|
190
|
+
job_data, msg = _get_jobs_data(filters, refresh, session)
|
|
180
191
|
|
|
181
192
|
if raw:
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
align = "center" if len(job_data) == 0 else "right"
|
|
193
|
+
job_ids = [job[0] for job in job_data]
|
|
194
|
+
return job_ids
|
|
185
195
|
|
|
186
196
|
if running_in_jupyter():
|
|
187
|
-
return
|
|
188
|
-
return
|
|
197
|
+
return _display_jobs_jupyter(job_data, msg)
|
|
198
|
+
return _display_jobs_basic(job_data, msg)
|
|
@@ -31,10 +31,6 @@ Functions
|
|
|
31
31
|
get_qasm_version
|
|
32
32
|
get_program_type
|
|
33
33
|
load_program
|
|
34
|
-
remove_qasm_barriers
|
|
35
|
-
unfold_qasm_gate_defs
|
|
36
|
-
flatten_qasm_program
|
|
37
|
-
decompose_qasm_qelib1
|
|
38
34
|
|
|
39
35
|
Classes
|
|
40
36
|
--------
|
|
@@ -60,5 +56,3 @@ from .abc_program import QuantumProgram
|
|
|
60
56
|
from .exceptions import PackageValueError, ProgramTypeError, QasmError
|
|
61
57
|
from .inspector import get_program_type, get_qasm_version
|
|
62
58
|
from .loader import load_program
|
|
63
|
-
from .qasm_passes import flatten_qasm_program, remove_qasm_barriers, unfold_qasm_gate_defs
|
|
64
|
-
from .qasm_qelib1 import decompose_qasm_qelib1
|
|
@@ -24,8 +24,6 @@ from qbraid.providers.job import QuantumJob
|
|
|
24
24
|
from .result import BraketGateModelResult
|
|
25
25
|
from .tracker import get_quantum_task_cost
|
|
26
26
|
|
|
27
|
-
logger = logging.getLogger(__name__)
|
|
28
|
-
|
|
29
27
|
|
|
30
28
|
class AmazonBraketVersionError(Exception):
|
|
31
29
|
"""Exception raised for Amazon Braket SDK errors due to versioning."""
|
|
@@ -65,7 +63,7 @@ class BraketQuantumTask(QuantumJob):
|
|
|
65
63
|
def result(self) -> BraketGateModelResult:
|
|
66
64
|
"""Return the results of the job."""
|
|
67
65
|
if self.status() not in JOB_FINAL:
|
|
68
|
-
|
|
66
|
+
logging.info("Result will be available when job has reached final state.")
|
|
69
67
|
return BraketGateModelResult(self._job.result())
|
|
70
68
|
|
|
71
69
|
def cancel(self) -> None:
|
|
@@ -23,9 +23,10 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
|
|
|
23
23
|
from qbraid_core.services.quantum import QuantumClient, quantum_lib_proxy_state
|
|
24
24
|
|
|
25
25
|
from qbraid.programs import get_program_type, load_program
|
|
26
|
-
from qbraid.
|
|
26
|
+
from qbraid.providers.enums import DeviceType
|
|
27
|
+
from qbraid.transpiler import transpile
|
|
28
|
+
from qbraid.transpiler.exceptions import CircuitConversionError
|
|
27
29
|
|
|
28
|
-
from .enums import DeviceType
|
|
29
30
|
from .exceptions import ProgramValidationError, QbraidRuntimeError
|
|
30
31
|
from .job import QuantumJob
|
|
31
32
|
|
|
@@ -35,9 +36,6 @@ if TYPE_CHECKING:
|
|
|
35
36
|
import qbraid.transpiler
|
|
36
37
|
|
|
37
38
|
|
|
38
|
-
logger = logging.getLogger(__name__)
|
|
39
|
-
|
|
40
|
-
|
|
41
39
|
class QuantumDevice(ABC):
|
|
42
40
|
"""Abstract interface for device-like classes."""
|
|
43
41
|
|
|
@@ -69,7 +67,7 @@ class QuantumDevice(ABC):
|
|
|
69
67
|
device = client.get_device(vendor_id=self._vendor_id)
|
|
70
68
|
self._id = device["qbraid_id"]
|
|
71
69
|
except Exception as err: # pylint: disable=broad-exception-caught
|
|
72
|
-
|
|
70
|
+
logging.info(
|
|
73
71
|
"Error retrieving device ID from qBraid API: %s. "
|
|
74
72
|
"Field will be ommited in job metadata",
|
|
75
73
|
err,
|
|
@@ -196,7 +194,7 @@ class QuantumDevice(ABC):
|
|
|
196
194
|
except Exception as err: # pylint: disable=broad-exception-caught
|
|
197
195
|
if not safe_mode:
|
|
198
196
|
raise
|
|
199
|
-
|
|
197
|
+
logging.info("Error verifying run input: %s.", err)
|
|
200
198
|
return None
|
|
201
199
|
|
|
202
200
|
def transpile(
|
|
@@ -242,6 +240,7 @@ class QuantumDevice(ABC):
|
|
|
242
240
|
run_input: "qbraid.programs.QPROGRAM",
|
|
243
241
|
auto_compile: bool = False,
|
|
244
242
|
conversion_graph: "Optional[qbraid.transpiler.ConversionGraph]" = None,
|
|
243
|
+
log_level=logging.INFO,
|
|
245
244
|
) -> Tuple[Any, Dict[str, Any]]:
|
|
246
245
|
"""Process quantum program before passing to device run method.
|
|
247
246
|
|
|
@@ -265,13 +264,13 @@ class QuantumDevice(ABC):
|
|
|
265
264
|
except Exception as err: # pylint: disable=broad-exception-caught
|
|
266
265
|
if not safe_mode:
|
|
267
266
|
raise
|
|
268
|
-
|
|
267
|
+
logging.log(log_level, "Error loading run input: %s", err)
|
|
269
268
|
|
|
270
269
|
def try_extracting_info(lambda_expression, error_message):
|
|
271
270
|
try:
|
|
272
271
|
return lambda_expression()
|
|
273
|
-
except Exception: # pylint: disable=broad-exception-caught
|
|
274
|
-
|
|
272
|
+
except Exception as err: # pylint: disable=broad-exception-caught
|
|
273
|
+
logging.log(log_level, error_message, err)
|
|
275
274
|
return None
|
|
276
275
|
|
|
277
276
|
num_qubits = try_extracting_info(
|
|
@@ -23,8 +23,6 @@ from qbraid.providers.job import QuantumJob
|
|
|
23
23
|
|
|
24
24
|
from .result import QiskitResult
|
|
25
25
|
|
|
26
|
-
logger = logging.getLogger(__name__)
|
|
27
|
-
|
|
28
26
|
|
|
29
27
|
class QiskitJob(QuantumJob):
|
|
30
28
|
"""Wrapper class for IBM Qiskit ``Job`` objects."""
|
|
@@ -52,7 +50,7 @@ class QiskitJob(QuantumJob):
|
|
|
52
50
|
def result(self):
|
|
53
51
|
"""Return the results of the job."""
|
|
54
52
|
if self.status() not in JOB_FINAL:
|
|
55
|
-
|
|
53
|
+
logging.info("Result will be available when job has reached final state.")
|
|
56
54
|
return QiskitResult(self._job.result())
|
|
57
55
|
|
|
58
56
|
def cancel(self):
|
|
@@ -91,8 +91,7 @@ class QiskitProvider(QiskitRemoteService):
|
|
|
91
91
|
|
|
92
92
|
def save_config(self):
|
|
93
93
|
"""Save the current configuration."""
|
|
94
|
-
|
|
95
|
-
provider.save_account(token=self.qiskit_ibm_token, overwrite=True)
|
|
94
|
+
raise NotImplementedError
|
|
96
95
|
|
|
97
96
|
def _get_ibm_provider(self, **kwargs) -> "qiskit_ibm_provider.IBMProvider":
|
|
98
97
|
"""Returns the IBM Quantum provider."""
|