qcs-sdk-python 0.19.3__tar.gz → 0.20.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 (168) hide show
  1. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/Cargo.lock +59 -29
  2. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/Cargo.toml +6 -6
  3. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/PKG-INFO +18 -1
  4. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/CHANGELOG.md +38 -0
  5. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/Cargo.toml +2 -2
  6. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/quilc.rs +4 -7
  7. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/executable.rs +7 -7
  8. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/api.rs +72 -16
  9. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qvm/execution.rs +3 -3
  10. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/CHANGELOG.md +38 -0
  11. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/Cargo.toml +7 -2
  12. qcs_sdk_python-0.20.1/crates/python/Makefile.toml +110 -0
  13. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/layers/__init__.py +0 -1
  14. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/_tracing_subscriber/layers/__init__.pyi +8 -8
  15. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/_tracing_subscriber/layers/file/__init__.py +0 -2
  16. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/_tracing_subscriber/layers/file/__init__.pyi +0 -1
  17. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/_tracing_subscriber/layers/otel_otlp/__init__.py +0 -1
  18. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/_tracing_subscriber/layers/otel_otlp/__init__.pyi +2 -4
  19. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/layers/otel_otlp_file/__init__.py +0 -1
  20. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/layers/otel_otlp_file/__init__.pyi +0 -1
  21. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/subscriber/__init__.py +0 -1
  22. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/subscriber/__init__.pyi +0 -1
  23. qcs_sdk_python-0.20.1/crates/python/qcs_sdk/client.pyi +155 -0
  24. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/qpu/api.pyi +11 -0
  25. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qpu/isa.pyi +19 -6
  26. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1/crates/python}/qcs_sdk/qpu/translation.pyi +4 -0
  27. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/client.rs +30 -83
  28. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/compiler/quilc.rs +2 -3
  29. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/executable.rs +1 -2
  30. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/lib.rs +2 -3
  31. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qpu/api.rs +24 -5
  32. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qpu/isa.rs +9 -7
  33. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qpu/mod.rs +3 -2
  34. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qpu/translation.rs +17 -5
  35. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qvm/api.rs +3 -2
  36. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qvm/mod.rs +3 -2
  37. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/compiler/__snapshots__/test_quilc.ambr +1 -0
  38. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/test_client.py +9 -13
  39. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/pyproject.toml +21 -32
  40. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/__init__.py +0 -1
  41. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/__init__.pyi +8 -8
  42. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/file/__init__.py +0 -2
  43. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/file/__init__.pyi +0 -1
  44. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/otel_otlp/__init__.py +0 -1
  45. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/otel_otlp/__init__.pyi +2 -4
  46. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/otel_otlp_file/__init__.py +0 -1
  47. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/layers/otel_otlp_file/__init__.pyi +0 -1
  48. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/subscriber/__init__.py +0 -1
  49. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/subscriber/__init__.pyi +0 -1
  50. qcs_sdk_python-0.20.1/qcs_sdk/client.pyi +155 -0
  51. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/qpu/api.pyi +11 -0
  52. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qpu/isa.pyi +19 -6
  53. {qcs_sdk_python-0.19.3/crates/python → qcs_sdk_python-0.20.1}/qcs_sdk/qpu/translation.pyi +4 -0
  54. qcs_sdk_python-0.19.3/crates/python/Makefile.toml +0 -79
  55. qcs_sdk_python-0.19.3/crates/python/qcs_sdk/client.pyi +0 -116
  56. qcs_sdk_python-0.19.3/crates/python/src/py_sync.rs +0 -133
  57. qcs_sdk_python-0.19.3/qcs_sdk/client.pyi +0 -116
  58. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/README.md +0 -0
  59. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/Makefile.toml +0 -0
  60. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/README.md +0 -0
  61. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/build.rs +0 -0
  62. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/delayed_job_retrieval.rs +0 -0
  63. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/execute.rs +0 -0
  64. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/libquil.rs +0 -0
  65. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/local.rs +0 -0
  66. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/parametric_compilation.rs +0 -0
  67. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/examples/quil_t.rs +0 -0
  68. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/bin/diagnostics.rs +0 -0
  69. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/client.rs +0 -0
  70. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/isa/edge.rs +0 -0
  71. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/isa/mod.rs +0 -0
  72. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/isa/operator.rs +0 -0
  73. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/isa/qubit.rs +0 -0
  74. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/libquil.rs +0 -0
  75. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/mod.rs +0 -0
  76. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/compiler/rpcq.rs +0 -0
  77. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/diagnostics.rs +0 -0
  78. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/execution_data.rs +0 -0
  79. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/lib.rs +0 -0
  80. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/execution.rs +0 -0
  81. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/mod.rs +0 -0
  82. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/result_data.rs +0 -0
  83. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_allocates_for_multiple_expressions-2.snap +0 -0
  84. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_allocates_for_multiple_expressions.snap +0 -0
  85. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_converts_frequency_expressions-2.snap +0 -0
  86. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_converts_frequency_expressions.snap +0 -0
  87. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_converts_phases.snap +0 -0
  88. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_converts_set_scale_units.snap +0 -0
  89. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_substitutes_and_reuses_gate_expressions.snap +0 -0
  90. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/snapshots/qcs__qpu__rewrite_arithmetic__describe_rewrite_arithmetic__it_substitutes_gate_parameters.snap +0 -0
  91. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qpu/translation.rs +0 -0
  92. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qvm/http.rs +0 -0
  93. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qvm/libquil.rs +0 -0
  94. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qvm/mod.rs +0 -0
  95. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/qvm/snapshots/qcs__qvm__test__apply_valid_parameters_to_program.snap +0 -0
  96. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/src/register_data.rs +0 -0
  97. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/aspen_9_isa.json +0 -0
  98. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/basic_qvm.rs +0 -0
  99. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/bell_state_response_data.hex +0 -0
  100. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/compiler-isa-Aspen-8.json +0 -0
  101. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/mocked_qpu.rs +0 -0
  102. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/parametric_compilation.rs +0 -0
  103. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/qcs-isa-Aspen-8.json +0 -0
  104. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/qvm_api.rs +0 -0
  105. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/qvm_isa.json +0 -0
  106. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/secrets.toml +0 -0
  107. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/lib/tests/settings.toml +0 -0
  108. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/.flake8 +0 -0
  109. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/.stubtest-allowlist +0 -0
  110. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/README.md +0 -0
  111. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/build.rs +0 -0
  112. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/poetry.lock +0 -0
  113. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/__init__.py +0 -0
  114. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/__init__.pyi +0 -0
  115. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/.stubtest-allowlist +0 -0
  116. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/__init__.py +0 -0
  117. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/_tracing_subscriber/__init__.pyi +0 -0
  118. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/client.py +0 -0
  119. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/compiler/__init__.py +0 -0
  120. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/compiler/__init__.pyi +0 -0
  121. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/compiler/quilc.pyi +0 -0
  122. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/diagnostics.py +0 -0
  123. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/py.typed +0 -0
  124. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qpu/__init__.py +0 -0
  125. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qpu/__init__.pyi +0 -0
  126. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qvm/__init__.py +0 -0
  127. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qvm/__init__.pyi +0 -0
  128. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/qcs_sdk/qvm/api.pyi +0 -0
  129. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/scripts/patch_grpc_web.py +0 -0
  130. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/compiler/mod.rs +0 -0
  131. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/execution_data.rs +0 -0
  132. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/from_py.rs +0 -0
  133. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/grpc/mod.rs +0 -0
  134. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/grpc/models/controller.rs +0 -0
  135. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/grpc/models/mod.rs +0 -0
  136. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/qpu/result_data.rs +0 -0
  137. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/src/register_data.rs +0 -0
  138. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/_fixtures/aspen-m-3.json +0 -0
  139. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/_fixtures/device-2q.json +0 -0
  140. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/_qcs_config/secrets.toml +0 -0
  141. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/_qcs_config/settings.toml +0 -0
  142. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/compiler/test_quilc.py +0 -0
  143. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/conftest.py +0 -0
  144. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/execution_data/test_execution_data.py +0 -0
  145. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/qpu/test_api.py +0 -0
  146. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/qpu/test_isa.py +0 -0
  147. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/qpu/test_qpu.py +0 -0
  148. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/qpu/test_translation.py +0 -0
  149. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/qvm/test_qvm.py +0 -0
  150. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/test_diagnostics.py +0 -0
  151. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/test_executable.py +0 -0
  152. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/test_logging.py +0 -0
  153. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/crates/python/tests/test_tracing_subscriber.py +0 -0
  154. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/__init__.py +0 -0
  155. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/__init__.pyi +0 -0
  156. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/__init__.py +0 -0
  157. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/_tracing_subscriber/__init__.pyi +0 -0
  158. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/client.py +0 -0
  159. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/compiler/__init__.py +0 -0
  160. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/compiler/__init__.pyi +0 -0
  161. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/compiler/quilc.pyi +0 -0
  162. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/diagnostics.py +0 -0
  163. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/py.typed +0 -0
  164. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qpu/__init__.py +0 -0
  165. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qpu/__init__.pyi +0 -0
  166. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qvm/__init__.py +0 -0
  167. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qvm/__init__.pyi +0 -0
  168. {qcs_sdk_python-0.19.3 → qcs_sdk_python-0.20.1}/qcs_sdk/qvm/api.pyi +0 -0
@@ -1592,18 +1592,18 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
1592
1592
 
1593
1593
  [[package]]
1594
1594
  name = "lexical"
1595
- version = "6.1.1"
1595
+ version = "7.0.1"
1596
1596
  source = "registry+https://github.com/rust-lang/crates.io-index"
1597
- checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
1597
+ checksum = "8ecd3381ac77c22d4e2607284ac71e44b21c21bd3785ee807d21976d54ee16f9"
1598
1598
  dependencies = [
1599
1599
  "lexical-core",
1600
1600
  ]
1601
1601
 
1602
1602
  [[package]]
1603
1603
  name = "lexical-core"
1604
- version = "0.8.5"
1604
+ version = "1.0.1"
1605
1605
  source = "registry+https://github.com/rust-lang/crates.io-index"
1606
- checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
1606
+ checksum = "0885f6cdfe75c96e45bbf1c4e49511f128201391ce3b56e60e29f5a1fadbc1c1"
1607
1607
  dependencies = [
1608
1608
  "lexical-parse-float",
1609
1609
  "lexical-parse-integer",
@@ -1614,9 +1614,9 @@ dependencies = [
1614
1614
 
1615
1615
  [[package]]
1616
1616
  name = "lexical-parse-float"
1617
- version = "0.8.5"
1617
+ version = "1.0.1"
1618
1618
  source = "registry+https://github.com/rust-lang/crates.io-index"
1619
- checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
1619
+ checksum = "924f7ec090cd4f60bd873f160b0fb69a0c80bb3a98f2e778a1893ae0e5c4b0b9"
1620
1620
  dependencies = [
1621
1621
  "lexical-parse-integer",
1622
1622
  "lexical-util",
@@ -1625,9 +1625,9 @@ dependencies = [
1625
1625
 
1626
1626
  [[package]]
1627
1627
  name = "lexical-parse-integer"
1628
- version = "0.8.6"
1628
+ version = "1.0.1"
1629
1629
  source = "registry+https://github.com/rust-lang/crates.io-index"
1630
- checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
1630
+ checksum = "8feab1da84a2ab0ddbbad2fb1830b755f71a9a8d996c7a1f2a553faf72aa3686"
1631
1631
  dependencies = [
1632
1632
  "lexical-util",
1633
1633
  "static_assertions",
@@ -1635,18 +1635,18 @@ dependencies = [
1635
1635
 
1636
1636
  [[package]]
1637
1637
  name = "lexical-util"
1638
- version = "0.8.5"
1638
+ version = "1.0.2"
1639
1639
  source = "registry+https://github.com/rust-lang/crates.io-index"
1640
- checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
1640
+ checksum = "591ce1a12ecd3b26d4121ab360a6a4483a67f05a5372add6acbfd0b65c9285d9"
1641
1641
  dependencies = [
1642
1642
  "static_assertions",
1643
1643
  ]
1644
1644
 
1645
1645
  [[package]]
1646
1646
  name = "lexical-write-float"
1647
- version = "0.8.5"
1647
+ version = "1.0.1"
1648
1648
  source = "registry+https://github.com/rust-lang/crates.io-index"
1649
- checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
1649
+ checksum = "05b0f3f9ddada5942b54e97654d535df37c9340ad66c24b50360a90619779f41"
1650
1650
  dependencies = [
1651
1651
  "lexical-util",
1652
1652
  "lexical-write-integer",
@@ -1655,9 +1655,9 @@ dependencies = [
1655
1655
 
1656
1656
  [[package]]
1657
1657
  name = "lexical-write-integer"
1658
- version = "0.8.5"
1658
+ version = "1.0.1"
1659
1659
  source = "registry+https://github.com/rust-lang/crates.io-index"
1660
- checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
1660
+ checksum = "48c6d47254ddb292771dce7697ae2be9619f8e369d01a9ccda15ef2ff50443fc"
1661
1661
  dependencies = [
1662
1662
  "lexical-util",
1663
1663
  "static_assertions",
@@ -2551,7 +2551,7 @@ dependencies = [
2551
2551
  "num-complex",
2552
2552
  "parking_lot",
2553
2553
  "portable-atomic",
2554
- "pyo3-build-config",
2554
+ "pyo3-build-config 0.20.3",
2555
2555
  "pyo3-ffi",
2556
2556
  "pyo3-macros",
2557
2557
  "unindent",
@@ -2580,6 +2580,16 @@ dependencies = [
2580
2580
  "target-lexicon",
2581
2581
  ]
2582
2582
 
2583
+ [[package]]
2584
+ name = "pyo3-build-config"
2585
+ version = "0.22.1"
2586
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2587
+ checksum = "7879eb018ac754bba32cb0eec7526391c02c14a093121857ed09fbf1d1057d41"
2588
+ dependencies = [
2589
+ "once_cell",
2590
+ "target-lexicon",
2591
+ ]
2592
+
2583
2593
  [[package]]
2584
2594
  name = "pyo3-ffi"
2585
2595
  version = "0.20.3"
@@ -2587,7 +2597,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
2587
2597
  checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
2588
2598
  dependencies = [
2589
2599
  "libc",
2590
- "pyo3-build-config",
2600
+ "pyo3-build-config 0.20.3",
2591
2601
  ]
2592
2602
 
2593
2603
  [[package]]
@@ -2621,7 +2631,7 @@ checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
2621
2631
  dependencies = [
2622
2632
  "heck 0.4.1",
2623
2633
  "proc-macro2",
2624
- "pyo3-build-config",
2634
+ "pyo3-build-config 0.20.3",
2625
2635
  "quote",
2626
2636
  "syn 2.0.66",
2627
2637
  ]
@@ -2674,7 +2684,7 @@ dependencies = [
2674
2684
 
2675
2685
  [[package]]
2676
2686
  name = "qcs"
2677
- version = "0.23.2"
2687
+ version = "0.24.1"
2678
2688
  dependencies = [
2679
2689
  "assert2",
2680
2690
  "async-trait",
@@ -2736,19 +2746,25 @@ dependencies = [
2736
2746
 
2737
2747
  [[package]]
2738
2748
  name = "qcs-api-client-common"
2739
- version = "0.8.4"
2749
+ version = "0.10.1"
2740
2750
  source = "registry+https://github.com/rust-lang/crates.io-index"
2741
- checksum = "040552f233992abe94376304cf17dab2d79ff62d4a9ee986d75efe3d19337f57"
2751
+ checksum = "1cf1692d12ab36478f43f1ef493a8b2445f7f5d17164f739d8b0fd57ad59e6e6"
2742
2752
  dependencies = [
2743
2753
  "async-trait",
2744
2754
  "backoff",
2755
+ "base64 0.22.1",
2745
2756
  "derive_builder 0.20.0",
2746
2757
  "figment",
2747
2758
  "futures",
2748
2759
  "home",
2749
2760
  "http",
2750
2761
  "jsonwebtoken",
2762
+ "paste",
2763
+ "pyo3",
2764
+ "pyo3-asyncio",
2765
+ "pyo3-build-config 0.22.1",
2751
2766
  "reqwest",
2767
+ "rigetti-pyo3 0.3.6",
2752
2768
  "serde",
2753
2769
  "shellexpand",
2754
2770
  "thiserror",
@@ -2762,9 +2778,9 @@ dependencies = [
2762
2778
 
2763
2779
  [[package]]
2764
2780
  name = "qcs-api-client-grpc"
2765
- version = "0.8.4"
2781
+ version = "0.10.1"
2766
2782
  source = "registry+https://github.com/rust-lang/crates.io-index"
2767
- checksum = "eb755cd59b1b3ce99abe52ff6898ad74ca26463e94300c103cafaac4f345c4f3"
2783
+ checksum = "b6224aeaaafb92d44439a398a03b042889edacbe23a115cfb1ff1e17c80c8bf2"
2768
2784
  dependencies = [
2769
2785
  "backoff",
2770
2786
  "http",
@@ -2795,9 +2811,9 @@ dependencies = [
2795
2811
 
2796
2812
  [[package]]
2797
2813
  name = "qcs-api-client-openapi"
2798
- version = "0.9.4"
2814
+ version = "0.11.1"
2799
2815
  source = "registry+https://github.com/rust-lang/crates.io-index"
2800
- checksum = "008d06c4051dd4b3e7d5b6c1f31457c68384f8f36b05b304de6059bbd81c6128"
2816
+ checksum = "c5107bbd313d31d1eede8dec2bc9c69e0aa50ffc6207457bb4d8c3ab3cb32434"
2801
2817
  dependencies = [
2802
2818
  "anyhow",
2803
2819
  "qcs-api-client-common",
@@ -2815,7 +2831,7 @@ dependencies = [
2815
2831
 
2816
2832
  [[package]]
2817
2833
  name = "qcs-sdk-python"
2818
- version = "0.19.3"
2834
+ version = "0.20.1"
2819
2835
  dependencies = [
2820
2836
  "async-trait",
2821
2837
  "numpy",
@@ -2823,9 +2839,10 @@ dependencies = [
2823
2839
  "opentelemetry 0.23.0",
2824
2840
  "opentelemetry_sdk 0.23.0",
2825
2841
  "paste",
2842
+ "prost",
2826
2843
  "pyo3",
2827
2844
  "pyo3-asyncio",
2828
- "pyo3-build-config",
2845
+ "pyo3-build-config 0.20.3",
2829
2846
  "pyo3-log",
2830
2847
  "pyo3-opentelemetry",
2831
2848
  "pyo3-tracing-subscriber",
@@ -2835,7 +2852,7 @@ dependencies = [
2835
2852
  "qcs-api-client-grpc",
2836
2853
  "qcs-api-client-openapi",
2837
2854
  "quil-rs",
2838
- "rigetti-pyo3",
2855
+ "rigetti-pyo3 0.4.1",
2839
2856
  "serde_json",
2840
2857
  "thiserror",
2841
2858
  "tokio",
@@ -2850,8 +2867,8 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
2850
2867
 
2851
2868
  [[package]]
2852
2869
  name = "quil-rs"
2853
- version = "0.27.1"
2854
- source = "git+https://github.com/rigetti/quil-rs?tag=quil-py/v0.11.1#ab5b976573b38f3ba2605f57482ccadb1f13bf30"
2870
+ version = "0.28.1"
2871
+ source = "git+https://github.com/rigetti/quil-rs?tag=quil-py/v0.12.1#a0f2776893d3ce33eb9f29449f3b4b0e9ed24174"
2855
2872
  dependencies = [
2856
2873
  "approx",
2857
2874
  "indexmap 2.2.6",
@@ -3099,6 +3116,19 @@ dependencies = [
3099
3116
  "time",
3100
3117
  ]
3101
3118
 
3119
+ [[package]]
3120
+ name = "rigetti-pyo3"
3121
+ version = "0.4.1"
3122
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3123
+ checksum = "f924032d36104a859f936762576a9e6fc0811b37a1f4a8144c0b9b25ee89607b"
3124
+ dependencies = [
3125
+ "num-complex",
3126
+ "num-traits",
3127
+ "paste",
3128
+ "pyo3",
3129
+ "time",
3130
+ ]
3131
+
3102
3132
  [[package]]
3103
3133
  name = "ring"
3104
3134
  version = "0.16.20"
@@ -4,19 +4,19 @@ resolver = "2"
4
4
 
5
5
  [workspace.dependencies]
6
6
  qcs-api = "0.2.1"
7
- qcs-api-client-common = "0.8.4"
8
- qcs-api-client-grpc = "0.8.4"
9
- qcs-api-client-openapi = "0.9.4"
7
+ qcs-api-client-common = "0.10.1"
8
+ qcs-api-client-grpc = "0.10.1"
9
+ qcs-api-client-openapi = "0.11.1"
10
10
  serde_json = "1.0.86"
11
11
  thiserror = "1.0.57"
12
12
  tokio = "1.36.0"
13
13
  # We specify quil-rs as a git and versioned dependency so that we can keep the version of
14
14
  # quil-rs used in both the Rust and Python packages in sync. The tag used should always
15
- # be a `quil-py` tag and should be comaptible with the version specified in
15
+ # be a `quil-py` tag and should be compatible with the version specified in
16
16
  # `crates/python/pyproject.toml`.
17
17
  # The version must also be specified in order to publish to crates.io. Cargo enforces
18
18
  # that the specified version is the same as the version in the git repository.
19
- quil-rs = { version = "0.27.1", git = "https://github.com/rigetti/quil-rs", tag = "quil-py/v0.11.1" }
19
+ quil-rs = { version = "0.28.1", git = "https://github.com/rigetti/quil-rs", tag = "quil-py/v0.12.1" }
20
20
 
21
21
  # ndarray is used by the `qcs` crate, but it is also used in the `python` crate via a
22
22
  # re-export through the numpy crate. They should be updated as a pair to keep both
@@ -32,7 +32,7 @@ pyo3-opentelemetry = { version = "=0.3.2-dev.1" }
32
32
  pyo3-tracing-subscriber = { version = "=0.1.2-dev.1", default-features = true }
33
33
 
34
34
  pyo3-build-config = "0.20.0"
35
- rigetti-pyo3 = { version = "0.3.1", default-features = false, features = ["time", "complex"] }
35
+ rigetti-pyo3 = { version = "0.4.1", default-features = false, features = ["complex", "time"] }
36
36
 
37
37
  # The primary intent of these options is to reduce the binary size for Python wheels
38
38
  # since PyPi has limits on how much storage a project can use.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: qcs-sdk-python
3
- Version: 0.19.3
3
+ Version: 0.20.1
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: License :: OSI Approved :: Apache Software License
6
6
  Classifier: Programming Language :: Python :: 3.8
@@ -9,6 +9,23 @@ Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Operating System :: OS Independent
11
11
  Requires-Dist: quil >=0.11.2
12
+ Requires-Dist: qcs-api-client-common >=0.10.0
13
+ Requires-Dist: pyquil ==4.14.2 ; extra == 'pyquil'
14
+ Requires-Dist: black >=24.8.0 ; extra == 'dev'
15
+ Requires-Dist: opentelemetry-sdk ==1.25.0 ; extra == 'dev'
16
+ Requires-Dist: pytest >=8.1.1 ; extra == 'dev'
17
+ Requires-Dist: pytest-asyncio >=0.23.6 ; extra == 'dev'
18
+ Requires-Dist: pytest-mock >=3.14.0 ; extra == 'dev'
19
+ Requires-Dist: pytest-sugar >=1.0.0 ; extra == 'dev'
20
+ Requires-Dist: pytest-clarity >=1.0.1 ; extra == 'dev'
21
+ Requires-Dist: syrupy >=4.0.0 ; extra == 'dev'
22
+ Requires-Dist: maturin ==1.5.1 ; extra == 'dev'
23
+ Requires-Dist: numpy >=1.24.1 ; extra == 'dev'
24
+ Requires-Dist: pdoc >=14.6.1 ; extra == 'dev'
25
+ Requires-Dist: ruff >=0.3.5 ; extra == 'dev'
26
+ Requires-Dist: mypy >=1.4.1 ; extra == 'dev'
27
+ Provides-Extra: pyquil
28
+ Provides-Extra: dev
12
29
  Summary: Python interface for the QCS Rust SDK
13
30
  Keywords: pyquil,SDK,Rigetti,Quil,Quantum
14
31
  Author-email: Rigetti Computing <softapps@rigetti.com>, Mark Skilbeck <mark.skilbeck@rigetti.com>, Marquess Valdez <mvaldez@rigetti.com>, Randall Fulton <rfulton@rigetti.com>
@@ -1,3 +1,41 @@
1
+ ## 0.24.1
2
+
3
+ ### Fixes
4
+
5
+ - Bump qcs-api-client-rust versions (#500)
6
+
7
+ ## 0.24.1-rc.0
8
+
9
+ ### Fixes
10
+
11
+ - Bump qcs-api-client-rust versions (#500)
12
+
13
+ ## 0.24.0
14
+
15
+ ### Breaking Changes
16
+
17
+ - Make Python bindings public (#463)
18
+
19
+ ### Fixes
20
+
21
+ - ExecutionOptions::default() now respects defaults used in ExecutionOptionsBuilder::default() (#499)
22
+
23
+ ## 0.24.0-rc.0
24
+
25
+ ### Breaking Changes
26
+
27
+ - Make Python bindings public (#463)
28
+
29
+ ### Fixes
30
+
31
+ - ExecutionOptions::default() now respects defaults used in ExecutionOptionsBuilder::default() (#499)
32
+
33
+ ## 0.23.3-rc.0
34
+
35
+ ### Fixes
36
+
37
+ - ExecutionOptions::default() now respects defaults used in ExecutionOptionsBuilder::default() (#499)
38
+
1
39
  ## 0.23.2
2
40
 
3
41
  ### Fixes
@@ -1,13 +1,13 @@
1
1
  [package]
2
2
  name = "qcs"
3
3
  description = "High level interface for running Quil on a QPU"
4
- version = "0.23.2"
4
+ version = "0.24.1"
5
5
  edition = "2018"
6
6
  license = "Apache-2.0"
7
7
  repository = "https://github.com/rigetti/qcs-sdk-rust"
8
8
  keywords = ["pyquil", "SDK", "Rigetti", "Quil", "Quantum"]
9
9
  categories = ["api-bindings", "compilers", "science", "emulators"]
10
- readme = "./README.md"
10
+ readme = "README.md"
11
11
 
12
12
  [features]
13
13
  manual-tests = []
@@ -357,7 +357,7 @@ mod tests {
357
357
  serde_json::from_reader(File::open("tests/qvm_isa.json").unwrap()).unwrap()
358
358
  }
359
359
 
360
- async fn rpcq_client() -> rpcq::Client {
360
+ fn rpcq_client() -> rpcq::Client {
361
361
  let qcs = Qcs::load();
362
362
  let endpoint = qcs.get_config().quilc_url();
363
363
  rpcq::Client::new(endpoint).unwrap()
@@ -366,7 +366,6 @@ mod tests {
366
366
  #[tokio::test]
367
367
  async fn compare_native_quil_to_expected_output() {
368
368
  let output = rpcq_client()
369
- .await
370
369
  .compile_program(
371
370
  "MEASURE 0",
372
371
  TargetDevice::try_from(qvm_isa()).expect("Couldn't build target device from ISA"),
@@ -390,7 +389,6 @@ MEASURE 1 ro[1]
390
389
  let client = Qcs::load();
391
390
  let client = qvm::http::HttpClient::from(&client);
392
391
  let output = rpcq_client()
393
- .await
394
392
  .compile_program(
395
393
  BELL_STATE,
396
394
  TargetDevice::try_from(aspen_9_isa())
@@ -426,7 +424,6 @@ MEASURE 1 ro[1]
426
424
  #[tokio::test]
427
425
  async fn test_compile_declare_only() {
428
426
  let output = rpcq_client()
429
- .await
430
427
  .compile_program(
431
428
  "DECLARE ro BIT[1]\n",
432
429
  TargetDevice::try_from(aspen_9_isa())
@@ -440,7 +437,7 @@ MEASURE 1 ro[1]
440
437
 
441
438
  #[tokio::test]
442
439
  async fn get_version_info_from_quilc() {
443
- let rpcq_client = rpcq_client().await;
440
+ let rpcq_client = rpcq_client();
444
441
  let version = rpcq_client
445
442
  .get_version_info()
446
443
  .expect("Should get version info from quilc");
@@ -450,7 +447,7 @@ MEASURE 1 ro[1]
450
447
 
451
448
  #[tokio::test]
452
449
  async fn test_conjugate_pauli_by_clifford() {
453
- let rpcq_client = rpcq_client().await;
450
+ let rpcq_client = rpcq_client();
454
451
  let request = ConjugateByCliffordRequest {
455
452
  pauli: PauliTerm {
456
453
  indices: vec![0],
@@ -473,7 +470,7 @@ MEASURE 1 ro[1]
473
470
 
474
471
  #[tokio::test]
475
472
  async fn test_generate_randomized_benchmark_sequence() {
476
- let rpcq_client = rpcq_client().await;
473
+ let rpcq_client = rpcq_client();
477
474
  let request = RandomizedBenchmarkingRequest {
478
475
  depth: 2,
479
476
  qubits: 1,
@@ -803,7 +803,7 @@ mod describe_get_config {
803
803
  use crate::client::Qcs;
804
804
  use crate::{compiler::rpcq, Executable};
805
805
 
806
- async fn quilc_client() -> rpcq::Client {
806
+ fn quilc_client() -> rpcq::Client {
807
807
  let qcs = Qcs::load();
808
808
  let endpoint = qcs.get_config().quilc_url();
809
809
  rpcq::Client::new(endpoint).unwrap()
@@ -811,7 +811,7 @@ mod describe_get_config {
811
811
 
812
812
  #[tokio::test]
813
813
  async fn it_resizes_params_dynamically() {
814
- let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client().await));
814
+ let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client()));
815
815
 
816
816
  exe.with_parameter("foo", 0, 0.0);
817
817
  let params = exe.params.get("foo").unwrap().len();
@@ -834,7 +834,7 @@ mod describe_qpu_for_id {
834
834
  use crate::qpu;
835
835
  use crate::{client::Qcs, Executable};
836
836
 
837
- async fn quilc_client() -> rpcq::Client {
837
+ fn quilc_client() -> rpcq::Client {
838
838
  let qcs = Qcs::load();
839
839
  let endpoint = qcs.get_config().quilc_url();
840
840
  rpcq::Client::new(endpoint).unwrap()
@@ -845,7 +845,7 @@ mod describe_qpu_for_id {
845
845
  // Default config has no auth, so it should try to refresh
846
846
  let mut exe = Executable::from_quil("")
847
847
  .with_qcs_client(Qcs::load())
848
- .with_quilc_client(Some(quilc_client().await));
848
+ .with_quilc_client(Some(quilc_client()));
849
849
  let result = exe.qpu_for_id("blah").await;
850
850
  let Err(err) = result else {
851
851
  panic!("Expected an error!");
@@ -856,7 +856,7 @@ mod describe_qpu_for_id {
856
856
 
857
857
  #[tokio::test]
858
858
  async fn it_loads_cached_version() {
859
- let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client().await));
859
+ let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client()));
860
860
  let shots = NonZeroU16::new(17).expect("value is non-zero");
861
861
  exe.shots = shots;
862
862
  exe.qpu = Some(
@@ -881,7 +881,7 @@ mod describe_qpu_for_id {
881
881
  async fn it_creates_new_after_shot_change() {
882
882
  let original_shots = NonZeroU16::new(23).expect("value is non-zero");
883
883
  let mut exe = Executable::from_quil("")
884
- .with_quilc_client(Some(quilc_client().await))
884
+ .with_quilc_client(Some(quilc_client()))
885
885
  .with_shots(original_shots);
886
886
  let qpu = exe.qpu_for_id("Aspen-9").await.unwrap();
887
887
 
@@ -898,7 +898,7 @@ mod describe_qpu_for_id {
898
898
 
899
899
  #[tokio::test]
900
900
  async fn it_creates_new_for_new_qpu_id() {
901
- let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client().await));
901
+ let mut exe = Executable::from_quil("").with_quilc_client(Some(quilc_client()));
902
902
  let qpu = exe.qpu_for_id("Aspen-9").await.unwrap();
903
903
 
904
904
  assert_eq!(qpu.quantum_processor_id, "Aspen-9");
@@ -3,6 +3,7 @@
3
3
 
4
4
  use std::{convert::TryFrom, fmt, time::Duration};
5
5
 
6
+ use async_trait::async_trait;
6
7
  use cached::proc_macro::cached;
7
8
  use derive_builder::Builder;
8
9
  use qcs_api_client_common::configuration::TokenError;
@@ -39,6 +40,7 @@ use crate::executable::Parameters;
39
40
 
40
41
  use crate::client::{GrpcClientError, GrpcConnection, Qcs};
41
42
 
43
+ /// The maximum size of a gRPC response, in bytes.
42
44
  const MAX_DECODING_MESSAGE_SIZE_BYTES: usize = 250 * 1024 * 1024;
43
45
 
44
46
  pub(crate) fn params_into_job_execution_configuration(
@@ -327,11 +329,11 @@ pub type QpuConnectionOptions = ExecutionOptions;
327
329
  /// Builder for setting up [`QpuConnectionOptions`].
328
330
  pub type QpuConnectionOptionsBuilder = ExecutionOptionsBuilder;
329
331
 
330
- /// Options avaialable when executing a job on a QPU.
332
+ /// Options available when executing a job on a QPU.
331
333
  ///
332
334
  /// Use [`Default`] to get a reasonable set of defaults, or start with [`ExecutionOptionsBuilder`]
333
335
  /// to build a custom set of options.
334
- #[derive(Builder, Clone, Debug, Default, PartialEq)]
336
+ #[derive(Builder, Clone, Debug, PartialEq)]
335
337
  pub struct ExecutionOptions {
336
338
  #[doc = "The [`ConnectionStrategy`] to use to establish a connection to the QPU."]
337
339
  #[builder(default)]
@@ -339,14 +341,22 @@ pub struct ExecutionOptions {
339
341
  #[doc = "The timeout to use for the request, defaults to 30 seconds. If set to `None`, then there is no timeout."]
340
342
  #[builder(default = "Some(Duration::from_secs(30))")]
341
343
  timeout: Option<Duration>,
342
- #[doc = "Options avaialable when executing a job on a QPU, particular to the execution service's API."]
344
+ #[doc = "Options available when executing a job on a QPU, particular to the execution service's API."]
343
345
  #[builder(default = "None")]
344
346
  api_options: Option<InnerApiExecutionOptions>,
345
347
  }
346
348
 
349
+ impl Default for ExecutionOptions {
350
+ fn default() -> Self {
351
+ ExecutionOptionsBuilder::default().build().expect(
352
+ "Should be able to derive a default set of the ExecutionOptions from the builder.",
353
+ )
354
+ }
355
+ }
356
+
347
357
  impl Eq for ExecutionOptions {}
348
358
 
349
- /// Options avaialable when executing a job on a QPU, particular to the execution service's API.
359
+ /// Options available when executing a job on a QPU, particular to the execution service's API.
350
360
  /// This is a conventent alias for [`InnerApiExecutionOptions`] which provides a builder.
351
361
  ///
352
362
  /// Use [`Default`] to get a reasonable set of defaults, or start with [`ApiExecutionOptionsBuilder`]
@@ -435,11 +445,21 @@ pub enum ConnectionStrategy {
435
445
  EndpointId(String),
436
446
  }
437
447
 
438
- /// Methods that help select and configure a controller service client given a set of
439
- /// [`ExecutionOptions`] and QPU ID.
440
- impl ExecutionOptions {
448
+ /// An ExecutionTarget provides methods to establish the appropriate connection to the execution
449
+ /// service.
450
+ ///
451
+ /// Implementors provide a [`ConnectionStrategy`] and timeout, the trait provides default
452
+ /// implementation for getting connections and execution targets.
453
+ #[async_trait]
454
+ pub trait ExecutionTarget<'a> {
455
+ /// The [`ConnectionStrategy`] to use to determine the connection target.
456
+ fn connection_strategy(&'a self) -> &'a ConnectionStrategy;
457
+ /// The timeout to use for requests to the target.
458
+ fn timeout(&self) -> Option<Duration>;
459
+
460
+ /// Get the [`execute_controller_job_request::Target`] for the given quantum processor ID.
441
461
  fn get_job_target(
442
- &self,
462
+ &'a self,
443
463
  quantum_processor_id: Option<&str>,
444
464
  ) -> Option<execute_controller_job_request::Target> {
445
465
  match self.connection_strategy() {
@@ -452,8 +472,9 @@ impl ExecutionOptions {
452
472
  }
453
473
  }
454
474
 
475
+ /// Get the [`get_controller_job_results_request::Target`] for the given quantum processor ID.
455
476
  fn get_results_target(
456
- &self,
477
+ &'a self,
457
478
  quantum_processor_id: Option<&str>,
458
479
  ) -> Option<get_controller_job_results_request::Target> {
459
480
  match self.connection_strategy() {
@@ -466,8 +487,9 @@ impl ExecutionOptions {
466
487
  }
467
488
  }
468
489
 
490
+ /// Get the [`cancel_controller_jobs_request::Target`] for the given quantum processor ID.
469
491
  fn get_cancel_target(
470
- &self,
492
+ &'a self,
471
493
  quantum_processor_id: Option<&str>,
472
494
  ) -> Option<cancel_controller_jobs_request::Target> {
473
495
  match self.connection_strategy() {
@@ -480,9 +502,9 @@ impl ExecutionOptions {
480
502
  }
481
503
  }
482
504
 
483
- /// Get a controller client for the given QPU ID.
484
- pub async fn get_controller_client(
485
- &self,
505
+ /// Get a controller client for the given quantum processor ID.
506
+ async fn get_controller_client(
507
+ &'a self,
486
508
  client: &Qcs,
487
509
  quantum_processor_id: Option<&str>,
488
510
  ) -> Result<ControllerClient<GrpcConnection>, QpuApiError> {
@@ -494,8 +516,8 @@ impl ExecutionOptions {
494
516
  }
495
517
 
496
518
  /// Get a GRPC connection to a QPU, without specifying the API to use.
497
- pub async fn get_qpu_grpc_connection(
498
- &self,
519
+ async fn get_qpu_grpc_connection(
520
+ &'a self,
499
521
  client: &Qcs,
500
522
  quantum_processor_id: Option<&str>,
501
523
  ) -> Result<GrpcConnection, QpuApiError> {
@@ -525,6 +547,7 @@ impl ExecutionOptions {
525
547
  self.grpc_address_to_channel(&address, client)
526
548
  }
527
549
 
550
+ /// Get a channel from the given gRPC address.
528
551
  fn grpc_address_to_channel(
529
552
  &self,
530
553
  address: &str,
@@ -540,6 +563,7 @@ impl ExecutionOptions {
540
563
  Ok(channel)
541
564
  }
542
565
 
566
+ /// Get the gateway address for the given quantum processor ID.
543
567
  async fn get_gateway_address(
544
568
  &self,
545
569
  quantum_processor_id: &str,
@@ -548,6 +572,7 @@ impl ExecutionOptions {
548
572
  get_accessor_with_cache(quantum_processor_id, client).await
549
573
  }
550
574
 
575
+ /// Get the default endpoint address for the given quantum processor ID.
551
576
  async fn get_default_endpoint_address(
552
577
  &self,
553
578
  quantum_processor_id: &str,
@@ -557,6 +582,19 @@ impl ExecutionOptions {
557
582
  }
558
583
  }
559
584
 
585
+ /// Methods that help select and configure a controller service client given a set of
586
+ /// [`ExecutionOptions`] and QPU ID.
587
+ #[async_trait]
588
+ impl<'a> ExecutionTarget<'a> for ExecutionOptions {
589
+ fn connection_strategy(&'a self) -> &'a ConnectionStrategy {
590
+ self.connection_strategy()
591
+ }
592
+
593
+ fn timeout(&self) -> Option<Duration> {
594
+ self.timeout()
595
+ }
596
+ }
597
+
560
598
  #[cached(
561
599
  result = true,
562
600
  time = 60,
@@ -690,7 +728,10 @@ pub enum QpuApiError {
690
728
  /// The message associated with the failed job.
691
729
  message: String,
692
730
  },
693
-
731
+ /// Error that can occur when the gRPC status code cannot be decoded.
732
+ #[error("The status code could not be decoded: {0}")]
733
+ StatusCodeDecode(String),
734
+ // just for the error type?
694
735
  /// Error that can occur if a numeric status identifier cannot be converted
695
736
  /// into a known status type.
696
737
  #[error("The request returned an invalid status: {status}. {message}")]
@@ -702,3 +743,18 @@ pub enum QpuApiError {
702
743
  message: String,
703
744
  },
704
745
  }
746
+
747
+ #[cfg(test)]
748
+ mod test {
749
+ use crate::qpu::api::ExecutionOptions;
750
+
751
+ use super::ExecutionOptionsBuilder;
752
+
753
+ #[test]
754
+ fn test_default_execution_options() {
755
+ assert_eq!(
756
+ ExecutionOptions::default(),
757
+ ExecutionOptionsBuilder::default().build().unwrap(),
758
+ );
759
+ }
760
+ }