iqm-pulla 10.1.0__py3-none-any.whl → 11.0.0__py3-none-any.whl
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/cpc/interface/compiler.py +2 -12
- iqm/pulla/interface.py +2 -47
- iqm/pulla/utils_qir.py +1 -1
- iqm/pulla/utils_qiskit.py +10 -36
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/METADATA +7 -7
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/RECORD +10 -10
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/AUTHORS.rst +0 -0
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/LICENSE.txt +0 -0
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/WHEEL +0 -0
- {iqm_pulla-10.1.0.dist-info → iqm_pulla-11.0.0.dist-info}/top_level.txt +0 -0
iqm/cpc/interface/compiler.py
CHANGED
|
@@ -19,20 +19,10 @@ from enum import StrEnum
|
|
|
19
19
|
from typing import TypeAlias
|
|
20
20
|
|
|
21
21
|
from exa.common.data.setting_node import SettingNode
|
|
22
|
-
from iqm.pulse
|
|
22
|
+
from iqm.pulse import Circuit
|
|
23
|
+
from iqm.pulse.builder import Locus
|
|
23
24
|
from iqm.pulse.playlist.playlist import Playlist
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
@dataclass
|
|
27
|
-
class Circuit:
|
|
28
|
-
"""Quantum circuit to be executed."""
|
|
29
|
-
|
|
30
|
-
name: str
|
|
31
|
-
"""name of the circuit"""
|
|
32
|
-
instructions: tuple[CircuitOperation, ...]
|
|
33
|
-
"""operations comprising the circuit"""
|
|
34
|
-
|
|
35
|
-
|
|
36
26
|
CircuitBatch: TypeAlias = list[Circuit]
|
|
37
27
|
"""Type that represents a list of quantum circuits to be executed together in a single batch."""
|
|
38
28
|
|
iqm/pulla/interface.py
CHANGED
|
@@ -19,56 +19,11 @@ Many of these must be identical to those in iqm-client.
|
|
|
19
19
|
|
|
20
20
|
from dataclasses import dataclass
|
|
21
21
|
from enum import StrEnum
|
|
22
|
-
from typing import
|
|
22
|
+
from typing import TypeAlias
|
|
23
23
|
from uuid import UUID
|
|
24
24
|
|
|
25
|
-
from pydantic import BaseModel, Field
|
|
26
|
-
|
|
27
25
|
from exa.common.data.value import ObservationValue
|
|
28
|
-
from iqm.cpc.interface.compiler import
|
|
29
|
-
from iqm.cpc.interface.compiler import CircuitOperation, Locus
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class Instruction(BaseModel):
|
|
33
|
-
"""An instruction in a quantum circuit."""
|
|
34
|
-
|
|
35
|
-
name: str = Field(..., description="name of the quantum operation", examples=["measurement"])
|
|
36
|
-
"""name of the quantum operation"""
|
|
37
|
-
implementation: str | None = Field(None, description="name of the implementation")
|
|
38
|
-
"""name of the implementation"""
|
|
39
|
-
qubits: tuple[str, ...] = Field(
|
|
40
|
-
...,
|
|
41
|
-
description="names of the logical qubits the operation acts on",
|
|
42
|
-
examples=[("alice",)],
|
|
43
|
-
)
|
|
44
|
-
"""names of the logical qubits the operation acts on"""
|
|
45
|
-
args: dict[str, Any] = Field(
|
|
46
|
-
...,
|
|
47
|
-
description="arguments for the operation",
|
|
48
|
-
examples=[{"key": "m"}],
|
|
49
|
-
)
|
|
50
|
-
"""arguments for the operation"""
|
|
51
|
-
|
|
52
|
-
def to_dataclass(self) -> CircuitOperation:
|
|
53
|
-
"""Convert the model to a dataclass."""
|
|
54
|
-
return CircuitOperation(name=self.name, implementation=self.implementation, locus=self.qubits, args=self.args)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class Circuit(BaseModel):
|
|
58
|
-
"""Quantum circuit to be executed."""
|
|
59
|
-
|
|
60
|
-
name: str = Field(..., description="name of the circuit", examples=["test circuit"])
|
|
61
|
-
"""name of the circuit"""
|
|
62
|
-
instructions: tuple[Instruction, ...] = Field(..., description="instructions comprising the circuit")
|
|
63
|
-
"""instructions comprising the circuit"""
|
|
64
|
-
metadata: dict[str, Any] | None = Field(None, description="arbitrary metadata associated with the circuit")
|
|
65
|
-
"""arbitrary metadata associated with the circuit"""
|
|
66
|
-
|
|
67
|
-
def to_dataclass(self) -> CPC_Circuit:
|
|
68
|
-
"""Convert the model to a dataclass."""
|
|
69
|
-
return CPC_Circuit(
|
|
70
|
-
name=self.name, instructions=tuple(instruction.to_dataclass() for instruction in self.instructions)
|
|
71
|
-
)
|
|
26
|
+
from iqm.cpc.interface.compiler import Locus
|
|
72
27
|
|
|
73
28
|
|
|
74
29
|
class CHADRetrievalException(Exception):
|
iqm/pulla/utils_qir.py
CHANGED
|
@@ -39,7 +39,7 @@ from qiskit.providers import BackendV2
|
|
|
39
39
|
|
|
40
40
|
from iqm.cpc.compiler.compiler import Compiler
|
|
41
41
|
from iqm.cpc.interface.compiler import Circuit as CPC_Circuit
|
|
42
|
-
from iqm.pulse
|
|
42
|
+
from iqm.pulse import CircuitOperation
|
|
43
43
|
|
|
44
44
|
qir_logger = logging.getLogger(__name__)
|
|
45
45
|
|
iqm/pulla/utils_qiskit.py
CHANGED
|
@@ -19,7 +19,6 @@ from collections import Counter
|
|
|
19
19
|
from collections.abc import Collection, Sequence
|
|
20
20
|
from typing import TYPE_CHECKING
|
|
21
21
|
|
|
22
|
-
from iqm.iqm_client import Circuit
|
|
23
22
|
from iqm.qiskit_iqm.iqm_backend import IQMBackendBase
|
|
24
23
|
from iqm.qiskit_iqm.iqm_job import IQMJob
|
|
25
24
|
from iqm.qiskit_iqm.qiskit_to_iqm import serialize_instructions
|
|
@@ -27,13 +26,10 @@ from qiskit import QuantumCircuit
|
|
|
27
26
|
from qiskit.providers import JobStatus, JobV1, Options
|
|
28
27
|
from qiskit.result import Counts, Result
|
|
29
28
|
|
|
30
|
-
from iqm.cpc.interface.compiler import Circuit
|
|
31
|
-
from iqm.cpc.interface.compiler import CircuitExecutionOptions, HeraldingMode
|
|
29
|
+
from iqm.cpc.interface.compiler import Circuit, CircuitExecutionOptions, HeraldingMode
|
|
32
30
|
from iqm.pulla.interface import StationControlResult, TaskStatus
|
|
33
|
-
from iqm.pulse.builder import CircuitOperation
|
|
34
31
|
|
|
35
32
|
if TYPE_CHECKING:
|
|
36
|
-
from iqm.iqm_client import Instruction
|
|
37
33
|
from iqm.qiskit_iqm.iqm_backend import DynamicQuantumArchitecture
|
|
38
34
|
from iqm.qiskit_iqm.iqm_provider import IQMBackend
|
|
39
35
|
|
|
@@ -41,29 +37,11 @@ if TYPE_CHECKING:
|
|
|
41
37
|
from iqm.pulla.pulla import Pulla
|
|
42
38
|
|
|
43
39
|
|
|
44
|
-
def _instruction_to_dataclass(instruction: Instruction) -> CircuitOperation:
|
|
45
|
-
"""Convert the iqm-client model to an iqm-pulse dataclass."""
|
|
46
|
-
return CircuitOperation(
|
|
47
|
-
name=instruction.name,
|
|
48
|
-
implementation=instruction.implementation,
|
|
49
|
-
locus=instruction.qubits,
|
|
50
|
-
args=instruction.args,
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _circuit_to_dataclass(circuit: Circuit) -> CPC_Circuit:
|
|
55
|
-
"""Convert the iqm-client model to a CPC dataclass."""
|
|
56
|
-
return CPC_Circuit(
|
|
57
|
-
name=circuit.name,
|
|
58
|
-
instructions=tuple(_instruction_to_dataclass(instruction) for instruction in circuit.instructions),
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
|
|
62
40
|
def qiskit_circuits_to_pulla(
|
|
63
41
|
qiskit_circuits: QuantumCircuit | Sequence[QuantumCircuit],
|
|
64
42
|
qubit_idx_to_name: dict[int, str],
|
|
65
43
|
custom_gates: Collection[str] = (),
|
|
66
|
-
) -> list[
|
|
44
|
+
) -> list[Circuit]:
|
|
67
45
|
"""Convert Qiskit quantum circuits into IQM Pulse quantum circuits.
|
|
68
46
|
|
|
69
47
|
Lower-level method, you may want to use :func:`qiskit_to_pulla` instead.
|
|
@@ -83,17 +61,14 @@ def qiskit_circuits_to_pulla(
|
|
|
83
61
|
qiskit_circuits = [qiskit_circuits]
|
|
84
62
|
|
|
85
63
|
return [
|
|
86
|
-
|
|
64
|
+
Circuit(
|
|
87
65
|
name=qiskit_circuit.name,
|
|
88
66
|
instructions=tuple(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
custom_gates,
|
|
95
|
-
),
|
|
96
|
-
)
|
|
67
|
+
serialize_instructions(
|
|
68
|
+
qiskit_circuit,
|
|
69
|
+
qubit_idx_to_name,
|
|
70
|
+
custom_gates,
|
|
71
|
+
),
|
|
97
72
|
),
|
|
98
73
|
)
|
|
99
74
|
for qiskit_circuit in qiskit_circuits
|
|
@@ -104,7 +79,7 @@ def qiskit_to_pulla(
|
|
|
104
79
|
pulla: Pulla,
|
|
105
80
|
backend: IQMBackend,
|
|
106
81
|
qiskit_circuits: QuantumCircuit | Sequence[QuantumCircuit],
|
|
107
|
-
) -> tuple[list[
|
|
82
|
+
) -> tuple[list[Circuit], Compiler]:
|
|
108
83
|
"""Convert transpiled Qiskit quantum circuits to IQM Pulse quantum circuits.
|
|
109
84
|
|
|
110
85
|
Also provides the Compiler object for compiling them, with the correct
|
|
@@ -140,8 +115,7 @@ def qiskit_to_pulla(
|
|
|
140
115
|
|
|
141
116
|
# We can be certain run_request contains only Circuit objects, because we created it
|
|
142
117
|
# right in this method with qiskit.QuantumCircuit objects
|
|
143
|
-
|
|
144
|
-
circuits = [_circuit_to_dataclass(c) for c in run_request_iqm_circuits]
|
|
118
|
+
circuits: list[Circuit] = [c for c in run_request.circuits if isinstance(c, Circuit)]
|
|
145
119
|
return circuits, compiler
|
|
146
120
|
|
|
147
121
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-pulla
|
|
3
|
-
Version:
|
|
3
|
+
Version: 11.0.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
|
|
@@ -218,29 +218,29 @@ License-File: LICENSE.txt
|
|
|
218
218
|
License-File: AUTHORS.rst
|
|
219
219
|
Requires-Dist: iqm-exa-common <27,>=26
|
|
220
220
|
Requires-Dist: iqm-station-control-client <10,>=9
|
|
221
|
-
Requires-Dist: iqm-pulse <12
|
|
221
|
+
Requires-Dist: iqm-pulse <13,>=12
|
|
222
222
|
Requires-Dist: iqm-data-definitions <3.0,>=2.13
|
|
223
223
|
Requires-Dist: pylatexenc ==2.10
|
|
224
224
|
Requires-Dist: pydantic <3.0,>=2.10.4
|
|
225
225
|
Provides-Extra: notebook
|
|
226
226
|
Requires-Dist: iqm-exa-common <27,>=26 ; extra == 'notebook'
|
|
227
227
|
Requires-Dist: iqm-station-control-client <10,>=9 ; extra == 'notebook'
|
|
228
|
-
Requires-Dist: iqm-pulse <12
|
|
228
|
+
Requires-Dist: iqm-pulse <13,>=12 ; extra == 'notebook'
|
|
229
229
|
Requires-Dist: notebook <7,>=6.4.11 ; extra == 'notebook'
|
|
230
230
|
Requires-Dist: matplotlib <4,>=3.6.3 ; extra == 'notebook'
|
|
231
231
|
Requires-Dist: nbclient ~=0.5.10 ; extra == 'notebook'
|
|
232
232
|
Provides-Extra: qir
|
|
233
233
|
Requires-Dist: iqm-exa-common <27,>=26 ; extra == 'qir'
|
|
234
234
|
Requires-Dist: iqm-station-control-client <10,>=9 ; extra == 'qir'
|
|
235
|
-
Requires-Dist: iqm-pulse <12
|
|
235
|
+
Requires-Dist: iqm-pulse <13,>=12 ; extra == 'qir'
|
|
236
236
|
Requires-Dist: iqm-pyqir ==0.12.0 ; extra == 'qir'
|
|
237
237
|
Requires-Dist: iqm-qiskit-qir ==0.8.0 ; extra == 'qir'
|
|
238
238
|
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
|
-
Requires-Dist: iqm-pulse <12
|
|
242
|
-
Requires-Dist: iqm-client
|
|
243
|
-
Requires-Dist: iqm-client <31
|
|
241
|
+
Requires-Dist: iqm-pulse <13,>=12 ; extra == 'qiskit'
|
|
242
|
+
Requires-Dist: iqm-client <32,>=31 ; extra == 'qiskit'
|
|
243
|
+
Requires-Dist: iqm-client[qiskit] <32,>=31 ; extra == 'qiskit'
|
|
244
244
|
|
|
245
245
|
IQM Pulla
|
|
246
246
|
#########
|
|
@@ -7,21 +7,21 @@ iqm/cpc/compiler/errors.py,sha256=tz-8g1QtDvCAPmAjjCYK3FoULrazkpSTmXIvyqukaT4,19
|
|
|
7
7
|
iqm/cpc/compiler/standard_stages.py,sha256=j7xSfmV-qgXAnQg21GbvUIbNnBznafQgSc5RrHOWbRA,34560
|
|
8
8
|
iqm/cpc/compiler/station_settings.py,sha256=l4cJYcNtMar_BoChJaUbmVfpXv7liTCeLWpSv7fAipg,16903
|
|
9
9
|
iqm/cpc/interface/__init__.py,sha256=mvhNx1I9K5Sg40CwPntWj35M3Bni__23PWEw_qYaXtQ,611
|
|
10
|
-
iqm/cpc/interface/compiler.py,sha256=
|
|
10
|
+
iqm/cpc/interface/compiler.py,sha256=zxUyalyiBIQA9EUK_fDGNq0SZ5OwfxQdB6Xk5BDDMVk,9797
|
|
11
11
|
iqm/pulla/__init__.py,sha256=fj5Qh8R9K-z6q5g9-CySBZsG8d33nU7hCHrqIIB8_-0,901
|
|
12
12
|
iqm/pulla/calibration.py,sha256=c_SNlTxXC0y-ahDY7JY53N7SofU5WUWMrNBogtdfHl4,4523
|
|
13
|
-
iqm/pulla/interface.py,sha256=
|
|
13
|
+
iqm/pulla/interface.py,sha256=QquVKhOl2fs2V03fqQJq5sIEaIGiYvetPKKNz_fWH54,3570
|
|
14
14
|
iqm/pulla/pulla.py,sha256=RWsUgtCy_wAgm8TDk6uZEmaG_v-lTBFzx43qpA1CfQU,14243
|
|
15
15
|
iqm/pulla/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
16
|
iqm/pulla/quantum_architecture.py,sha256=mJH9e9fdkblg6LrgN7qd-Ui3Igawf-hGd2Z7ZclQg04,6260
|
|
17
17
|
iqm/pulla/utils.py,sha256=xVu4jLlSHX-_YQT1kB-zBiGy4wNy0YyOKZg4AGMB5DE,24748
|
|
18
18
|
iqm/pulla/utils_cirq.py,sha256=VtdO356D2RAh2lSVdaPm3ClJ9-nvC4jzhR9hP5QSQhI,793
|
|
19
19
|
iqm/pulla/utils_dd.py,sha256=SxYAuRBgvYELKjeXpFbP4mM0xCCivDk7WUHw7oEXfMo,1695
|
|
20
|
-
iqm/pulla/utils_qir.py,sha256=
|
|
21
|
-
iqm/pulla/utils_qiskit.py,sha256=
|
|
22
|
-
iqm_pulla-
|
|
23
|
-
iqm_pulla-
|
|
24
|
-
iqm_pulla-
|
|
25
|
-
iqm_pulla-
|
|
26
|
-
iqm_pulla-
|
|
27
|
-
iqm_pulla-
|
|
20
|
+
iqm/pulla/utils_qir.py,sha256=uNEiqBczv7rX8tAqcg7TX-si0P-ZdDcPTMOVfi5eb28,11567
|
|
21
|
+
iqm/pulla/utils_qiskit.py,sha256=pbb2fEJAdxqd6hW9_Qgvpvy0P2H81zTJ1QLahe4Tx6U,9482
|
|
22
|
+
iqm_pulla-11.0.0.dist-info/AUTHORS.rst,sha256=iCStz7WP5Jk7uMnn9jRA4ybS14X4yeUW2SsWE-OTaRk,328
|
|
23
|
+
iqm_pulla-11.0.0.dist-info/LICENSE.txt,sha256=cCj_biRA4Q8A77vxR8AuvAf-DZ5G79yxR_3lYY6TrmA,11333
|
|
24
|
+
iqm_pulla-11.0.0.dist-info/METADATA,sha256=qTQ8MrkHmnjQ8DCXxFoNpZpepIo1t9aleRoyAi6pfsU,17696
|
|
25
|
+
iqm_pulla-11.0.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
|
|
26
|
+
iqm_pulla-11.0.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
|
|
27
|
+
iqm_pulla-11.0.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|