iqm-pulla 8.2.0__tar.gz → 8.3.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_pulla-8.2.0 → iqm_pulla-8.3.0}/CHANGELOG.rst +8 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/PKG-INFO +2 -2
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/pyproject.toml +8 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/qiskit.txt +2 -2
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/dd.py +2 -2
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/standard_stages.py +12 -9
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/station_settings.py +7 -7
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/pulla.py +4 -4
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/quantum_architecture.py +2 -2
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/utils.py +4 -4
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/utils_qir.py +1 -1
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm_pulla.egg-info/PKG-INFO +2 -2
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm_pulla.egg-info/SOURCES.txt +1 -0
- iqm_pulla-8.3.0/tests/__init__.py +0 -0
- iqm_pulla-8.3.0/version.txt +1 -0
- iqm_pulla-8.2.0/version.txt +0 -1
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/AUTHORS.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/LICENSE.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/MANIFEST.in +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/README.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/API.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Compilation Stages.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Configuration and Usage.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Custom Gates and Implementations.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Compilation With Local Calibration Set.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Executing QIR programs.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Measuring T1.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Randomized Benchmarking.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Simple Dynamical Decoupling.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Quick Start.ipynb +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/_static/images/favicon.ico +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/_static/images/logo.png +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/authors.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/changelog.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/common_errors.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/conf.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/examples.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/index.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/license.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/migration_guide.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/readme.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/references.bib +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/references.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/user_guides.rst +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/base.in +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/base.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/notebook.in +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/notebook.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/qir.in +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/qir.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/requirements/qiskit.in +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/setup.cfg +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/setup.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/__init__.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/__init__.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/circuit_compilation_request_handler.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/compiler.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/errors.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/interface/__init__.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/interface/compiler.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/py.typed +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/__init__.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/calibration.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/interface.py +0 -0
- iqm_pulla-8.2.0/tests/__init__.py → iqm_pulla-8.3.0/src/iqm/pulla/py.typed +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/utils_cirq.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/utils_dd.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/pulla/utils_qiskit.py +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm_pulla.egg-info/dependency_links.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm_pulla.egg-info/requires.txt +1 -1
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm_pulla.egg-info/top_level.txt +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/tests/.pylintrc +0 -0
- {iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/tests/conftest.py +0 -0
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version 8.3.0 (2025-07-09)
|
|
6
|
+
==========================
|
|
7
|
+
|
|
8
|
+
Features
|
|
9
|
+
--------
|
|
10
|
+
|
|
11
|
+
- Enable mypy type checking in CI and add temporary type ignores to the source code. :issue:`SW-1615`
|
|
12
|
+
|
|
5
13
|
Version 8.2.0 (2025-07-02)
|
|
6
14
|
==========================
|
|
7
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-pulla
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.3.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<10,>=9; extra == "qiskit"
|
|
242
|
-
Requires-Dist: iqm-client<30,>=29; extra == "qiskit"
|
|
243
242
|
Requires-Dist: iqm-client[qiskit]<30,>=29; extra == "qiskit"
|
|
243
|
+
Requires-Dist: iqm-client<30,>=29; extra == "qiskit"
|
|
244
244
|
|
|
245
245
|
IQM Pulla
|
|
246
246
|
#########
|
|
@@ -21,6 +21,14 @@ file = "LICENSE.txt"
|
|
|
21
21
|
Documentation = "https://iqm-finland.github.io/docs/iqm-pulla/"
|
|
22
22
|
Homepage = "https://pypi.org/project/iqm-pulla/"
|
|
23
23
|
|
|
24
|
+
[tool.mypy]
|
|
25
|
+
explicit_package_bases = true
|
|
26
|
+
mypy_path = "$MYPY_CONFIG_FILE_DIR/src"
|
|
27
|
+
namespace_packages = true
|
|
28
|
+
[[tool.mypy.overrides]]
|
|
29
|
+
module = [ "iqm.data_definitions.*", "iqm.models.*", "daemon.*", "quimb.*", "qiskit.*", "qiskit_aer.*", "grpc.*", "lmfit.*", "emukit.*", "mockito.*", "sklearn.*", "dill.*", "uncertainties.*", "GPy.*", "pythonjsonlogger.*",]
|
|
30
|
+
ignore_missing_imports = true
|
|
31
|
+
|
|
24
32
|
[tool.ruff]
|
|
25
33
|
exclude = [ "*.ipynb", "*.rst",]
|
|
26
34
|
extend-include = [ "sub-setup-py.template",]
|
|
@@ -515,7 +515,7 @@ def insert_dd_sequences(
|
|
|
515
515
|
wait_duration = wait.duration
|
|
516
516
|
|
|
517
517
|
# NOTE: Duration is always calculated using "X"
|
|
518
|
-
prx_duration = _get_channel_segment(builder, prx.rx(math.pi), channel_name).duration
|
|
518
|
+
prx_duration = _get_channel_segment(builder, prx.rx(math.pi), channel_name).duration # type: ignore[attr-defined]
|
|
519
519
|
calculated_ratio = wait_duration / prx_duration
|
|
520
520
|
|
|
521
521
|
cpc_logger.debug(
|
|
@@ -531,7 +531,7 @@ def insert_dd_sequences(
|
|
|
531
531
|
# each PRX gate in the sequence must be implementable using a single drive channel segment
|
|
532
532
|
dd_segments = []
|
|
533
533
|
for theta, phi in prx_args:
|
|
534
|
-
seg = _get_channel_segment(builder, prx(theta, phi), channel_name)
|
|
534
|
+
seg = _get_channel_segment(builder, prx(theta, phi), channel_name) # type: ignore[arg-type]
|
|
535
535
|
dd_segments.append(seg)
|
|
536
536
|
|
|
537
537
|
cpc_logger.debug(
|
|
@@ -232,7 +232,7 @@ def _fix_implementation_and_locus(
|
|
|
232
232
|
inst.locus = locus
|
|
233
233
|
circuit_components.update(locus)
|
|
234
234
|
if op.arity == 2:
|
|
235
|
-
circuit_component_pairs.add(locus)
|
|
235
|
+
circuit_component_pairs.add(locus) # type: ignore[arg-type]
|
|
236
236
|
circuit_gate_loci.setdefault(inst.name, {}).setdefault(inst.implementation, Counter()).update([locus])
|
|
237
237
|
|
|
238
238
|
return CircuitMetrics(
|
|
@@ -274,7 +274,10 @@ def _build_readout_mappings(
|
|
|
274
274
|
|
|
275
275
|
# find out which components have measurement data
|
|
276
276
|
components_that_can_be_measured = frozenset(
|
|
277
|
-
q
|
|
277
|
+
q
|
|
278
|
+
for impl_loci in builder.calibration["measure"].values()
|
|
279
|
+
for locus in impl_loci
|
|
280
|
+
for q in locus # type: ignore[union-attr]
|
|
278
281
|
)
|
|
279
282
|
|
|
280
283
|
# Figure out which qubits should always be measured on the QPU in the final measurement.
|
|
@@ -411,22 +414,22 @@ def _get_op_calibration_errors(calibration: OpCalibrationDataTree, ops: QuantumO
|
|
|
411
414
|
# since OILCalibrationData can have nested dicts, we do a recursive diff
|
|
412
415
|
error = diff_dicts(merge_dicts(default_cal_data, cal_data), impl.parameters, [])
|
|
413
416
|
if error is not None:
|
|
414
|
-
errors[(op_name, impl_name, locus)] = error
|
|
417
|
+
errors[(op_name, impl_name, locus)] = error # type: ignore[index]
|
|
415
418
|
continue
|
|
416
419
|
|
|
417
420
|
n_components = len(locus)
|
|
418
421
|
arity = op.arity
|
|
419
422
|
if arity == 0:
|
|
420
423
|
if n_components != 1:
|
|
421
|
-
errors[(op_name, impl_name, locus)] = (
|
|
424
|
+
errors[(op_name, impl_name, locus)] = ( # type: ignore[index]
|
|
422
425
|
f"{op_name}.{impl_name} at {locus}: for zero-arity operations, "
|
|
423
426
|
"calibration data must be provided for single-component loci only"
|
|
424
427
|
)
|
|
425
428
|
elif n_components != arity:
|
|
426
|
-
errors[(op_name, impl_name, locus)] = (
|
|
429
|
+
errors[(op_name, impl_name, locus)] = ( # type: ignore[index]
|
|
427
430
|
f"{op_name}.{impl_name} at {locus}: locus must have {arity} component(s)"
|
|
428
431
|
)
|
|
429
|
-
return errors
|
|
432
|
+
return errors # type: ignore[return-value]
|
|
430
433
|
|
|
431
434
|
|
|
432
435
|
def merge_multiplexed_timeboxes(circuit_box: TimeBox) -> TimeBox:
|
|
@@ -469,7 +472,7 @@ def merge_multiplexed_timeboxes(circuit_box: TimeBox) -> TimeBox:
|
|
|
469
472
|
if pending:
|
|
470
473
|
if disjoint_boxes(pending, gate_box):
|
|
471
474
|
# Pending box and new candidate have disjoint loci, merge is possible.
|
|
472
|
-
pending = pending + gate_box.children[0]
|
|
475
|
+
pending = pending + gate_box.children[0] # type: ignore[assignment]
|
|
473
476
|
continue
|
|
474
477
|
# Pending box collides with the new candidate, so we must place it immediately and continue with
|
|
475
478
|
# the new candidate.
|
|
@@ -480,7 +483,7 @@ def merge_multiplexed_timeboxes(circuit_box: TimeBox) -> TimeBox:
|
|
|
480
483
|
if pending and not disjoint_boxes(pending, gate_box):
|
|
481
484
|
placed_boxes.append(pending)
|
|
482
485
|
pending = None
|
|
483
|
-
placed_boxes.append(gate_box)
|
|
486
|
+
placed_boxes.append(gate_box) # type: ignore[arg-type]
|
|
484
487
|
|
|
485
488
|
if pending:
|
|
486
489
|
placed_boxes.append(pending)
|
|
@@ -540,7 +543,7 @@ def map_components(
|
|
|
540
543
|
_map_components_in_instructions(
|
|
541
544
|
component_mapping,
|
|
542
545
|
c.instructions,
|
|
543
|
-
device_components=device_components,
|
|
546
|
+
device_components=device_components, # type: ignore[arg-type]
|
|
544
547
|
)
|
|
545
548
|
except CircuitError as exc:
|
|
546
549
|
raise CircuitError(f"Circuit {idx}: {exc}") from exc
|
|
@@ -140,7 +140,7 @@ def find_observation(
|
|
|
140
140
|
obs_value = calibration_set.get(observation_path)
|
|
141
141
|
if obs_value is None and required:
|
|
142
142
|
raise CalibrationError(f"Missing calibration observation: {observation_path}")
|
|
143
|
-
return obs_value
|
|
143
|
+
return obs_value # type: ignore[return-value]
|
|
144
144
|
|
|
145
145
|
|
|
146
146
|
# TODO until station type records (defining the instrumentation for each chip component) are available,
|
|
@@ -363,28 +363,28 @@ def build_station_settings(
|
|
|
363
363
|
# Then add the required static settings for circuit execution.
|
|
364
364
|
for qubit in circuit_qubits:
|
|
365
365
|
apply_observations(qubit, _per_qubit)
|
|
366
|
-
_apply_static_settings(qubit, _per_qubit_static, root)
|
|
366
|
+
_apply_static_settings(qubit, _per_qubit_static, root) # type: ignore[arg-type]
|
|
367
367
|
if qubit in flux_pulsed_qubits:
|
|
368
368
|
apply_observations(qubit, _per_flux_pulsed_qubit)
|
|
369
|
-
_apply_static_settings(qubit, _per_flux_pulsed_qubit_static, root)
|
|
369
|
+
_apply_static_settings(qubit, _per_flux_pulsed_qubit_static, root) # type: ignore[arg-type]
|
|
370
370
|
|
|
371
371
|
for coupler in circuit_couplers:
|
|
372
372
|
apply_observations(coupler, _per_coupler)
|
|
373
|
-
_apply_static_settings(coupler, _per_coupler_static, root)
|
|
373
|
+
_apply_static_settings(coupler, _per_coupler_static, root) # type: ignore[arg-type]
|
|
374
374
|
|
|
375
375
|
for pl in measured_probe_lines:
|
|
376
376
|
apply_observations(pl, _per_probe_line)
|
|
377
|
-
_apply_static_settings(pl, _per_probe_line_static, root)
|
|
377
|
+
_apply_static_settings(pl, _per_probe_line_static, root) # type: ignore[arg-type]
|
|
378
378
|
|
|
379
379
|
for qubit in boundary_qubits:
|
|
380
380
|
apply_observations(qubit, _per_boundary_qubit)
|
|
381
381
|
_apply_static_settings(qubit, _per_boundary_qubit_static, root)
|
|
382
382
|
if qubit in flux_pulsed_qubits:
|
|
383
|
-
_apply_static_settings(qubit, _per_boundary_flux_pulsed_qubit_static, root)
|
|
383
|
+
_apply_static_settings(qubit, _per_boundary_flux_pulsed_qubit_static, root) # type: ignore[arg-type]
|
|
384
384
|
|
|
385
385
|
for coupler in boundary_couplers:
|
|
386
386
|
apply_observations(coupler, _per_boundary_coupler)
|
|
387
|
-
_apply_static_settings(coupler, _per_boundary_coupler_static, root)
|
|
387
|
+
_apply_static_settings(coupler, _per_boundary_coupler_static, root) # type: ignore[arg-type]
|
|
388
388
|
|
|
389
389
|
# QPU-wide options
|
|
390
390
|
apply_observations("", _per_qpu)
|
|
@@ -251,10 +251,10 @@ class Pulla:
|
|
|
251
251
|
sweep_data = self._station_control.get_sweep(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:
|
|
254
|
+
if sweep_data.job_status <= JobExecutorStatus.EXECUTION_STARTED: # type: ignore[operator]
|
|
255
255
|
# Wait in the task queue while showing a progress bar
|
|
256
256
|
|
|
257
|
-
interrupted = self._station_control._wait_job_completion(str(job_id), get_progress_bar_callback())
|
|
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
260
|
|
|
@@ -285,7 +285,7 @@ class Pulla:
|
|
|
285
285
|
)
|
|
286
286
|
sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
|
|
287
287
|
job = self._station_control.get_job(job_id)
|
|
288
|
-
sc_result.message = job["job_error"]
|
|
288
|
+
sc_result.message = job["job_error"] # type: ignore[index]
|
|
289
289
|
logger.error("Submission failed! Error: %s", sc_result.message)
|
|
290
290
|
return sc_result
|
|
291
291
|
|
|
@@ -296,7 +296,7 @@ class Pulla:
|
|
|
296
296
|
)
|
|
297
297
|
sc_result.end_time = sweep_data.end_timestamp.isoformat() if sweep_data.end_timestamp else None
|
|
298
298
|
job = self._station_control.get_job(job_id)
|
|
299
|
-
sc_result.message = job["job_error"]
|
|
299
|
+
sc_result.message = job["job_error"] # type: ignore[index]
|
|
300
300
|
logger.error("Submission was revoked!")
|
|
301
301
|
return sc_result
|
|
302
302
|
|
|
@@ -40,8 +40,8 @@ def create_static_quantum_architecture(chip_topology: ChipTopology) -> StaticQua
|
|
|
40
40
|
# The components in each connection are already sorted, now we sort the connections
|
|
41
41
|
connectivity = sorted(unsorted_connections, key=sort_key)
|
|
42
42
|
return StaticQuantumArchitecture(
|
|
43
|
-
qubits=chip_topology.qubits_sorted,
|
|
44
|
-
computational_resonators=chip_topology.computational_resonators_sorted,
|
|
43
|
+
qubits=chip_topology.qubits_sorted, # type: ignore[arg-type]
|
|
44
|
+
computational_resonators=chip_topology.computational_resonators_sorted, # type: ignore[arg-type]
|
|
45
45
|
connectivity=connectivity,
|
|
46
46
|
)
|
|
47
47
|
|
|
@@ -421,7 +421,7 @@ def calset_to_cal_data_tree(calibration_set: CalibrationSet) -> OpCalibrationDat
|
|
|
421
421
|
locus = tuple(path[3].split(LOCUS_SEPARATOR))
|
|
422
422
|
locus = () if locus == ("",) else locus
|
|
423
423
|
# mypy likes this
|
|
424
|
-
set_path(tree.setdefault(path[1], {}).setdefault(path[2], {}).setdefault(locus, {}), path[4:], value)
|
|
424
|
+
set_path(tree.setdefault(path[1], {}).setdefault(path[2], {}).setdefault(locus, {}), path[4:], value) # type: ignore[arg-type]
|
|
425
425
|
return tree
|
|
426
426
|
|
|
427
427
|
|
|
@@ -483,7 +483,7 @@ def _update_channel_props_from_calibration(
|
|
|
483
483
|
f"No calibration value found for the center frequency or local oscillator frequency of {component}."
|
|
484
484
|
)
|
|
485
485
|
channel_name = channels["readout"]
|
|
486
|
-
replacements[channel_name] = replace(channel_properties[channel_name], center_frequency=center_frequency)
|
|
486
|
+
replacements[channel_name] = replace(channel_properties[channel_name], center_frequency=center_frequency) # type: ignore[call-arg]
|
|
487
487
|
|
|
488
488
|
return channel_properties | replacements
|
|
489
489
|
|
|
@@ -518,8 +518,8 @@ def find_circuit_boundary(
|
|
|
518
518
|
}
|
|
519
519
|
elif mode == CircuitBoundaryMode.ALL:
|
|
520
520
|
# maybe safer/better: all unused locus components/couplers are considered boundary
|
|
521
|
-
boundary_components = (device.qubits | device.computational_resonators) - circuit_components
|
|
522
|
-
boundary_couplers = device.couplers - circuit_couplers
|
|
521
|
+
boundary_components = (device.qubits | device.computational_resonators) - circuit_components # type: ignore[assignment]
|
|
522
|
+
boundary_couplers = device.couplers - circuit_couplers # type: ignore[assignment]
|
|
523
523
|
else:
|
|
524
524
|
raise UnknownCircuitExecutionOptionError(f"Unknown circuit boundary mode '{str(mode)}'")
|
|
525
525
|
return boundary_components, boundary_couplers
|
|
@@ -111,7 +111,7 @@ def _gate_inst_to_str(inst: Call) -> CircuitOperation | None:
|
|
|
111
111
|
try:
|
|
112
112
|
qir_logger.debug("Processing %s with args: %s", operation, inst.args)
|
|
113
113
|
params = operation_handlers[operation](inst.args)
|
|
114
|
-
return CircuitOperation(**params)
|
|
114
|
+
return CircuitOperation(**params) # type: ignore[arg-type] # type: ignore[arg-type] # type: ignore[arg-type] # type: ignore[arg-type]
|
|
115
115
|
except (IndexError, ValueError, AttributeError) as e:
|
|
116
116
|
qir_logger.error("Error processing operation %s: %s", operation, e)
|
|
117
117
|
raise ValueError(f"Error processing operation {operation}: {e}") from e
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-pulla
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.3.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<10,>=9; extra == "qiskit"
|
|
242
|
-
Requires-Dist: iqm-client<30,>=29; extra == "qiskit"
|
|
243
242
|
Requires-Dist: iqm-client[qiskit]<30,>=29; extra == "qiskit"
|
|
243
|
+
Requires-Dist: iqm-client<30,>=29; extra == "qiskit"
|
|
244
244
|
|
|
245
245
|
IQM Pulla
|
|
246
246
|
#########
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
8.3.0
|
iqm_pulla-8.2.0/version.txt
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
8.2.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
|
{iqm_pulla-8.2.0 → iqm_pulla-8.3.0}/docs/Example - Compilation With Local Calibration Set.ipynb
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
|
|
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_pulla-8.2.0 → iqm_pulla-8.3.0}/src/iqm/cpc/compiler/circuit_compilation_request_handler.py
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
|
|
File without changes
|
|
File without changes
|