iqm-pulse 10.4.0__tar.gz → 11.0.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.
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/CHANGELOG.rst +16 -0
- {iqm_pulse-10.4.0/src/iqm_pulse.egg-info → iqm_pulse-11.0.0}/PKG-INFO +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/pyproject.toml +3 -3
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/base_utils.py +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/builder.py +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/circuit_operations.py +7 -7
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/default_gates.py +10 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/reset.py +3 -9
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/rz.py +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/channel.py +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/instructions.py +3 -3
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/schedule.py +3 -3
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/base.py +2 -2
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/waveforms.py +1 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/validation.py +3 -3
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0/src/iqm_pulse.egg-info}/PKG-INFO +1 -1
- iqm_pulse-11.0.0/version.txt +1 -0
- iqm_pulse-10.4.0/version.txt +0 -1
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/LICENSE.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/MANIFEST.in +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/README.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/API.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/Makefile +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/.gitignore +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/css/custom.css +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/favicon.ico +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/feedback_timing.svg +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/logo.png +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/playlist_breakdown.svg +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/pulse_timing.svg +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_static/images/readout_timing.svg +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/changelog.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/concepts.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/conf.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/custom_gates.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/index.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/license.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/pulse_timing.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/references.bib +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/references.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/docs/using_builder.rst +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/requirements/base.in +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/requirements/base.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/setup.cfg +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/setup.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/__init__.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gate_implementation.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/__init__.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/barrier.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/conditional.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/cz.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/delay.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/enums.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/flux_multiplexer.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/measure.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/move.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/prx.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/sx.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/gates/u.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/__init__.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/fast_drag.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/hd_drag.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/playlist.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/__init__.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/playlist_inspection.jinja2 +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/static/logo.png +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/static/moment.min.js +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.css +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/static/vis-timeline-graph2d.min.js +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/py.typed +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/quantum_ops.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/scheduler.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/timebox.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/utils.py +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm_pulse.egg-info/SOURCES.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm_pulse.egg-info/dependency_links.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm_pulse.egg-info/requires.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm_pulse.egg-info/top_level.txt +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/tests/.pylintrc +0 -0
- {iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/tests/__init__.py +0 -0
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version 11.0.0 (2025-09-08)
|
|
6
|
+
===========================
|
|
7
|
+
|
|
8
|
+
Features
|
|
9
|
+
--------
|
|
10
|
+
|
|
11
|
+
- Split the measure QuantumOp into measure (QND mid-circuit-measure) and measure_fidelity (terminal measure that might not be QND)
|
|
12
|
+
|
|
13
|
+
Version 10.5.0 (2025-09-03)
|
|
14
|
+
===========================
|
|
15
|
+
|
|
16
|
+
Features
|
|
17
|
+
--------
|
|
18
|
+
|
|
19
|
+
- Enable ruff rule for missing annotations and mark exemptions.
|
|
20
|
+
|
|
5
21
|
Version 10.4.0 (2025-08-12)
|
|
6
22
|
===========================
|
|
7
23
|
|
|
@@ -52,7 +52,7 @@ nb_diff_ignore = [ "/metadata/language_info", "/metadata/widgets", "/cells/*/exe
|
|
|
52
52
|
|
|
53
53
|
[tool.ruff.lint]
|
|
54
54
|
ignore = [ "D203", "D213",]
|
|
55
|
-
select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D", "UP007", "UP006", "UP035",]
|
|
55
|
+
select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D", "UP007", "UP006", "UP035", "ANN001", "ANN201", "ANN202",]
|
|
56
56
|
unfixable = [ "F401",]
|
|
57
57
|
|
|
58
58
|
[tool.ruff.lint.isort]
|
|
@@ -65,9 +65,9 @@ relative-imports-order = "closest-to-furthest"
|
|
|
65
65
|
[tool.ruff.lint.per-file-ignores]
|
|
66
66
|
"**/__init__.py" = [ "F401", "PLR0402",]
|
|
67
67
|
"**/docs/*" = [ "E402", "D100",]
|
|
68
|
-
"**/setup.py" = [ "D100", "D103", "I001",]
|
|
68
|
+
"**/setup.py" = [ "D100", "D103", "I001", "ANN201",]
|
|
69
69
|
"**/src/*" = [ "PLR2004", "D400", "D415", "D205", "D401", "D417", "D100", "D101", "D107", "D102", "D105", "D103", "D404", "D104",]
|
|
70
|
-
"**/tests/*" = [ "F632", "PLR2004", "PLR0402", "PLC0414", "D",]
|
|
70
|
+
"**/tests/*" = [ "F632", "PLR2004", "PLR0402", "PLC0414", "D", "ANN001", "ANN201", "ANN202",]
|
|
71
71
|
|
|
72
72
|
[tool.ruff.lint.pylint]
|
|
73
73
|
max-args = 8
|
|
@@ -24,7 +24,7 @@ from typing import Any
|
|
|
24
24
|
import numpy as np
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
def merge_dicts(A: dict, B: dict, path=(), merge_nones: bool = True) -> dict:
|
|
27
|
+
def merge_dicts(A: dict, B: dict, path=(), merge_nones: bool = True) -> dict: # noqa: ANN001
|
|
28
28
|
"""Merge two dictionaries recursively, leaving the originals unchanged.
|
|
29
29
|
|
|
30
30
|
Args:
|
|
@@ -145,7 +145,7 @@ def get_unitary_from_circuit(
|
|
|
145
145
|
return unitary
|
|
146
146
|
|
|
147
147
|
|
|
148
|
-
def _get_qubit_order_from_circuit(circuit: list[CircuitOperation]):
|
|
148
|
+
def _get_qubit_order_from_circuit(circuit: list[CircuitOperation]): # noqa: ANN202
|
|
149
149
|
"""Get all qubits which are in the circuit in order."""
|
|
150
150
|
# unique items, in the same order
|
|
151
151
|
return list(dict.fromkeys(qb for op in circuit for qb in op.locus))
|
|
@@ -278,7 +278,7 @@ class CircuitOperationList(list):
|
|
|
278
278
|
if self.table[op_name].arity:
|
|
279
279
|
self._set_specific_operation_shortcut(op_name)
|
|
280
280
|
|
|
281
|
-
def __getitem__(self, item) -> CircuitOperationList | CircuitOperation: # type: ignore[override] # type: ignore[override] # type: ignore[override]
|
|
281
|
+
def __getitem__(self, item) -> CircuitOperationList | CircuitOperation: # type: ignore[override] # type: ignore[override] # type: ignore[override] # noqa: ANN001
|
|
282
282
|
"""For the builtin list, this method is used both for accessing a single element: ``mylist[0]`` and accessing
|
|
283
283
|
a slice: ``mylist[1:3]``. The latter should generate a new CircuitOperationList, so we override the method to
|
|
284
284
|
ensure that it does.
|
|
@@ -290,12 +290,12 @@ class CircuitOperationList(list):
|
|
|
290
290
|
|
|
291
291
|
return result
|
|
292
292
|
|
|
293
|
-
def __add__(self, other) -> CircuitOperationList:
|
|
293
|
+
def __add__(self, other) -> CircuitOperationList: # noqa: ANN001
|
|
294
294
|
new = CircuitOperationList(list.__add__(self, other), qubits=self.qubits, table=self.table)
|
|
295
295
|
|
|
296
296
|
return new
|
|
297
297
|
|
|
298
|
-
def __mul__(self, other) -> CircuitOperationList:
|
|
298
|
+
def __mul__(self, other) -> CircuitOperationList: # noqa: ANN001
|
|
299
299
|
new = CircuitOperationList(list.__mul__(self, other), qubits=self.qubits, table=self.table)
|
|
300
300
|
return new
|
|
301
301
|
|
|
@@ -377,7 +377,7 @@ class CircuitOperationList(list):
|
|
|
377
377
|
|
|
378
378
|
def compose(
|
|
379
379
|
self,
|
|
380
|
-
other,
|
|
380
|
+
other, # noqa: ANN001
|
|
381
381
|
locus_indices: list[int] | None = None,
|
|
382
382
|
) -> Self:
|
|
383
383
|
"""A safer way to add circuits together, but will probably take time.
|
|
@@ -482,8 +482,8 @@ class CircuitOperationList(list):
|
|
|
482
482
|
num_params = len(op.params)
|
|
483
483
|
arity = op.arity
|
|
484
484
|
|
|
485
|
-
def _add_specific_op(
|
|
486
|
-
self,
|
|
485
|
+
def _add_specific_op( # noqa: ANN202
|
|
486
|
+
self, # noqa: ANN001
|
|
487
487
|
*args_and_locus,
|
|
488
488
|
impl_name: str | None = None,
|
|
489
489
|
):
|
|
@@ -68,7 +68,9 @@ _implementation_library: dict[str, dict[str, type[GateImplementation]]] = {
|
|
|
68
68
|
"delay": {"wait": Delay},
|
|
69
69
|
"measure": {
|
|
70
70
|
"constant": Measure_Constant,
|
|
71
|
-
|
|
71
|
+
},
|
|
72
|
+
"measure_fidelity": {
|
|
73
|
+
"constant": Measure_Constant,
|
|
72
74
|
"shelved_constant": Shelved_Measure_Constant,
|
|
73
75
|
},
|
|
74
76
|
"prx": {
|
|
@@ -134,6 +136,13 @@ _quantum_ops_library = {
|
|
|
134
136
|
implementations=_implementation_library["measure"],
|
|
135
137
|
factorizable=True,
|
|
136
138
|
),
|
|
139
|
+
QuantumOp(
|
|
140
|
+
"measure_fidelity",
|
|
141
|
+
0,
|
|
142
|
+
("key",),
|
|
143
|
+
implementations=_implementation_library["measure_fidelity"],
|
|
144
|
+
factorizable=True,
|
|
145
|
+
),
|
|
137
146
|
QuantumOp(
|
|
138
147
|
"prx",
|
|
139
148
|
1,
|
|
@@ -62,15 +62,9 @@ class Reset_Conditional(CompositeGate):
|
|
|
62
62
|
for q in self.locus
|
|
63
63
|
if "drive" in self.builder.component_channels[q] and q in self.builder.chip_topology.component_to_probe_line
|
|
64
64
|
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
RESET_MEASUREMENT_KEY, feedback_key=RESET_FEEDBACK_KEY
|
|
69
|
-
)
|
|
70
|
-
except (ValueError, KeyError):
|
|
71
|
-
probe_timebox = self.build("measure", resettable).probe_timebox( # type: ignore[attr-defined]
|
|
72
|
-
RESET_MEASUREMENT_KEY, feedback_key=RESET_FEEDBACK_KEY
|
|
73
|
-
)
|
|
65
|
+
probe_timebox = self.build("measure", resettable).probe_timebox( # type: ignore[attr-defined]
|
|
66
|
+
RESET_MEASUREMENT_KEY, feedback_key=RESET_FEEDBACK_KEY
|
|
67
|
+
)
|
|
74
68
|
virtual_channels = set()
|
|
75
69
|
probes = set()
|
|
76
70
|
resets = []
|
|
@@ -253,7 +253,7 @@ class RZ_PRX_Composite(CompositeGate):
|
|
|
253
253
|
|
|
254
254
|
registered_gates = ("prx",)
|
|
255
255
|
|
|
256
|
-
def __init__(self, parent, name, locus, calibration_data, builder):
|
|
256
|
+
def __init__(self, parent, name, locus, calibration_data, builder): # noqa: ANN001
|
|
257
257
|
super().__init__(parent, name, locus, calibration_data, builder)
|
|
258
258
|
|
|
259
259
|
def __call__(self, angle: float) -> TimeBox:
|
|
@@ -272,7 +272,7 @@ class ChannelDescription:
|
|
|
272
272
|
self.waveform_table.append(wave)
|
|
273
273
|
return idx
|
|
274
274
|
|
|
275
|
-
def _lookup_or_insert_instruction(self, instruction) -> int:
|
|
275
|
+
def _lookup_or_insert_instruction(self, instruction) -> int: # noqa: ANN001
|
|
276
276
|
new_idx = len(self.instruction_table)
|
|
277
277
|
idx = self._reverse_instruction_index.setdefault(instruction, new_idx)
|
|
278
278
|
if idx == new_idx:
|
|
@@ -103,7 +103,7 @@ class RealPulse(Instruction):
|
|
|
103
103
|
scale: float
|
|
104
104
|
"""Scaling factor for the waveform."""
|
|
105
105
|
|
|
106
|
-
def validate(self):
|
|
106
|
+
def validate(self): # noqa: ANN201
|
|
107
107
|
super().validate()
|
|
108
108
|
if abs(self.scale) > 1.0:
|
|
109
109
|
raise ValueError(f"RealPulse.scale {self.scale} not in [-1, 1].")
|
|
@@ -149,7 +149,7 @@ class IQPulse(Instruction):
|
|
|
149
149
|
all pulses that are played after it on the channel, in radians.
|
|
150
150
|
"""
|
|
151
151
|
|
|
152
|
-
def validate(self):
|
|
152
|
+
def validate(self): # noqa: ANN201
|
|
153
153
|
super().validate()
|
|
154
154
|
if abs(self.scale_i) > 1.0:
|
|
155
155
|
raise ValueError(f"IQPulse.scale_i {self.scale_i} not in [-1, 1].")
|
|
@@ -169,7 +169,7 @@ class ConditionalInstruction(Instruction):
|
|
|
169
169
|
outcomes: tuple[Instruction, ...]
|
|
170
170
|
"""Maps possible outcomes of the condition to the corresponding instructions."""
|
|
171
171
|
|
|
172
|
-
def validate(self):
|
|
172
|
+
def validate(self): # noqa: ANN201
|
|
173
173
|
super().validate()
|
|
174
174
|
if not self.outcomes:
|
|
175
175
|
raise ValueError("There must be at least one outcome.")
|
|
@@ -78,7 +78,7 @@ class Segment:
|
|
|
78
78
|
def __len__(self) -> int:
|
|
79
79
|
return len(self._instructions)
|
|
80
80
|
|
|
81
|
-
def __getitem__(self, key):
|
|
81
|
+
def __getitem__(self, key): # noqa: ANN001
|
|
82
82
|
return self._instructions[key]
|
|
83
83
|
|
|
84
84
|
def __reversed__(self):
|
|
@@ -229,7 +229,7 @@ class Schedule:
|
|
|
229
229
|
s += "|\n"
|
|
230
230
|
return s
|
|
231
231
|
|
|
232
|
-
def items(self):
|
|
232
|
+
def items(self): # noqa: ANN201
|
|
233
233
|
"""Iterator over the schedule channel names and segments."""
|
|
234
234
|
return self._contents.items()
|
|
235
235
|
|
|
@@ -313,7 +313,7 @@ class Schedule:
|
|
|
313
313
|
}
|
|
314
314
|
return self
|
|
315
315
|
|
|
316
|
-
def front_pad_in_seconds(self, to_duration: float, channel_properties: dict[str, ChannelProperties]):
|
|
316
|
+
def front_pad_in_seconds(self, to_duration: float, channel_properties: dict[str, ChannelProperties]): # noqa: ANN201
|
|
317
317
|
"""Modifies the schedule in place by front-padding it with :class:`.Wait` instructions.
|
|
318
318
|
|
|
319
319
|
The new duration is given in seconds, and this method works also with variable sample rates.
|
|
@@ -31,7 +31,7 @@ import numpy as np
|
|
|
31
31
|
from iqm.pulse.playlist.playlist import Playlist
|
|
32
32
|
|
|
33
33
|
|
|
34
|
-
def _numpy_to_builtin_types(data: list[tuple[str, Any]]):
|
|
34
|
+
def _numpy_to_builtin_types(data: list[tuple[str, Any]]): # noqa: ANN202
|
|
35
35
|
"""Convert selected ``numpy`` types to Python's built-in types.
|
|
36
36
|
|
|
37
37
|
This helper function is to be used for converting dataclasses into
|
|
@@ -57,7 +57,7 @@ def _numpy_to_builtin_types(data: list[tuple[str, Any]]):
|
|
|
57
57
|
def _get_waveform(wave: Waveform, scale: float, wave_q: Waveform | None = None, scale_q: float | None = None) -> str:
|
|
58
58
|
import matplotlib.pyplot as plt
|
|
59
59
|
|
|
60
|
-
def fig_to_base64(fig):
|
|
60
|
+
def fig_to_base64(fig): # noqa: ANN001, ANN202
|
|
61
61
|
img = io.BytesIO()
|
|
62
62
|
fig.savefig(img, format="png", bbox_inches="tight")
|
|
63
63
|
img.seek(0)
|
|
@@ -364,7 +364,7 @@ class Chirp(Waveform):
|
|
|
364
364
|
alpha: float = 0.05
|
|
365
365
|
phase: float = 0
|
|
366
366
|
|
|
367
|
-
def _sample(self, sample_coords):
|
|
367
|
+
def _sample(self, sample_coords): # noqa: ANN001, ANN202
|
|
368
368
|
chirpfreq = np.linspace(self.freq_start, self.freq_stop, len(sample_coords))
|
|
369
369
|
chirpphase = 2 * np.pi * np.cumsum(chirpfreq) + self.phase
|
|
370
370
|
wave = np.exp(1j * chirpphase) * ss.windows.tukey(len(sample_coords), self.alpha)
|
|
@@ -126,7 +126,7 @@ class AWGScheduleValidationError(Exception):
|
|
|
126
126
|
class InvalidInstructionError(Exception):
|
|
127
127
|
"""Error raised when encountering an invalid instruction."""
|
|
128
128
|
|
|
129
|
-
def __init__(self, instruction, issue_string="unknown reason"):
|
|
129
|
+
def __init__(self, instruction, issue_string="unknown reason"): # noqa: ANN001
|
|
130
130
|
self.issue_string = issue_string
|
|
131
131
|
self.instruction = instruction
|
|
132
132
|
super().__init__(issue_string)
|
|
@@ -135,7 +135,7 @@ class InvalidInstructionError(Exception):
|
|
|
135
135
|
return f"{self.issue_string} (in {self.instruction})"
|
|
136
136
|
|
|
137
137
|
|
|
138
|
-
def validate_instruction_and_wf_length(instruction: Instruction):
|
|
138
|
+
def validate_instruction_and_wf_length(instruction: Instruction): # noqa: ANN201
|
|
139
139
|
"""Validate that instruction and waveform lengths match
|
|
140
140
|
|
|
141
141
|
Args:
|
|
@@ -156,7 +156,7 @@ def validate_instruction_and_wf_length(instruction: Instruction):
|
|
|
156
156
|
raise InvalidInstructionError(instruction, "scale not in -1..1")
|
|
157
157
|
|
|
158
158
|
|
|
159
|
-
def validate_awg_and_schedule_compatibility(
|
|
159
|
+
def validate_awg_and_schedule_compatibility( # noqa: ANN201
|
|
160
160
|
channel_description: ChannelDescription, device_constraints: AWGScheduleValidationData
|
|
161
161
|
):
|
|
162
162
|
"""Validates that the given playlist is compatible with the provided AWG data.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
11.0.0
|
iqm_pulse-10.4.0/version.txt
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
10.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
|
|
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
|
|
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
|
{iqm_pulse-10.4.0 → iqm_pulse-11.0.0}/src/iqm/pulse/playlist/visualisation/templates/static/logo.png
RENAMED
|
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
|