iqm-client 29.9.0__tar.gz → 29.10.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 (106) hide show
  1. {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG.rst +8 -0
  2. {iqm_client-29.9.0 → iqm_client-29.10.0}/PKG-INFO +1 -1
  3. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/iqm_sampler.py +2 -2
  4. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/iqm_client.py +3 -0
  5. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/models.py +10 -2
  6. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/validation.py +6 -0
  7. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_job.py +9 -3
  8. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_provider.py +3 -2
  9. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/PKG-INFO +1 -1
  10. iqm_client-29.10.0/version.txt +1 -0
  11. iqm_client-29.9.0/version.txt +0 -1
  12. {iqm_client-29.9.0 → iqm_client-29.10.0}/AUTHORS.rst +0 -0
  13. {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_cirq-iqm.rst +0 -0
  14. {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_cortex-cli.rst +0 -0
  15. {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_qiskit-iqm.rst +0 -0
  16. {iqm_client-29.9.0 → iqm_client-29.10.0}/INTEGRATION_GUIDE.rst +0 -0
  17. {iqm_client-29.9.0 → iqm_client-29.10.0}/LICENSE.txt +0 -0
  18. {iqm_client-29.9.0 → iqm_client-29.10.0}/MANIFEST.in +0 -0
  19. {iqm_client-29.9.0 → iqm_client-29.10.0}/README.rst +0 -0
  20. {iqm_client-29.9.0 → iqm_client-29.10.0}/docbuild +0 -0
  21. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/API.rst +0 -0
  22. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_static/images/favicon.ico +0 -0
  23. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_static/images/logo.png +0 -0
  24. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_templates/autosummary-class-template.rst +0 -0
  25. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_templates/autosummary-module-template.rst +0 -0
  26. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/authors.rst +0 -0
  27. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/changelog.rst +0 -0
  28. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/conf.py +0 -0
  29. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/index.rst +0 -0
  30. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/integration_guide.rst +0 -0
  31. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/license.rst +0 -0
  32. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/readme.rst +0 -0
  33. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_cirq.rst +0 -0
  34. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_cli.rst +0 -0
  35. {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_qiskit.rst +0 -0
  36. {iqm_client-29.9.0 → iqm_client-29.10.0}/pyproject.toml +0 -0
  37. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/base.in +0 -0
  38. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/base.txt +0 -0
  39. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cirq.in +0 -0
  40. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cirq.txt +0 -0
  41. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cli.in +0 -0
  42. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cli.txt +0 -0
  43. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/qiskit.in +0 -0
  44. {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/qiskit.txt +0 -0
  45. {iqm_client-29.9.0 → iqm_client-29.10.0}/setup.cfg +0 -0
  46. {iqm_client-29.9.0 → iqm_client-29.10.0}/setup.py +0 -0
  47. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/__init__.py +0 -0
  48. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/__init__.py +0 -0
  49. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/adonis.py +0 -0
  50. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/aphrodite.py +0 -0
  51. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/apollo.py +0 -0
  52. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/iqm_device.py +0 -0
  53. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/iqm_device_metadata.py +0 -0
  54. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_adonis.py +0 -0
  55. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_apollo.py +0 -0
  56. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_common.py +0 -0
  57. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_iqm_execution.py +0 -0
  58. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/usage.ipynb +0 -0
  59. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/extended_qasm_parser.py +0 -0
  60. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/iqm_gates.py +0 -0
  61. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/optimizers.py +0 -0
  62. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/py.typed +0 -0
  63. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/serialize.py +0 -0
  64. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/transpiler.py +0 -0
  65. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/__init__.py +0 -0
  66. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/api.py +0 -0
  67. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/authentication.py +0 -0
  68. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/__init__.py +0 -0
  69. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/auth.py +0 -0
  70. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/cli.py +0 -0
  71. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/models.py +0 -0
  72. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/token_manager.py +0 -0
  73. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/errors.py +0 -0
  74. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/py.typed +0 -0
  75. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/transpile.py +0 -0
  76. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/util.py +0 -0
  77. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/__init__.py +0 -0
  78. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/__init__.py +0 -0
  79. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/bell_measure.py +0 -0
  80. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/resonance_example.py +0 -0
  81. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/transpile_example.py +0 -0
  82. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/__init__.py +0 -0
  83. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_adonis.py +0 -0
  84. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_aphrodite.py +0 -0
  85. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_apollo.py +0 -0
  86. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_deneb.py +0 -0
  87. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_garnet.py +0 -0
  88. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/iqm_fake_backend.py +0 -0
  89. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_backend.py +0 -0
  90. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_circuit.py +0 -0
  91. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_circuit_validation.py +0 -0
  92. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_move_layout.py +0 -0
  93. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_naive_move_pass.py +0 -0
  94. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_transpilation.py +0 -0
  95. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/move_gate.py +0 -0
  96. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/py.typed +0 -0
  97. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/qiskit_to_iqm.py +0 -0
  98. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/transpiler_plugins.py +0 -0
  99. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/SOURCES.txt +0 -0
  100. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/dependency_links.txt +0 -0
  101. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/entry_points.txt +0 -0
  102. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/requires.txt +0 -0
  103. {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/top_level.txt +0 -0
  104. {iqm_client-29.9.0 → iqm_client-29.10.0}/test +0 -0
  105. {iqm_client-29.9.0 → iqm_client-29.10.0}/tests/__init__.py +0 -0
  106. {iqm_client-29.9.0 → iqm_client-29.10.0}/tests/conftest.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 29.10.0 (2025-07-31)
6
+ ============================
7
+
8
+ Features
9
+ --------
10
+
11
+ - Support QIR programs in iqm-client
12
+
5
13
  Version 29.9.0 (2025-07-29)
6
14
  ===========================
7
15
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-client
3
- Version: 29.9.0
3
+ Version: 29.10.0
4
4
  Summary: Client library for accessing an IQM quantum computer
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>
6
6
  License: Apache License
@@ -25,7 +25,7 @@ import warnings
25
25
  import cirq
26
26
  from iqm.cirq_iqm.devices.iqm_device import IQMDevice, IQMDeviceMetadata
27
27
  from iqm.cirq_iqm.serialize import serialize_circuit
28
- from iqm.iqm_client import CircuitCompilationOptions, IQMClient, JobAbortionError, RunRequest
28
+ from iqm.iqm_client import CircuitBatch, CircuitCompilationOptions, IQMClient, JobAbortionError, RunRequest
29
29
  import numpy as np
30
30
 
31
31
 
@@ -151,7 +151,7 @@ class IQMSampler(cirq.work.Sampler):
151
151
  if isinstance(programs, cirq.Circuit):
152
152
  programs, _ = self._resolve_parameters(programs, params)
153
153
 
154
- serialized_circuits = [serialize_circuit(circuit) for circuit in programs]
154
+ serialized_circuits: CircuitBatch = [serialize_circuit(circuit) for circuit in programs]
155
155
 
156
156
  if not self._client:
157
157
  raise RuntimeError("Cannot submit circuits since session to IQM client has been closed.")
@@ -45,6 +45,7 @@ from iqm.iqm_client.models import (
45
45
  ClientLibrary,
46
46
  ClientLibraryDict,
47
47
  DynamicQuantumArchitecture,
48
+ QIRCode,
48
49
  QualityMetricSet,
49
50
  QuantumArchitectureSpecification,
50
51
  RunCounts,
@@ -232,6 +233,8 @@ class IQMClient:
232
233
 
233
234
  for i, circuit in enumerate(circuits):
234
235
  try:
236
+ if isinstance(circuit, (QIRCode)):
237
+ continue
235
238
  # validate the circuit against the static information in iqm.iqm_client.models._SUPPORTED_OPERATIONS
236
239
  validate_circuit(circuit)
237
240
  except ValueError as e:
@@ -459,7 +459,10 @@ class Circuit(BaseModel):
459
459
  return instructions
460
460
 
461
461
 
462
- CircuitBatch = list[Circuit]
462
+ QIRCode = str
463
+ """QIR program code in string representation"""
464
+
465
+ CircuitBatch = list[Circuit | QIRCode]
463
466
  """Type that represents a list of quantum circuits to be executed together in a single batch."""
464
467
 
465
468
 
@@ -473,7 +476,12 @@ def validate_circuit(circuit: Circuit) -> None:
473
476
  pydantic.error_wrappers.ValidationError: validation failed
474
477
 
475
478
  """
476
- Circuit.model_validate(circuit.__dict__)
479
+ if isinstance(circuit, Circuit):
480
+ Circuit.model_validate(circuit.__dict__)
481
+ elif isinstance(circuit, QIRCode):
482
+ pass
483
+ else:
484
+ raise ValueError("Every circuit in a batch should be of type <Circuit> or <QIRCode>")
477
485
 
478
486
 
479
487
  class SingleQubitMapping(BaseModel):
@@ -18,6 +18,7 @@ from iqm.iqm_client.models import (
18
18
  DynamicQuantumArchitecture,
19
19
  Instruction,
20
20
  MoveGateValidationMode,
21
+ QIRCode,
21
22
  )
22
23
 
23
24
 
@@ -49,6 +50,8 @@ def validate_qubit_mapping(
49
50
 
50
51
  # check if qubit mapping covers all qubits in the circuits
51
52
  for i, circuit in enumerate(circuits):
53
+ if isinstance(circuit, (QIRCode)):
54
+ continue
52
55
  diff = circuit.all_qubits() - set(qubit_mapping)
53
56
  if diff:
54
57
  raise CircuitValidationError(
@@ -86,6 +89,9 @@ def validate_circuit_instructions(
86
89
 
87
90
  """
88
91
  for index, circuit in enumerate(circuits):
92
+ if isinstance(circuit, QIRCode):
93
+ continue
94
+
89
95
  measurement_keys: set[str] = set()
90
96
  for instr in circuit.instructions:
91
97
  validate_instruction(architecture, instr, qubit_mapping)
@@ -24,6 +24,7 @@ import warnings
24
24
  from iqm.iqm_client import (
25
25
  DEFAULT_TIMEOUT_SECONDS,
26
26
  APITimeoutError,
27
+ Circuit,
27
28
  CircuitMeasurementResults,
28
29
  HeraldingMode,
29
30
  IQMClient,
@@ -79,8 +80,11 @@ class IQMJob(JobV1):
79
80
  expect_exact_shots = iqm_result.metadata.heralding_mode == HeraldingMode.NONE
80
81
 
81
82
  return [
82
- (circuit.name, self._format_measurement_results(measurements, requested_shots, expect_exact_shots))
83
- for measurements, circuit in zip(iqm_result.measurements, iqm_result.metadata.circuits)
83
+ (
84
+ circuit.name if isinstance(circuit, Circuit) else f"circuit_{i}",
85
+ self._format_measurement_results(measurements, requested_shots, expect_exact_shots),
86
+ )
87
+ for i, (measurements, circuit) in enumerate(zip(iqm_result.measurements, iqm_result.metadata.circuits))
84
88
  ]
85
89
 
86
90
  @staticmethod
@@ -194,7 +198,9 @@ class IQMJob(JobV1):
194
198
  # was created manually from a job_id. In that case retrieve circuit metadata from
195
199
  # RunResult.metadata.request.circuits[n].metadata
196
200
  if self.circuit_metadata is None and results.metadata.request is not None:
197
- self.circuit_metadata = [c.metadata for c in results.metadata.circuits]
201
+ self.circuit_metadata = [
202
+ c.metadata if isinstance(c, Circuit) else {} for c in results.metadata.circuits
203
+ ]
198
204
 
199
205
  result_dict = {
200
206
  "backend_name": None,
@@ -23,6 +23,7 @@ import warnings
23
23
 
24
24
  from iqm.iqm_client import (
25
25
  Circuit,
26
+ CircuitBatch,
26
27
  CircuitCompilationOptions,
27
28
  CircuitValidationError,
28
29
  IQMClient,
@@ -111,7 +112,7 @@ class IQMBackend(IQMBackendBase):
111
112
  run_request = self.create_run_request(run_input, **options)
112
113
  job_id = self.client.submit_run_request(run_request)
113
114
  job = IQMJob(self, str(job_id), shots=run_request.shots)
114
- job.circuit_metadata = [c.metadata for c in run_request.circuits]
115
+ job.circuit_metadata = [c.metadata if isinstance(c, Circuit) else {} for c in run_request.circuits]
115
116
  return job
116
117
 
117
118
  def create_run_request(
@@ -181,7 +182,7 @@ class IQMBackend(IQMBackendBase):
181
182
  if circuit_callback:
182
183
  circuit_callback(circuits)
183
184
 
184
- circuits_serialized: list[Circuit] = [self.serialize_circuit(circuit, qubit_mapping) for circuit in circuits]
185
+ circuits_serialized: CircuitBatch = [self.serialize_circuit(circuit, qubit_mapping) for circuit in circuits]
185
186
 
186
187
  if self._use_default_calibration_set:
187
188
  default_calset_id = self.client.get_dynamic_quantum_architecture(None).calibration_set_id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-client
3
- Version: 29.9.0
3
+ Version: 29.10.0
4
4
  Summary: Client library for accessing an IQM quantum computer
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>
6
6
  License: Apache License
@@ -0,0 +1 @@
1
+ 29.10.0
@@ -1 +0,0 @@
1
- 29.9.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