iqm-pulse 12.4.0__tar.gz → 12.5.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 (82) hide show
  1. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/CHANGELOG.rst +8 -0
  2. {iqm_pulse-12.4.0/src/iqm_pulse.egg-info → iqm_pulse-12.5.0}/PKG-INFO +1 -1
  3. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/measure.py +3 -1
  4. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/timebox.py +15 -14
  5. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0/src/iqm_pulse.egg-info}/PKG-INFO +1 -1
  6. iqm_pulse-12.5.0/version.txt +1 -0
  7. iqm_pulse-12.4.0/version.txt +0 -1
  8. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/LICENSE.txt +0 -0
  9. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/MANIFEST.in +0 -0
  10. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/README.rst +0 -0
  11. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/API.rst +0 -0
  12. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/Makefile +0 -0
  13. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/.gitignore +0 -0
  14. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/css/custom.css +0 -0
  15. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/favicon.ico +0 -0
  16. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/feedback_timing.svg +0 -0
  17. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/logo.png +0 -0
  18. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/playlist_breakdown.svg +0 -0
  19. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/pulse_timing.svg +0 -0
  20. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_static/images/readout_timing.svg +0 -0
  21. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_templates/autosummary-class-template.rst +0 -0
  22. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/_templates/autosummary-module-template.rst +0 -0
  23. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/changelog.rst +0 -0
  24. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/concepts.rst +0 -0
  25. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/conf.py +0 -0
  26. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/custom_gates.rst +0 -0
  27. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/index.rst +0 -0
  28. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/license.rst +0 -0
  29. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/pulse_timing.rst +0 -0
  30. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/references.bib +0 -0
  31. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/references.rst +0 -0
  32. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/docs/using_builder.rst +0 -0
  33. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/pyproject.toml +0 -0
  34. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/requirements/base.in +0 -0
  35. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/requirements/base.txt +0 -0
  36. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/setup.cfg +0 -0
  37. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/setup.py +0 -0
  38. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/__init__.py +0 -0
  39. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/base_utils.py +0 -0
  40. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/builder.py +0 -0
  41. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/circuit_operations.py +0 -0
  42. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gate_implementation.py +0 -0
  43. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/__init__.py +0 -0
  44. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/barrier.py +0 -0
  45. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/conditional.py +0 -0
  46. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/cz.py +0 -0
  47. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/default_gates.py +0 -0
  48. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/delay.py +0 -0
  49. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/enums.py +0 -0
  50. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/flux_multiplexer.py +0 -0
  51. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/move.py +0 -0
  52. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/prx.py +0 -0
  53. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/reset.py +0 -0
  54. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/rz.py +0 -0
  55. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/sx.py +0 -0
  56. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/gates/u.py +0 -0
  57. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/__init__.py +0 -0
  58. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/channel.py +0 -0
  59. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/fast_drag.py +0 -0
  60. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/hd_drag.py +0 -0
  61. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/instructions.py +0 -0
  62. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/playlist.py +0 -0
  63. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/schedule.py +0 -0
  64. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/__init__.py +0 -0
  65. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/base.py +0 -0
  66. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/templates/playlist_inspection.jinja2 +0 -0
  67. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/templates/static/logo.png +0 -0
  68. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/templates/static/moment.min.js +0 -0
  69. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.css +0 -0
  70. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.js +0 -0
  71. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/playlist/waveforms.py +0 -0
  72. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/py.typed +0 -0
  73. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/quantum_ops.py +0 -0
  74. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/scheduler.py +0 -0
  75. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/utils.py +0 -0
  76. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm/pulse/validation.py +0 -0
  77. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm_pulse.egg-info/SOURCES.txt +0 -0
  78. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm_pulse.egg-info/dependency_links.txt +0 -0
  79. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm_pulse.egg-info/requires.txt +0 -0
  80. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/src/iqm_pulse.egg-info/top_level.txt +0 -0
  81. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/tests/.pylintrc +0 -0
  82. {iqm_pulse-12.4.0 → iqm_pulse-12.5.0}/tests/__init__.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 12.5.0 (2025-10-09)
6
+ ===========================
7
+
8
+ Bug fixes
9
+ ---------
10
+
11
+ - Fix TimeBox __radd__ returning the children in wrong order under some conditions
12
+
5
13
  Version 12.4.0 (2025-10-06)
6
14
  ===========================
7
15
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulse
3
- Version: 12.4.0
3
+ Version: 12.5.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
@@ -871,7 +871,9 @@ class ShelvedMeasureTimeBox(TimeBox):
871
871
  return super().__add__(other)
872
872
 
873
873
  def __radd__(self, other: TimeBox | Iterable[TimeBox]) -> TimeBox:
874
- return self.__add__(other)
874
+ if isinstance(other, MultiplexedProbeTimeBox):
875
+ return self.__add__(other) # this commutes
876
+ return super().__radd__(other)
875
877
 
876
878
 
877
879
  SHELVED_OFFSET_TOLERANCE = 1e-12
@@ -210,6 +210,19 @@ class TimeBox:
210
210
  raise ValueError(f"Tried to access a child of {self}, which is atomic.")
211
211
  return self.children[item]
212
212
 
213
+ def _add_children(self, other: TimeBox) -> TimeBox:
214
+ """Concat the children of self and other together."""
215
+ left = self.children if self.atom is None else (self,)
216
+ right = other.children if other.atom is None else (other,)
217
+ return TimeBox(
218
+ label=self.label,
219
+ locus_components=self.locus_components.union(other.locus_components),
220
+ atom=None,
221
+ children=left + right,
222
+ scheduling=self.scheduling,
223
+ scheduling_algorithm=self.scheduling_algorithm,
224
+ )
225
+
213
226
  def __add__(self, other: TimeBox | Iterable[TimeBox]) -> TimeBox:
214
227
  """Return a new TimeBox which has the contents of this and another TimeBox concatenated.
215
228
 
@@ -231,16 +244,7 @@ class TimeBox:
231
244
  # allow subclasses to override __add__ such that __radd__ also works consistent with that logic
232
245
  return other.__radd__(self) # type: ignore[union-attr]
233
246
  if isinstance(other, TimeBox):
234
- left = self.children if self.atom is None else (self,)
235
- right = other.children if other.atom is None else (other,)
236
- return TimeBox(
237
- label=self.label,
238
- locus_components=self.locus_components.union(other.locus_components),
239
- atom=None,
240
- children=left + right,
241
- scheduling=self.scheduling,
242
- scheduling_algorithm=self.scheduling_algorithm,
243
- )
247
+ return self._add_children(other)
244
248
  try:
245
249
  return reduce(lambda x, y: x + y, other, self)
246
250
  except TypeError as err:
@@ -248,7 +252,7 @@ class TimeBox:
248
252
 
249
253
  def __radd__(self, other: TimeBox | Iterable[TimeBox]) -> TimeBox:
250
254
  if isinstance(other, TimeBox):
251
- return self.__add__(other)
255
+ return other._add_children(self)
252
256
  it = iter(other)
253
257
  try:
254
258
  first = next(it)
@@ -397,6 +401,3 @@ class MultiplexedProbeTimeBox(TimeBox):
397
401
  scheduling_algorithm=SchedulingAlgorithm.HARD_BOUNDARY,
398
402
  )
399
403
  return box
400
-
401
- def __radd__(self, other: TimeBox | Iterable[TimeBox]) -> TimeBox:
402
- return self.__add__(other)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-pulse
3
- Version: 12.4.0
3
+ Version: 12.5.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
@@ -0,0 +1 @@
1
+ 12.5.0
@@ -1 +0,0 @@
1
- 12.4.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