iqm-pulla 9.7.0__tar.gz → 9.8.0__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 (75) hide show
  1. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/CHANGELOG.rst +8 -0
  2. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/PKG-INFO +2 -2
  3. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/qiskit.txt +2 -2
  4. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/pulla.py +44 -44
  5. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm_pulla.egg-info/PKG-INFO +2 -2
  6. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/tests/conftest.py +4 -0
  7. iqm_pulla-9.8.0/version.txt +1 -0
  8. iqm_pulla-9.7.0/version.txt +0 -1
  9. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/AUTHORS.rst +0 -0
  10. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/LICENSE.txt +0 -0
  11. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/MANIFEST.in +0 -0
  12. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/README.rst +0 -0
  13. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/API.rst +0 -0
  14. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Compilation Stages.ipynb +0 -0
  15. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Configuration and Usage.ipynb +0 -0
  16. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Custom Gates and Implementations.ipynb +0 -0
  17. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Example - Compilation With Local Calibration Set.ipynb +0 -0
  18. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Example - Executing QIR programs.ipynb +0 -0
  19. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Example - Measuring T1.ipynb +0 -0
  20. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Example - Randomized Benchmarking.ipynb +0 -0
  21. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Example - Simple Dynamical Decoupling.ipynb +0 -0
  22. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/Quick Start.ipynb +0 -0
  23. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/_static/images/favicon.ico +0 -0
  24. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/_static/images/logo.png +0 -0
  25. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/_templates/autosummary-class-template.rst +0 -0
  26. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/_templates/autosummary-module-template.rst +0 -0
  27. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/authors.rst +0 -0
  28. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/changelog.rst +0 -0
  29. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/common_errors.rst +0 -0
  30. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/conf.py +0 -0
  31. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/examples.rst +0 -0
  32. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/index.rst +0 -0
  33. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/license.rst +0 -0
  34. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/migration_guide.rst +0 -0
  35. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/readme.rst +0 -0
  36. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/references.bib +0 -0
  37. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/references.rst +0 -0
  38. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/docs/user_guides.rst +0 -0
  39. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/pyproject.toml +0 -0
  40. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/base.in +0 -0
  41. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/base.in.internal +0 -0
  42. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/base.txt +0 -0
  43. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/notebook.in +0 -0
  44. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/notebook.txt +0 -0
  45. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/qir.in +0 -0
  46. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/qir.txt +0 -0
  47. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/requirements/qiskit.in.internal +0 -0
  48. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/setup.cfg +0 -0
  49. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/setup.py +0 -0
  50. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/__init__.py +0 -0
  51. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/__init__.py +0 -0
  52. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/compiler.py +0 -0
  53. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/dd.py +0 -0
  54. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/errors.py +0 -0
  55. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/standard_stages.py +0 -0
  56. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/compiler/station_settings.py +0 -0
  57. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/interface/__init__.py +0 -0
  58. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/interface/compiler.py +0 -0
  59. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/cpc/py.typed +0 -0
  60. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/__init__.py +0 -0
  61. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/calibration.py +0 -0
  62. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/interface.py +0 -0
  63. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/py.typed +0 -0
  64. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/quantum_architecture.py +0 -0
  65. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/utils.py +0 -0
  66. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/utils_cirq.py +0 -0
  67. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/utils_dd.py +0 -0
  68. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/utils_qir.py +0 -0
  69. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm/pulla/utils_qiskit.py +0 -0
  70. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm_pulla.egg-info/SOURCES.txt +0 -0
  71. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm_pulla.egg-info/dependency_links.txt +0 -0
  72. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm_pulla.egg-info/requires.txt +1 -1
  73. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/src/iqm_pulla.egg-info/top_level.txt +0 -0
  74. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/tests/.pylintrc +0 -0
  75. {iqm_pulla-9.7.0 → iqm_pulla-9.8.0}/tests/__init__.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 9.8.0 (2025-08-21)
6
+ ==========================
7
+
8
+ Bug fixes
9
+ ---------
10
+
11
+ - FIx Pulla.execute crashing when there are jobs in the queue
12
+
5
13
  Version 9.7.0 (2025-08-20)
6
14
  ==========================
7
15
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulla
3
- Version: 9.7.0
3
+ Version: 9.8.0
4
4
  Summary: Client library for pulse-level access to an IQM quantum computer
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>
6
6
  License: Apache License
@@ -239,8 +239,8 @@ Provides-Extra: qiskit
239
239
  Requires-Dist: iqm-exa-common<27,>=26; extra == "qiskit"
240
240
  Requires-Dist: iqm-station-control-client<10,>=9; extra == "qiskit"
241
241
  Requires-Dist: iqm-pulse<11,>=10; extra == "qiskit"
242
- Requires-Dist: iqm-client<31,>=30; extra == "qiskit"
243
242
  Requires-Dist: iqm-client[qiskit]<31,>=30; extra == "qiskit"
243
+ Requires-Dist: iqm-client<31,>=30; extra == "qiskit"
244
244
 
245
245
  IQM Pulla
246
246
  #########
@@ -1,5 +1,5 @@
1
1
  iqm-exa-common>=26,<27
2
2
  iqm-station-control-client>=9,<10
3
3
  iqm-pulse>=10,<11
4
- iqm-client>=30,<31
5
- iqm-client[qiskit]>=30,<31
4
+ iqm-client[qiskit]>=30,<31
5
+ iqm-client>=30,<31
@@ -248,57 +248,57 @@ class Pulla:
248
248
  logger.info("Waiting for the job to finish...")
249
249
 
250
250
  while True:
251
- sweep_data = self._station_control.get_sweep(job_id)
251
+ job_data = self._station_control.get_job(job_id)
252
252
  sc_result = StationControlResult(sweep_id=job_id, task_id=job_id, status=TaskStatus.PENDING)
253
253
 
254
- if sweep_data.job_status <= JobExecutorStatus.EXECUTION_STARTED: # type: ignore[operator]
254
+ if job_data.job_status <= JobExecutorStatus.EXECUTION_STARTED: # type: ignore[operator]
255
255
  # Wait in the task queue while showing a progress bar
256
256
 
257
257
  interrupted = self._station_control._wait_job_completion(str(job_id), get_progress_bar_callback()) # type: ignore[attr-defined]
258
258
  if interrupted:
259
259
  raise KeyboardInterrupt
260
-
261
- elif sweep_data.job_status == JobExecutorStatus.READY:
262
- logger.info("Sweep status: %s", str(sweep_data.job_status))
263
-
264
- sc_result.status = TaskStatus.READY
265
- sc_result.result = map_sweep_results_to_logical_qubits(
266
- self._station_control.get_sweep_results(job_id),
267
- context["readout_mappings"],
268
- context["options"].heralding_mode,
269
- )
270
- sc_result.start_time = (
271
- sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
272
- )
273
- sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
274
-
275
- if verbose:
276
- # TODO: Consider using just 'logger.debug' here and remove 'verbose'
277
- logger.info(sc_result.result)
278
-
279
- return sc_result
280
-
281
- elif sweep_data.job_status == JobExecutorStatus.FAILED:
282
- sc_result.status = TaskStatus.FAILED
283
- sc_result.start_time = (
284
- sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
285
- )
286
- sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
287
- job = self._station_control.get_job(job_id)
288
- sc_result.message = job["job_error"] # type: ignore[index]
289
- logger.error("Submission failed! Error: %s", sc_result.message)
290
- return sc_result
291
-
292
- elif sweep_data.job_status == JobExecutorStatus.ABORTED:
293
- sc_result.status = TaskStatus.FAILED
294
- sc_result.start_time = (
295
- sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
296
- )
297
- sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
298
- job = self._station_control.get_job(job_id)
299
- sc_result.message = job["job_error"] # type: ignore[index]
300
- logger.error("Submission was revoked!")
301
- return sc_result
260
+ else:
261
+ # job is not in queue or executing, so we can query the sweep
262
+ sweep_data = self._station_control.get_sweep(job_id)
263
+ if job_data.job_status == JobExecutorStatus.READY:
264
+ logger.info("Sweep status: %s", str(sweep_data.job_status))
265
+
266
+ sc_result.status = TaskStatus.READY
267
+ sc_result.result = map_sweep_results_to_logical_qubits(
268
+ self._station_control.get_sweep_results(job_id),
269
+ context["readout_mappings"],
270
+ context["options"].heralding_mode,
271
+ )
272
+ sc_result.start_time = (
273
+ sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
274
+ )
275
+ sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
276
+
277
+ if verbose:
278
+ # TODO: Consider using just 'logger.debug' here and remove 'verbose'
279
+ logger.info(sc_result.result)
280
+
281
+ return sc_result
282
+
283
+ if job_data.job_status == JobExecutorStatus.FAILED:
284
+ sc_result.status = TaskStatus.FAILED
285
+ sc_result.start_time = (
286
+ sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
287
+ )
288
+ sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
289
+ sc_result.message = str(job_data.job_error)
290
+ logger.error("Submission failed! Error: %s", sc_result.message)
291
+ return sc_result
292
+
293
+ if job_data.job_status == JobExecutorStatus.ABORTED:
294
+ sc_result.status = TaskStatus.FAILED
295
+ sc_result.start_time = (
296
+ sweep_data.begin_timestamp.isoformat() if sweep_data.begin_timestamp else None
297
+ )
298
+ sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
299
+ sc_result.message = str(job_data.job_error)
300
+ logger.error("Submission was revoked!")
301
+ return sc_result
302
302
 
303
303
  time.sleep(1)
304
304
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulla
3
- Version: 9.7.0
3
+ Version: 9.8.0
4
4
  Summary: Client library for pulse-level access to an IQM quantum computer
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>
6
6
  License: Apache License
@@ -239,8 +239,8 @@ Provides-Extra: qiskit
239
239
  Requires-Dist: iqm-exa-common<27,>=26; extra == "qiskit"
240
240
  Requires-Dist: iqm-station-control-client<10,>=9; extra == "qiskit"
241
241
  Requires-Dist: iqm-pulse<11,>=10; extra == "qiskit"
242
- Requires-Dist: iqm-client<31,>=30; extra == "qiskit"
243
242
  Requires-Dist: iqm-client[qiskit]<31,>=30; extra == "qiskit"
243
+ Requires-Dist: iqm-client<31,>=30; extra == "qiskit"
244
244
 
245
245
  IQM Pulla
246
246
  #########
@@ -105,6 +105,10 @@ def pulla_on_spark(request, monkeypatch):
105
105
  response = Response()
106
106
  response.status_code = HTTPStatus.INTERNAL_SERVER_ERROR
107
107
  return response
108
+ if args[0].startswith(f"{root_url}/station/jobs/"):
109
+ response = Response()
110
+ response.status_code = HTTPStatus.INTERNAL_SERVER_ERROR
111
+ return response
108
112
 
109
113
  return HTTPResponse(404)
110
114
 
@@ -0,0 +1 @@
1
+ 9.8.0
@@ -1 +0,0 @@
1
- 9.7.0
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -24,5 +24,5 @@ iqm-qiskit-qir==0.8.0
24
24
  iqm-exa-common<27,>=26
25
25
  iqm-station-control-client<10,>=9
26
26
  iqm-pulse<11,>=10
27
- iqm-client<31,>=30
28
27
  iqm-client[qiskit]<31,>=30
28
+ iqm-client<31,>=30
File without changes
File without changes