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.
- {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG.rst +8 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/PKG-INFO +1 -1
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/iqm_sampler.py +2 -2
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/iqm_client.py +3 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/models.py +10 -2
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/validation.py +6 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_job.py +9 -3
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_provider.py +3 -2
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/PKG-INFO +1 -1
- iqm_client-29.10.0/version.txt +1 -0
- iqm_client-29.9.0/version.txt +0 -1
- {iqm_client-29.9.0 → iqm_client-29.10.0}/AUTHORS.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_cirq-iqm.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_cortex-cli.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/CHANGELOG_qiskit-iqm.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/INTEGRATION_GUIDE.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/LICENSE.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/MANIFEST.in +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/README.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docbuild +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/API.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_static/images/favicon.ico +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_static/images/logo.png +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/authors.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/changelog.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/conf.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/index.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/integration_guide.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/license.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/readme.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_cirq.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_cli.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/docs/user_guide_qiskit.rst +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/pyproject.toml +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/base.in +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/base.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cirq.in +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cirq.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cli.in +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/cli.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/qiskit.in +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/requirements/qiskit.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/setup.cfg +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/setup.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/adonis.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/aphrodite.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/apollo.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/iqm_device.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/devices/iqm_device_metadata.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_adonis.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_apollo.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_common.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/demo_iqm_execution.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/examples/usage.ipynb +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/extended_qasm_parser.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/iqm_gates.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/optimizers.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/py.typed +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/serialize.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/cirq_iqm/transpiler.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/api.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/authentication.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/auth.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/cli.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/models.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/cli/token_manager.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/errors.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/py.typed +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/transpile.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/iqm_client/util.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/bell_measure.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/resonance_example.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/examples/transpile_example.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_adonis.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_aphrodite.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_apollo.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_deneb.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/fake_garnet.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/iqm_fake_backend.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_backend.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_circuit.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_circuit_validation.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_move_layout.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_naive_move_pass.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/iqm_transpilation.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/move_gate.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/py.typed +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/qiskit_to_iqm.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/transpiler_plugins.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/SOURCES.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/dependency_links.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/entry_points.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/requires.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/src/iqm_client.egg-info/top_level.txt +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/test +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/tests/__init__.py +0 -0
- {iqm_client-29.9.0 → iqm_client-29.10.0}/tests/conftest.py +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
(
|
|
83
|
-
|
|
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 = [
|
|
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:
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
29.10.0
|
iqm_client-29.9.0/version.txt
DELETED
|
@@ -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
|
|
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
|
|
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_client-29.9.0 → iqm_client-29.10.0}/src/iqm/qiskit_iqm/fake_backends/iqm_fake_backend.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
|
|
File without changes
|
|
File without changes
|