iqm-pulla 10.0.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.
@@ -763,7 +763,7 @@ def clean_schedule(schedules: Iterable[Schedule], builder: ScheduleBuilder) -> l
763
763
  @compiler_pass
764
764
  def build_playlist(schedules: Iterable[Schedule], builder: ScheduleBuilder) -> tuple[Playlist, dict[str, Any]]:
765
765
  """Build the playlist from the schedules."""
766
- playlist = builder.build_playlist(schedules)
766
+ playlist = builder.build_playlist(schedules)[0]
767
767
  return playlist, {"schedules": schedules} # save the schedules for building settings, debugging, etc
768
768
 
769
769
 
@@ -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.builder import CircuitOperation, Locus
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 Any, TypeAlias
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 Circuit as CPC_Circuit
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.builder import CircuitOperation
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 as CPC_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[CPC_Circuit]:
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
- CPC_Circuit(
64
+ Circuit(
87
65
  name=qiskit_circuit.name,
88
66
  instructions=tuple(
89
- map(
90
- _instruction_to_dataclass,
91
- serialize_instructions(
92
- qiskit_circuit,
93
- qubit_idx_to_name,
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[CPC_Circuit], Compiler]:
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
- run_request_iqm_circuits: list[Circuit] = [c for c in run_request.circuits if isinstance(c, (Circuit))]
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: 10.0.0
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,>=11
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,>=11 ; extra == 'notebook'
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,>=11 ; extra == 'qir'
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,>=11 ; extra == 'qiskit'
242
- Requires-Dist: iqm-client[qiskit] <31,>=30 ; extra == 'qiskit'
243
- Requires-Dist: iqm-client <31,>=30 ; extra == 'qiskit'
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
  #########
@@ -4,24 +4,24 @@ iqm/cpc/compiler/__init__.py,sha256=ieYyHzb2IyevDm5swU--rPMsh5GdUtLrw8773Cd0ens,
4
4
  iqm/cpc/compiler/compiler.py,sha256=paWwALMbLQwMBoujKMnUUfybwaoXXYBYHYPLZUXWoyQ,20442
5
5
  iqm/cpc/compiler/dd.py,sha256=j4onTod24RPxRwwsM3EMBBgX4hDO0k_nW9R762AocXo,21674
6
6
  iqm/cpc/compiler/errors.py,sha256=tz-8g1QtDvCAPmAjjCYK3FoULrazkpSTmXIvyqukaT4,1949
7
- iqm/cpc/compiler/standard_stages.py,sha256=JucA3Y2Vy_7mKmIh69vMN6rRFhhZ5rG8O9zTX3vWpzw,34557
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=_3sFYVoqqGH7XyBpYm2bLPnnz-1wiBuUee6WYdFJeXE,9992
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=yymQo4REHYcUOWgPxPYq9IixS9bBZ27LXLQgJhzET58,5400
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=SJK8N8xZyv9seXj1lJJfyt3YMht50VzUxzm8NiblSEw,11575
21
- iqm/pulla/utils_qiskit.py,sha256=4NTNDWICFh3B0v509w3CfBHrB-GzBm-2TMlKRfgkTTI,10485
22
- iqm_pulla-10.0.0.dist-info/AUTHORS.rst,sha256=iCStz7WP5Jk7uMnn9jRA4ybS14X4yeUW2SsWE-OTaRk,328
23
- iqm_pulla-10.0.0.dist-info/LICENSE.txt,sha256=cCj_biRA4Q8A77vxR8AuvAf-DZ5G79yxR_3lYY6TrmA,11333
24
- iqm_pulla-10.0.0.dist-info/METADATA,sha256=vbgt4u_7QaK0BVMs6MbmpOtL3x_k2oyLkeDMS-uW2-Q,17696
25
- iqm_pulla-10.0.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
26
- iqm_pulla-10.0.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
27
- iqm_pulla-10.0.0.dist-info/RECORD,,
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,,