qbraid 0.6.0.dev20240404040745__tar.gz → 0.6.1__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.
Files changed (151) hide show
  1. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/PKG-INFO +18 -15
  2. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/README.md +16 -12
  3. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/pyproject.toml +4 -3
  4. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/__init__.py +1 -4
  5. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/_about.py +1 -1
  6. qbraid-0.6.0.dev20240404040745/qbraid/_warnings.py → qbraid-0.6.1/qbraid/_compat.py +15 -14
  7. qbraid-0.6.1/qbraid/_version.py +17 -0
  8. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/compiler/braket/ionq.py +2 -7
  9. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/get_devices.py +51 -58
  10. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/get_jobs.py +35 -45
  11. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/__init__.py +12 -0
  12. {qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions → qbraid-0.6.1/qbraid/programs}/qasm_passes.py +18 -1
  13. {qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions → qbraid-0.6.1/qbraid/programs}/qasm_qelib1.py +1 -1
  14. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/job.py +3 -1
  15. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/device.py +10 -9
  16. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/ibm/job.py +3 -1
  17. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/ibm/provider.py +2 -1
  18. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/job.py +3 -1
  19. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/provider.py +1 -5
  20. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/__init__.py +2 -0
  21. qbraid-0.6.1/qbraid/transpiler/annotations.py +39 -0
  22. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/__init__.py +0 -14
  23. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/braket/__init__.py +2 -3
  24. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/braket/cirq_from_braket.py +7 -33
  25. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/braket/cirq_to_braket.py +4 -4
  26. qbraid-0.6.1/qbraid/transpiler/conversions/braket/conversions_cirq.py +50 -0
  27. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/braket/conversions_qasm.py +2 -21
  28. qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/braket/custom_gates.py → qbraid-0.6.1/qbraid/transpiler/conversions/braket/custom_instr.py +31 -1
  29. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/cirq/__init__.py +2 -2
  30. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/cirq/cirq_qasm_parser.py +1 -1
  31. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/cirq/conversions_qasm.py +6 -5
  32. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/openqasm3/__init__.py +1 -5
  33. qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/openqasm3/convert_qasm.py → qbraid-0.6.1/qbraid/transpiler/conversions/openqasm3/conversions_qasm.py +1 -1
  34. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/pennylane/__init__.py +1 -1
  35. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/pyquil/__init__.py +1 -1
  36. qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/pyquil/quil_output.py → qbraid-0.6.1/qbraid/transpiler/conversions/pyquil/cirq_quil_output.py +1 -3
  37. qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/pyquil/conversions.py → qbraid-0.6.1/qbraid/transpiler/conversions/pyquil/conversions_cirq.py +18 -6
  38. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/pytket/__init__.py +4 -1
  39. qbraid-0.6.1/qbraid/transpiler/conversions/pytket/conversions_braket.py +55 -0
  40. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/qiskit/__init__.py +1 -6
  41. qbraid-0.6.1/qbraid/transpiler/conversions/qiskit/conversions_braket.py +61 -0
  42. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/converter.py +9 -8
  43. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/edge.py +27 -13
  44. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/exceptions.py +1 -0
  45. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/graph.py +24 -4
  46. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/plot_conversions.py +3 -1
  47. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/PKG-INFO +18 -15
  48. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/SOURCES.txt +13 -9
  49. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/requires.txt +1 -2
  50. qbraid-0.6.1/requirements.txt +5 -0
  51. qbraid-0.6.1/tools/set_provider_configs.py +75 -0
  52. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/tox.ini +5 -2
  53. qbraid-0.6.0.dev20240404040745/qbraid/_version.py +0 -1
  54. qbraid-0.6.0.dev20240404040745/requirements.txt +0 -5
  55. qbraid-0.6.0.dev20240404040745/tools/set_provider_configs.py +0 -91
  56. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/CODE_OF_CONDUCT.md +0 -0
  57. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/CONTRIBUTING.md +0 -0
  58. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/LICENSE +0 -0
  59. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/MANIFEST.in +0 -0
  60. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/cards/jupyter.png +0 -0
  61. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/cards/python.png +0 -0
  62. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/cards/terminal.png +0 -0
  63. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/favicon.ico +0 -0
  64. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/logo.png +0 -0
  65. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/braket.png +0 -0
  66. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/cirq.png +0 -0
  67. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/pennylane.png +0 -0
  68. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/pyquil.png +0 -0
  69. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/qasm.png +0 -0
  70. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/qir.png +0 -0
  71. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/qiskit.png +0 -0
  72. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/pkg-logos/quantinuum.png +0 -0
  73. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/batch_counts.png +0 -0
  74. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/conversion_graph.png +0 -0
  75. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/get_devices.png +0 -0
  76. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/hub_spokes.png +0 -0
  77. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/lab_jobs.png +0 -0
  78. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/_static/sdk-files/plot_counts.png +0 -0
  79. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.compiler.rst +0 -0
  80. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.interface.rst +0 -0
  81. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.programs.rst +0 -0
  82. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.providers.rst +0 -0
  83. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.rst +0 -0
  84. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.transpiler.rst +0 -0
  85. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/api/qbraid.visualization.rst +0 -0
  86. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/conf.py +0 -0
  87. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/index.rst +0 -0
  88. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/devices.rst +0 -0
  89. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/jobs.rst +0 -0
  90. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/overview.rst +0 -0
  91. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/programs.rst +0 -0
  92. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/providers.rst +0 -0
  93. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/results.rst +0 -0
  94. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/docs/sdk/transpiler.rst +0 -0
  95. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/_display.py +0 -0
  96. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/_import.py +0 -0
  97. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/compiler/__init__.py +0 -0
  98. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/compiler/braket/__init__.py +0 -0
  99. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/compiler/exceptions.py +0 -0
  100. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/exceptions.py +0 -0
  101. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/__init__.py +0 -0
  102. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/circuit_equality.py +0 -0
  103. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/random/__init__.py +0 -0
  104. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/random/cirq_random.py +0 -0
  105. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/random/qasm3_random.py +0 -0
  106. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/random/qiskit_random.py +0 -0
  107. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/interface/random/random.py +0 -0
  108. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/_import.py +0 -0
  109. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/abc_program.py +0 -0
  110. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/exceptions.py +0 -0
  111. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/inspector.py +0 -0
  112. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/__init__.py +0 -0
  113. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/braket.py +0 -0
  114. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/cirq.py +0 -0
  115. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/pennylane.py +0 -0
  116. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/pyquil.py +0 -0
  117. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/pytket.py +0 -0
  118. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/qasm2.py +0 -0
  119. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/qasm3.py +0 -0
  120. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/libs/qiskit.py +0 -0
  121. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/programs/loader.py +0 -0
  122. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/__init__.py +0 -0
  123. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/_import.py +0 -0
  124. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/__init__.py +0 -0
  125. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/device.py +0 -0
  126. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/provider.py +0 -0
  127. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/result.py +0 -0
  128. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/aws/tracker.py +0 -0
  129. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/enums.py +0 -0
  130. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/exceptions.py +0 -0
  131. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/ibm/__init__.py +0 -0
  132. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/ibm/device.py +0 -0
  133. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/ibm/result.py +0 -0
  134. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/result.py +0 -0
  135. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/providers/status_maps.py +0 -0
  136. /qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/cirq/cirq_gates.py → /qbraid-0.6.1/qbraid/transpiler/conversions/cirq/custom_ops.py +0 -0
  137. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/pennylane/conversions_qasm.py +0 -0
  138. /qbraid-0.6.0.dev20240404040745/qbraid/transpiler/conversions/pyquil/quil_input.py → /qbraid-0.6.1/qbraid/transpiler/conversions/pyquil/cirq_quil_input.py +0 -0
  139. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/pytket/conversions_qasm.py +0 -0
  140. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/transpiler/conversions/qiskit/conversions_qasm.py +0 -0
  141. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/__init__.py +0 -0
  142. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/draw_circuit.py +0 -0
  143. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/draw_qasm3.py +0 -0
  144. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/exceptions.py +0 -0
  145. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid/visualization/plot_counts.py +0 -0
  146. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/dependency_links.txt +0 -0
  147. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/entry_points.txt +0 -0
  148. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/qbraid.egg-info/top_level.txt +0 -0
  149. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/requirements-dev.txt +0 -0
  150. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/setup.cfg +0 -0
  151. {qbraid-0.6.0.dev20240404040745 → qbraid-0.6.1}/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.dev20240404040745
3
+ Version: 0.6.1
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==0.1.0.dev3
706
+ Requires-Dist: qbraid-core<0.2.0,>=0.1.1
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
@@ -730,7 +730,6 @@ Requires-Dist: ipython; extra == "visualization"
730
730
  Requires-Dist: matplotlib; extra == "visualization"
731
731
  Requires-Dist: pylatexenc; extra == "visualization"
732
732
  Provides-Extra: test
733
- Requires-Dist: qbraid~=0.5.3; extra == "test"
734
733
  Requires-Dist: pytest; extra == "test"
735
734
  Requires-Dist: pytest-cov; extra == "test"
736
735
  Provides-Extra: lint
@@ -794,11 +793,7 @@ For the best experience, install the qBraid-SDK environment on
794
793
  [create an account](https://account.qbraid.com)) and follow the steps to
795
794
  [install an environment](https://docs.qbraid.com/projects/lab/en/latest/lab/environments.html#install-environment).
796
795
 
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.
796
+ Using the SDK on [qBraid Lab](https://docs.qbraid.com/projects/lab/en/latest/lab/overview.html) means direct, pre-configured access to QPUs from IonQ, Oxford Quantum Circuits, QuEra, and Rigetti, as well as on-demand simulators from AWS, all with no additional access keys or API tokens required. See [qBraid Quantum Jobs](https://docs.qbraid.com/projects/lab/en/latest/lab/quantum_jobs.html) for more.
802
797
 
803
798
  ### Local install
804
799
 
@@ -902,12 +897,24 @@ from qbraid.transpiler import ConversionGraph
902
897
  from qbraid.visualization import plot_conversion_graph
903
898
 
904
899
  graph = ConversionGraph()
905
- plot_conversion_graph(graph)
900
+
901
+ graph.plot()
906
902
  ```
907
903
 
908
904
  <img align="middle" width="full" alt="conversion_graph" src="https://qbraid-static.s3.amazonaws.com/conversion_graph.png">
909
905
 
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).
906
+ You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges. For [example](https://github.com/qBraid/qbraid-qir?tab=readme-ov-file#add-qir-node-to-qbraid-conversion-graph):
907
+
908
+ ```python
909
+ from qbraid_qir.qasm3 import qasm3_to_qir
910
+ from qbraid.transpiler import Conversion
911
+
912
+ conversion = Conversion("qasm3", "qir", qasm3_to_qir)
913
+
914
+ graph.add_conversion(conversion)
915
+
916
+ graph.plot()
917
+ ```
911
918
 
912
919
  ### Devices & Jobs
913
920
 
@@ -1041,14 +1048,10 @@ Use the badge in your project's `README.rst`:
1041
1048
  [CONTRIBUTING.md](CONTRIBUTING.md)
1042
1049
  - For feature requests and bug reports:
1043
1050
  [Submit an issue](https://github.com/qBraid/qBraid/issues)
1044
- - For discussions, and specific questions about the qBraid SDK, qBraid Lab, or
1045
- other topics, [join our discord community](https://discord.gg/TPBU2sa8Et)
1051
+ - For discussions, and specific questions about the qBraid-SDK [join our discord community](https://discord.gg/TPBU2sa8Et)
1046
1052
  - For questions that are more suited for a forum, post to
1047
1053
  [Quantum Computing Stack Exchange](https://quantumcomputing.stackexchange.com/)
1048
1054
  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)
1052
1055
 
1053
1056
  ## License
1054
1057
 
@@ -49,11 +49,7 @@ 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 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.
52
+ Using the SDK on [qBraid Lab](https://docs.qbraid.com/projects/lab/en/latest/lab/overview.html) means direct, pre-configured access to QPUs from IonQ, Oxford Quantum Circuits, QuEra, and Rigetti, as well as on-demand simulators from AWS, all with no additional access keys or API tokens required. See [qBraid Quantum Jobs](https://docs.qbraid.com/projects/lab/en/latest/lab/quantum_jobs.html) for more.
57
53
 
58
54
  ### Local install
59
55
 
@@ -157,12 +153,24 @@ from qbraid.transpiler import ConversionGraph
157
153
  from qbraid.visualization import plot_conversion_graph
158
154
 
159
155
  graph = ConversionGraph()
160
- plot_conversion_graph(graph)
156
+
157
+ graph.plot()
161
158
  ```
162
159
 
163
160
  <img align="middle" width="full" alt="conversion_graph" src="https://qbraid-static.s3.amazonaws.com/conversion_graph.png">
164
161
 
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).
162
+ You can use the native conversions supported by qBraid, or define your own custom nodes and/or edges. For [example](https://github.com/qBraid/qbraid-qir?tab=readme-ov-file#add-qir-node-to-qbraid-conversion-graph):
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
+ ```
166
174
 
167
175
  ### Devices & Jobs
168
176
 
@@ -296,14 +304,10 @@ Use the badge in your project's `README.rst`:
296
304
  [CONTRIBUTING.md](CONTRIBUTING.md)
297
305
  - For feature requests and bug reports:
298
306
  [Submit an issue](https://github.com/qBraid/qBraid/issues)
299
- - For discussions, and specific questions about the qBraid SDK, qBraid Lab, or
300
- other topics, [join our discord community](https://discord.gg/TPBU2sa8Et)
307
+ - For discussions, and specific questions about the qBraid-SDK [join our discord community](https://discord.gg/TPBU2sa8Et)
301
308
  - For questions that are more suited for a forum, post to
302
309
  [Quantum Computing Stack Exchange](https://quantumcomputing.stackexchange.com/)
303
310
  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)
307
311
 
308
312
  ## License
309
313
 
@@ -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==0.1.0.dev3"
31
+ "qbraid-core>=0.1.1,<0.2.0"
32
32
  ]
33
33
  requires-python = ">= 3.9"
34
34
 
@@ -50,7 +50,7 @@ qir = ["qbraid-qir>=0.1.1,<0.2.0"]
50
50
  qiskit = ["qiskit>=0.44.0,<1.1.0", "qiskit-ibm-provider>=0.5.3,<0.11.0", "qiskit-ibm-runtime>=0.18.0,<0.21.0", "qiskit[visualization]"]
51
51
  ionq = ["cirq-core>=1.3.0,<1.4.0", "cirq-ionq>=1.3.0,<1.4.0", "pytket-braket>=0.30.0,<0.36.0"]
52
52
  visualization = ["ipython", "matplotlib", "pylatexenc"]
53
- test = ["qbraid~=0.5.3", "pytest", "pytest-cov"]
53
+ test = ["pytest", "pytest-cov"]
54
54
  lint = ["black", "isort", "pylint"]
55
55
  docs = ["sphinx~=7.2.6", "sphinx-autodoc-typehints>=1.24,<2.1", "sphinx-rtd-theme>=1.3,<2.1", "docutils<0.21"]
56
56
 
@@ -100,7 +100,8 @@ 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"
103
+ "**/qbraid/visualization/draw_circuit.py.py",
104
+ "**/qbraid/_compat.py",
104
105
  ]
105
106
 
106
107
  [tool.coverage.paths]
@@ -21,7 +21,6 @@ Functions
21
21
 
22
22
  about
23
23
  get_devices
24
- refresh_devices
25
24
  get_jobs
26
25
 
27
26
 
@@ -45,12 +44,11 @@ Exceptions
45
44
  """
46
45
  import sys
47
46
 
48
- from . import _warnings
49
47
  from ._about import about
50
48
  from ._import import LazyLoader
51
49
  from ._version import __version__
52
50
  from .exceptions import QbraidError
53
- from .get_devices import get_devices, refresh_devices
51
+ from .get_devices import get_devices
54
52
  from .get_jobs import get_jobs
55
53
 
56
54
  if "sphinx" in sys.modules:
@@ -74,7 +72,6 @@ __all__ = [
74
72
  "programs",
75
73
  "providers",
76
74
  "QbraidError",
77
- "refresh_devices",
78
75
  "transpiler",
79
76
  "visualization",
80
77
  ]
@@ -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._version import __version__ as qbraid_core_version
25
+ from qbraid_core import __version__ as qbraid_core_version
26
26
 
27
27
  from ._version import __version__ as qbraid_version
28
28
 
@@ -9,34 +9,35 @@
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 disabling warnings at top level.
12
+ Module for emitting and configuring warnings and logging at top level.
13
13
 
14
14
  """
15
15
  import logging
16
+ import os
16
17
  import warnings
17
18
 
18
- from qbraid_core._warnings import _check_version
19
+ from qbraid_core._compat import check_version
19
20
 
20
- # Set up logging configuration to suppress INFO messages
21
- logging.basicConfig(level=logging.WARNING)
22
- logging.getLogger("qiskit").setLevel(logging.WARNING)
21
+
22
+ def configure_logging():
23
+ """Configure logging to show warnings and errors."""
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
+ )
23
29
 
24
30
 
25
- def _filterwarnings():
31
+ def filterwarnings():
26
32
  """Filter out warnings that are not relevant to the user."""
27
33
  warnings.filterwarnings("ignore", category=SyntaxWarning)
28
34
  warnings.filterwarnings(
29
35
  "ignore", category=UserWarning, message="Setuptools is replacing distutils"
30
36
  )
31
37
  warnings.filterwarnings("ignore", category=DeprecationWarning)
32
- # warnings.filterwarnings("ignore", category=PendingDeprecationWarning)
33
38
  warnings.filterwarnings("ignore", category=RuntimeWarning, module="numpy")
34
39
 
35
40
 
36
- def _warn_version():
37
- """Emit a warning."""
38
- _check_version("qbraid")
39
-
40
-
41
- _warn_version()
42
- _filterwarnings()
41
+ def check_warn_version_update():
42
+ """Emit a warning if updated package version exists."""
43
+ check_version("qbraid")
@@ -0,0 +1,17 @@
1
+ # Copyright (C) 2023 qBraid
2
+ #
3
+ # This file is part of the qBraid-SDK
4
+ #
5
+ # The qBraid-SDK is free software released under the GNU General Public License v3
6
+ # or later. You can redistribute and/or modify it under the terms of the GPL v3.
7
+ # See the LICENSE file in the project root or <https://www.gnu.org/licenses/gpl-3.0.html>.
8
+ #
9
+ # THERE IS NO WARRANTY for the qBraid-SDK, as per Section 15 of the GPL v3.
10
+
11
+ """
12
+ Module containing version information
13
+
14
+ Version number (major.minor.patch[-label])
15
+
16
+ """
17
+ __version__ = "0.6.1"
@@ -15,7 +15,6 @@ Module for converting generic quantum circuits to basis gate set compatible with
15
15
  from typing import Union
16
16
 
17
17
  import pytket
18
- import pytket.extensions.braket
19
18
  from braket.circuits import Circuit
20
19
 
21
20
  try:
@@ -118,10 +117,7 @@ def braket_ionq_compile(circuit: Union[Circuit, pytket.circuit.Circuit]) -> Circ
118
117
 
119
118
  """
120
119
  if isinstance(circuit, Circuit):
121
- try:
122
- tk_circuit = pytket.extensions.braket.braket_convert.braket_to_tk(circuit)
123
- except NotImplementedError:
124
- tk_circuit = transpile(circuit, "pytket")
120
+ tk_circuit = transpile(circuit, "pytket")
125
121
  else:
126
122
  tk_circuit = circuit
127
123
 
@@ -129,5 +125,4 @@ def braket_ionq_compile(circuit: Union[Circuit, pytket.circuit.Circuit]) -> Circ
129
125
  ionq_rebase_pass.apply(cu)
130
126
  if not cu.check_all_predicates():
131
127
  raise CompilerError("Circuit cannot be compiled to IonQ Harmony.")
132
- compiled, _, _ = pytket.extensions.braket.braket_convert.tk_to_braket(cu.circuit)
133
- return compiled
128
+ return transpile(cu.circuit, "braket")
@@ -15,68 +15,20 @@ Module to retrieve, update, and display information about devices
15
15
  supported by the qBraid SDK.
16
16
 
17
17
  """
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
18
+ from typing import Any, Dict, List, Optional
22
19
 
23
20
  try:
24
21
  from IPython.display import HTML, clear_output, display
25
22
  except ImportError:
26
23
  pass
27
24
 
28
- from ._display import running_in_jupyter, update_progress_bar
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
38
-
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"
25
+ from qbraid_core import QbraidSession
26
+ from qbraid_core.services.quantum import QuantumClient, process_device_data
71
27
 
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)
28
+ from ._display import running_in_jupyter, update_progress_bar
77
29
 
78
30
 
79
- def _display_basic(data: List[str], message: str) -> None:
31
+ def _display_basic(data: List[str], message: str):
80
32
  if len(data) == 0:
81
33
  print(message)
82
34
  else:
@@ -134,9 +86,34 @@ def _display_jupyter(data: List[str], message: Optional[str] = None, align: str
134
86
  return display(HTML(html))
135
87
 
136
88
 
137
- def get_devices(
138
- filters: Optional[Dict[str, Any]] = None, refresh: bool = False
139
- ) -> "Optional[Union[DisplayHandle, Any]]":
89
+ def _refresh_devices() -> None:
90
+ """Refreshes status for all qbraid supported devices. Requires credential for each vendor."""
91
+ # pylint: disable-next=import-outside-toplevel
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):
140
117
  """Displays a list of all supported devices matching given filters, tabulated by provider,
141
118
  name, and qBraid ID. Each device also has a status given by a solid green bubble or a hollow
142
119
  red bubble, indicating that the device is online or offline, respectively. You can narrow your
@@ -201,9 +178,25 @@ def get_devices(
201
178
 
202
179
  """
203
180
  if refresh:
204
- refresh_devices()
181
+ _refresh_devices()
182
+
183
+ session = QbraidSession()
205
184
  query = {} if filters is None else filters
206
- device_data, msg = _get_device_data(query)
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)
207
200
  align = "center" if len(device_data) == 0 else "right"
208
201
 
209
202
  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, Tuple
20
+ from typing import Any, Dict, List, Optional
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.adapter import _job_status_msg
28
+ from qbraid_core.services.quantum import QuantumClient, process_job_data
29
29
 
30
- from qbraid._display import running_in_jupyter, update_progress_bar
30
+ from ._display import running_in_jupyter, update_progress_bar
31
31
 
32
32
 
33
- def _display_jobs_basic(data, msg):
33
+ def _display_basic(data: List[str], message: str) -> None:
34
34
  if len(data) == 0:
35
- print(msg)
35
+ print(message)
36
36
  else:
37
37
  headers = ["Job ID", "Submitted", "Status"]
38
38
 
@@ -43,7 +43,7 @@ def _display_jobs_basic(data, msg):
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"{msg}:\n")
46
+ print(f"{message}:\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_jobs_basic(data, msg):
53
53
  print(row_format.format(job_id, timestamp, status))
54
54
 
55
55
 
56
- def _display_jobs_jupyter(data, msg):
56
+ def _display_jupyter(data: List[str], message: Optional[str] = None, align: str = "right"):
57
57
  clear_output(wait=True)
58
58
 
59
59
  html = """<h3>Quantum Jobs</h3><table><tr>
@@ -87,43 +87,29 @@ def _display_jobs_jupyter(data, msg):
87
87
  <td style='text-align:left'>{status}</td></tr>
88
88
  """
89
89
 
90
- html += f"<tr><td colspan='4'; style='text-align:right'>{msg}</td></tr>"
90
+ html += f"<tr><td colspan='4'; style='text-align:{align}'>{message}</td></tr>"
91
91
 
92
92
  html += "</table>"
93
93
 
94
94
  return display(HTML(html))
95
95
 
96
96
 
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]:
97
+ def _refresh_jobs(job_data: List[str]) -> List[str]:
98
+ """Refreshes the status of all quantum jobs in the list."""
102
99
  from qbraid.providers import QuantumJob # pylint: disable=import-outside-toplevel
103
100
 
104
- session = QbraidSession() if not session else session
105
- jobs = session.post("/get-user-jobs", json=query).json()
106
101
  count = 0
107
- num_jobs = len(jobs)
108
- job_data = []
109
- for document in jobs:
102
+ num_jobs = len(job_data)
103
+ job_data_refresh = []
104
+ for job_id, created_at, status in job_data:
110
105
  count += 1
111
106
  progress = count / num_jobs
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"))
107
+ update_progress_bar(progress)
122
108
  try:
123
109
  status_final = QuantumJob.status_final(status)
124
110
  except Exception: # pylint: disable=broad-except
125
111
  status_final = True
126
- if refresh and not status_final:
112
+ if not status_final:
127
113
  try:
128
114
  qbraid_job = QuantumJob.retrieve(job_id)
129
115
  with warnings.catch_warnings():
@@ -132,19 +118,12 @@ def _get_jobs_data(
132
118
  status = status_obj.name
133
119
  except Exception: # pylint: disable=broad-except
134
120
  pass
135
- job_data.append([job_id, created_at, status])
121
+ job_data_refresh.append([job_id, created_at, status])
136
122
 
137
- msg = _job_status_msg(num_jobs, query)
123
+ return job_data_refresh
138
124
 
139
- return job_data, msg
140
125
 
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
126
+ def get_jobs(filters: Optional[Dict[str, Any]] = None, refresh: bool = False, raw: bool = False):
148
127
  """Displays a list of quantum jobs submitted by user, tabulated by job ID,
149
128
  the date/time it was submitted, and status. You can specify filters to
150
129
  narrow the search by supplying a dictionary containing the desired criteria.
@@ -182,17 +161,28 @@ def get_jobs(
182
161
  filters (dict): A dictionary containing any filters to be applied.
183
162
  refresh (bool): If True, refreshes the status of all jobs before displaying them.
184
163
  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.
186
164
 
187
165
  """
188
166
  filters = filters or {}
189
167
 
190
- job_data, msg = _get_jobs_data(filters, refresh, session)
168
+ session = QbraidSession()
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)
191
180
 
192
181
  if raw:
193
- job_ids = [job[0] for job in job_data]
194
- return job_ids
182
+ return [job[0] for job in job_data]
183
+
184
+ align = "center" if len(job_data) == 0 else "right"
195
185
 
196
186
  if running_in_jupyter():
197
- return _display_jobs_jupyter(job_data, msg)
198
- return _display_jobs_basic(job_data, msg)
187
+ return _display_jupyter(job_data, msg, align=align)
188
+ return _display_basic(job_data, msg)
@@ -31,6 +31,11 @@ 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
+ convert_qasm_pi_to_decimal
34
39
 
35
40
  Classes
36
41
  --------
@@ -56,3 +61,10 @@ from .abc_program import QuantumProgram
56
61
  from .exceptions import PackageValueError, ProgramTypeError, QasmError
57
62
  from .inspector import get_program_type, get_qasm_version
58
63
  from .loader import load_program
64
+ from .qasm_passes import (
65
+ convert_qasm_pi_to_decimal,
66
+ flatten_qasm_program,
67
+ remove_qasm_barriers,
68
+ unfold_qasm_gate_defs,
69
+ )
70
+ from .qasm_qelib1 import decompose_qasm_qelib1
@@ -12,9 +12,26 @@
12
12
  Module for preprocessing qasm string to before it is passed to parser.
13
13
 
14
14
  """
15
+ import math
15
16
  import re
16
17
 
17
- from qbraid.transpiler.conversions.qasm_qelib1 import decompose_qasm_qelib1
18
+ from .qasm_qelib1 import decompose_qasm_qelib1
19
+
20
+
21
+ def convert_qasm_pi_to_decimal(qasm_str: str) -> str:
22
+ """Convert all instances of 'pi' in the QASM string to their decimal value."""
23
+
24
+ pattern = r"(\d*\.?\d*\s*[*/+-]\s*)?pi(\s*[*/+-]\s*\d*\.?\d*)?"
25
+
26
+ def replace_with_decimal(match):
27
+ expr = match.group()
28
+ try:
29
+ value = eval(expr.replace("pi", str(math.pi))) # pylint: disable=eval-used
30
+ except SyntaxError:
31
+ return expr
32
+ return str(value)
33
+
34
+ return re.sub(pattern, replace_with_decimal, qasm_str)
18
35
 
19
36
 
20
37
  def remove_qasm_barriers(qasm_str: str) -> str:
@@ -15,7 +15,7 @@ Module that implements qelib1.inc qasm gate definitions as python functions
15
15
  import re
16
16
  from typing import Optional
17
17
 
18
- from qbraid.programs.exceptions import QasmError
18
+ from .exceptions import QasmError
19
19
 
20
20
 
21
21
  def _get_param(instr: str) -> Optional[str]: