iqm-pulse 9.13.0__tar.gz → 9.15.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 (81) hide show
  1. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/CHANGELOG.rst +16 -0
  2. {iqm_pulse-9.13.0/src/iqm_pulse.egg-info → iqm_pulse-9.15.0}/PKG-INFO +2 -2
  3. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/requirements/base.in +1 -1
  4. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/requirements/base.txt +1 -1
  5. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/base.py +25 -1
  6. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/templates/playlist_inspection.jinja2 +1 -1
  7. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0/src/iqm_pulse.egg-info}/PKG-INFO +2 -2
  8. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm_pulse.egg-info/requires.txt +1 -1
  9. iqm_pulse-9.15.0/version.txt +1 -0
  10. iqm_pulse-9.13.0/version.txt +0 -1
  11. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/LICENSE.txt +0 -0
  12. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/MANIFEST.in +0 -0
  13. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/README.rst +0 -0
  14. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/API.rst +0 -0
  15. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/Makefile +0 -0
  16. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/.gitignore +0 -0
  17. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/css/custom.css +0 -0
  18. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/favicon.ico +0 -0
  19. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/feedback_timing.svg +0 -0
  20. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/logo.png +0 -0
  21. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/playlist_breakdown.svg +0 -0
  22. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/pulse_timing.svg +0 -0
  23. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_static/images/readout_timing.svg +0 -0
  24. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_templates/autosummary-class-template.rst +0 -0
  25. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/_templates/autosummary-module-template.rst +0 -0
  26. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/changelog.rst +0 -0
  27. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/concepts.rst +0 -0
  28. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/conf.py +0 -0
  29. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/custom_gates.rst +0 -0
  30. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/index.rst +0 -0
  31. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/license.rst +0 -0
  32. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/pulse_timing.rst +0 -0
  33. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/references.bib +0 -0
  34. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/references.rst +0 -0
  35. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/docs/using_builder.rst +0 -0
  36. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/pyproject.toml +0 -0
  37. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/setup.cfg +0 -0
  38. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/setup.py +0 -0
  39. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/__init__.py +0 -0
  40. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/base_utils.py +0 -0
  41. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/builder.py +0 -0
  42. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/circuit_operations.py +0 -0
  43. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gate_implementation.py +0 -0
  44. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/__init__.py +0 -0
  45. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/barrier.py +0 -0
  46. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/conditional.py +0 -0
  47. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/cz.py +0 -0
  48. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/default_gates.py +0 -0
  49. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/delay.py +0 -0
  50. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/enums.py +0 -0
  51. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/flux_multiplexer.py +0 -0
  52. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/measure.py +0 -0
  53. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/move.py +0 -0
  54. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/prx.py +0 -0
  55. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/reset.py +0 -0
  56. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/rz.py +0 -0
  57. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/sx.py +0 -0
  58. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/gates/u.py +0 -0
  59. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/__init__.py +0 -0
  60. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/channel.py +0 -0
  61. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/fast_drag.py +0 -0
  62. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/hd_drag.py +0 -0
  63. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/instructions.py +0 -0
  64. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/playlist.py +0 -0
  65. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/schedule.py +0 -0
  66. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/__init__.py +0 -0
  67. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/templates/static/logo.png +0 -0
  68. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/templates/static/moment.min.js +0 -0
  69. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.css +0 -0
  70. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.js +0 -0
  71. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/playlist/waveforms.py +0 -0
  72. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/quantum_ops.py +0 -0
  73. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/scheduler.py +0 -0
  74. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/timebox.py +0 -0
  75. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/utils.py +0 -0
  76. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm/pulse/validation.py +0 -0
  77. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm_pulse.egg-info/SOURCES.txt +0 -0
  78. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm_pulse.egg-info/dependency_links.txt +0 -0
  79. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/src/iqm_pulse.egg-info/top_level.txt +0 -0
  80. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/tests/.pylintrc +0 -0
  81. {iqm_pulse-9.13.0 → iqm_pulse-9.15.0}/tests/__init__.py +0 -0
@@ -2,6 +2,22 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 9.15.0 (2025-06-17)
6
+ ===========================
7
+
8
+ Bug fixes
9
+ ---------
10
+
11
+ - Convert ``numpy`` types to Python's built-in types so that playlist inspector HTML is rendered correctly. :mr:`1086`
12
+
13
+ Version 9.14.0 (2025-06-13)
14
+ ===========================
15
+
16
+ Features
17
+ --------
18
+
19
+ - Bump iqm-data-definitions
20
+
5
21
  Version 9.13.0 (2025-06-11)
6
22
  ===========================
7
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulse
3
- Version: 9.13.0
3
+ Version: 9.15.0
4
4
  Summary: A Python-based project for providing interface and implementations for control pulses.
5
5
  Author-email: IQM Finland Oy <info@meetiqm.com>
6
6
  License: Apache License
@@ -214,7 +214,7 @@ Requires-Python: >=3.11
214
214
  Description-Content-Type: text/x-rst
215
215
  License-File: LICENSE.txt
216
216
  Requires-Dist: iqm-exa-common<27,>=26
217
- Requires-Dist: iqm-data-definitions<3.0,>=2.6
217
+ Requires-Dist: iqm-data-definitions<3.0,>=2.13
218
218
  Requires-Dist: python-rapidjson==1.20
219
219
  Requires-Dist: jinja2==3.0.3
220
220
  Requires-Dist: numpy<3.0,>=1.26.4
@@ -1,4 +1,4 @@
1
- iqm-data-definitions >= 2.6, < 3.0
1
+ iqm-data-definitions >= 2.13, < 3.0
2
2
  python-rapidjson == 1.20
3
3
  jinja2 == 3.0.3
4
4
  numpy >= 1.26.4,<3.0
@@ -1,5 +1,5 @@
1
1
  iqm-exa-common>=26,<27
2
- iqm-data-definitions >= 2.6, < 3.0
2
+ iqm-data-definitions >= 2.13, < 3.0
3
3
  python-rapidjson == 1.20
4
4
  jinja2 == 3.0.3
5
5
  numpy >= 1.26.4,<3.0
@@ -22,6 +22,7 @@ import html
22
22
  import io
23
23
  import json
24
24
  from pathlib import Path
25
+ from typing import Any
25
26
 
26
27
  from iqm.models.playlist.waveforms import Waveform
27
28
  from jinja2 import Environment, FileSystemLoader
@@ -30,6 +31,29 @@ import numpy as np
30
31
  from iqm.pulse.playlist.playlist import Playlist
31
32
 
32
33
 
34
+ def _numpy_to_builtin_types(data: list[tuple[str, Any]]):
35
+ """Convert selected ``numpy`` types to Python's built-in types.
36
+
37
+ This helper function is to be used for converting dataclasses into
38
+ dictionaries with ``asdict``.
39
+
40
+ For example, ``Playlist`` dataclasses can get converted to dictionaries to
41
+ be rendered as HTML/JavaScript in "playlist inspector". If such classes
42
+ were to contain ``numpy`` types they could not be handled by JavaScript.
43
+ """
44
+ converted_data = {}
45
+
46
+ for key, value in data:
47
+ if isinstance(value, np.float64):
48
+ converted_data[key] = float(value)
49
+ elif isinstance(value, np.ndarray):
50
+ converted_data[key] = value.tolist()
51
+ else:
52
+ converted_data[key] = value
53
+
54
+ return converted_data
55
+
56
+
33
57
  def _get_waveform(wave: Waveform, scale: float, wave_q: Waveform | None = None, scale_q: float | None = None) -> str:
34
58
  import matplotlib.pyplot as plt
35
59
 
@@ -74,7 +98,7 @@ def _playlist_as_a_dict(playlist: Playlist, segment_indices: Sequence[int]) -> d
74
98
  instruction = channel_desc.instruction_table[instruction_idx]
75
99
  instruction_dict = {}
76
100
  instruction_dict["name"] = instruction.operation.__class__.__name__
77
- params = asdict(instruction.operation)
101
+ params = asdict(instruction.operation, dict_factory=_numpy_to_builtin_types)
78
102
  if instruction.operation.__class__.__name__ == "RealPulse":
79
103
  instruction_dict["wave_img_idx"] = instruction_idx
80
104
  if str(instruction_idx) not in waveform_dict[channel]:
@@ -119,7 +119,7 @@
119
119
  var fullscreen_state = false;
120
120
 
121
121
  // The schedules to render
122
- var schedules = {{jsonobj.playlists | replace("array", "Array")}}
122
+ var schedules = {{jsonobj.playlists}}
123
123
  var waveforms = {{jsonobj.waveforms}}
124
124
  var segment_indices = {{segment_indices}}
125
125
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulse
3
- Version: 9.13.0
3
+ Version: 9.15.0
4
4
  Summary: A Python-based project for providing interface and implementations for control pulses.
5
5
  Author-email: IQM Finland Oy <info@meetiqm.com>
6
6
  License: Apache License
@@ -214,7 +214,7 @@ Requires-Python: >=3.11
214
214
  Description-Content-Type: text/x-rst
215
215
  License-File: LICENSE.txt
216
216
  Requires-Dist: iqm-exa-common<27,>=26
217
- Requires-Dist: iqm-data-definitions<3.0,>=2.6
217
+ Requires-Dist: iqm-data-definitions<3.0,>=2.13
218
218
  Requires-Dist: python-rapidjson==1.20
219
219
  Requires-Dist: jinja2==3.0.3
220
220
  Requires-Dist: numpy<3.0,>=1.26.4
@@ -1,5 +1,5 @@
1
1
  iqm-exa-common<27,>=26
2
- iqm-data-definitions<3.0,>=2.6
2
+ iqm-data-definitions<3.0,>=2.13
3
3
  python-rapidjson==1.20
4
4
  jinja2==3.0.3
5
5
  numpy<3.0,>=1.26.4
@@ -0,0 +1 @@
1
+ 9.15.0
@@ -1 +0,0 @@
1
- 9.13.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