iqm-pulla 10.1.0__py3-none-any.whl → 11.1.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/__init__.py CHANGED
@@ -14,26 +14,9 @@
14
14
  """IQM Circuit to Pulse Compiler.
15
15
 
16
16
  IQM Circuit to Pulse Compiler is a Python-based library for converting quantum circuits
17
- into :class:`instruction schedules <exa.pulse.pulse_schedule.PulseSchedule>`
18
- (which map ``Station Control`` controller names to their pulse playlists) and Station Control settings
17
+ into :class:`instruction schedules <iqm.pulse.playlist.schedule.Schedule>`
18
+ (which map ``Station Control`` controller names to lists of hardware instructions) and Station Control settings
19
19
  required for circuit execution, using the calibration data it is given.
20
20
  The generated schedules and settings can be sent to Station Control
21
21
  for execution on real or simulated quantum hardware.
22
-
23
- CPC is normally only accessed indirectly through Cocos or its reference client
24
- `IQM client <https://docs.meetiqm.com/iqm-client/index.html>`_,
25
- or a frontend such as
26
- `Cirq on IQM <https://docs.meetiqm.com/iqm-client/user_guide_cirq.html>`_ or
27
- `Qiskit on IQM <https://docs.meetiqm.com/iqm-client/user_guide_qiskit.html>`_.
28
22
  """
29
-
30
- # from importlib.metadata import PackageNotFoundError, version
31
-
32
- # try:
33
- # # Change here if project is renamed and does not equal the package name
34
- # DIST_NAME = "iqm-cocos"
35
- # __version__ = version(DIST_NAME)
36
- # except PackageNotFoundError: # pragma: no cover
37
- # __version__ = "unknown"
38
- # finally:
39
- # del version, PackageNotFoundError
@@ -20,7 +20,7 @@ can be executed by the IQM server on quantum hardware.
20
20
 
21
21
  from __future__ import annotations
22
22
 
23
- from collections.abc import Callable, Iterable
23
+ from collections.abc import Callable, Collection, Iterable
24
24
  from copy import deepcopy
25
25
  import functools
26
26
  import inspect
@@ -28,8 +28,10 @@ import logging
28
28
  from typing import TYPE_CHECKING, Any
29
29
 
30
30
  from opentelemetry import trace
31
+ from typing_extensions import deprecated
31
32
 
32
33
  from exa.common.data.setting_node import SettingNode
34
+ from exa.common.helpers.deprecation import format_deprecated
33
35
  from iqm.cpc.compiler.errors import CalibrationError, ClientError, InsufficientContextError
34
36
  from iqm.cpc.interface.compiler import (
35
37
  CircuitBoundaryMode,
@@ -187,13 +189,16 @@ class Compiler:
187
189
  Args:
188
190
  calibration_set: Calibration data.
189
191
  chip_topology: Physical layout and connectivity of the quantum chip.
190
- channel_properties: Channel properties.
191
- component_channels: Mapping between components and their control channels.
192
- component_mapping: Custom mapping of components. Defaults to None.
192
+ channel_properties: Control channel properties for the station.
193
+ component_channels: Mapping from QPU component name to a mapping from ``('drive', 'flux', 'readout')``
194
+ to the name of the control channel responsible for that function of the component.
195
+ component_mapping: Mapping of logical QPU component names to physical QPU component names.
196
+ ``None`` means the identity mapping.
193
197
  options: Circuit execution options.
194
198
  Defaults to STANDARD_CIRCUIT_EXECUTION_OPTIONS.
195
- stages: List of compilation stages. Defaults to None.
196
- Note that in the absence of stages, the compiler will not be ready to compile circuits.
199
+ stages: Compilation stages to use. ``None`` means none.
200
+ Note that meaningful circuit compilation requires at least some stages.
201
+ pp_stages: Post-processing stages to use. ``None`` means none.
197
202
  strict: If True, raises CalibrationError on calibration validation failures.
198
203
  If False, only logs warnings. Defaults to False.
199
204
 
@@ -202,7 +207,7 @@ class Compiler:
202
207
 
203
208
  """
204
209
 
205
- def __init__(
210
+ def __init__( # noqa: PLR0913
206
211
  self,
207
212
  *,
208
213
  calibration_set: CalibrationSet,
@@ -211,13 +216,15 @@ class Compiler:
211
216
  component_channels: dict[str, dict[str, str]],
212
217
  component_mapping: dict[str, str] | None = None,
213
218
  options: CircuitExecutionOptions = STANDARD_CIRCUIT_EXECUTION_OPTIONS,
214
- stages: list[CompilationStage] | None = None,
219
+ stages: Collection[CompilationStage] | None = None,
220
+ pp_stages: Collection[CompilationStage] | None = None,
215
221
  strict: bool = False, # consider extending to e.g. errors: Literal["raise", "warning", "ignore"] = "warning"
216
222
  ):
217
223
  self._calibration_set = calibration_set
218
224
  self.component_mapping = component_mapping
219
225
  self.options = options
220
226
  self.stages = stages or []
227
+ self.pp_stages = pp_stages or []
221
228
 
222
229
  self.builder: ScheduleBuilder = initialize_schedule_builder(
223
230
  calibration_set, chip_topology, channel_properties, component_channels
@@ -357,11 +364,12 @@ class Compiler:
357
364
  )
358
365
  self._refresh()
359
366
 
367
+ @deprecated(format_deprecated(old="`ready`", new=None, since="12.08.2025"))
360
368
  def ready(self) -> bool:
361
369
  """Check if the compiler is ready to compile circuits. The compiler is ready if at least one stage is defined, and
362
370
  all the stages are non-empty.
363
371
  """ # noqa: E501
364
- if len(self.stages) == 0:
372
+ if not self.stages:
365
373
  return False
366
374
  for stage in self.stages:
367
375
  if not stage.ready():
@@ -394,7 +402,7 @@ class Compiler:
394
402
  full: Iff True, also print the docstring of each pass function.
395
403
 
396
404
  """
397
- if len(self.stages) == 0:
405
+ if not self.stages:
398
406
  print("No stages defined.")
399
407
  return
400
408
 
@@ -409,7 +417,10 @@ class Compiler:
409
417
  print()
410
418
 
411
419
  def compiler_context(self) -> dict[str, Any]:
412
- """Return initial compiler context dictionary. Used automatically by :meth:`Compiler.compile`."""
420
+ """Return initial compiler context dictionary.
421
+
422
+ Used automatically by :meth:`compile`.
423
+ """
413
424
  return {
414
425
  "calibration_set": self._calibration_set,
415
426
  "builder": self.builder,
@@ -422,27 +433,66 @@ class Compiler:
422
433
  def compile(
423
434
  self, data: Iterable[Any], context: dict[str, Any] | None = None
424
435
  ) -> tuple[Iterable[Any], dict[str, Any]]:
425
- """Run all compiler stages. Initial context will be derived from :meth:`Compiler.compiler_context` unless a custom
436
+ """Run all compiler stages.
437
+
438
+ Initial context will be derived using :meth:`compiler_context` unless a custom
439
+ context dictionary is provided.
440
+
441
+ Args:
442
+ data: Circuits to be compiled.
443
+ context: Custom initial compiler context dictionary.
444
+
445
+ Returns:
446
+ Compiled ``data``, final context.
447
+
448
+ """
449
+ cpc_logger.info("Running compilation stages...")
450
+ return self.run_stages(self.stages, data, context or self.compiler_context())
451
+
452
+ def postprocess(
453
+ self, data: Iterable[Any], context: dict[str, Any] | None = None
454
+ ) -> tuple[Iterable[Any], dict[str, Any]]:
455
+ """Run all post-processing stages.
456
+
457
+ Initial context will be derived using :meth:`compiler_context` unless a custom
426
458
  context dictionary is provided.
427
459
 
428
460
  Args:
429
- data: An iterable of circuits to be compiled.
461
+ data: Any data, e.g. execution results derived from :meth:`Pulla.execute`
430
462
  context: Custom initial compiler context dictionary.
431
463
 
464
+ Returns:
465
+ Postprocessed ``data``, final context.
466
+
432
467
  """ # noqa: E501
433
- if not self.ready():
434
- raise RuntimeError("Compiler is not ready: no stages defined, or some stages have zero passes.")
468
+ cpc_logger.info("Running postprocessing stages...")
469
+ return self.run_stages(self.pp_stages, data, context or self.compiler_context())
470
+
471
+ def run_stages(
472
+ self, stages: Collection[CompilationStage], data: Iterable[Any], context: dict[str, Any]
473
+ ) -> tuple[Iterable[Any], dict[str, Any]]:
474
+ """Run the given stages in given order on the given data.
475
+
476
+ Args:
477
+ stages: Stages to run on ``data``.
478
+ data: The data to be processed.
479
+ context: Additional information that is passed to the first stage.
480
+ Each stage may make modifications to ``context`` before it is passed to the next stage.
435
481
 
436
- # Dictionary of context to be passed through all the passes
437
- if context is None:
438
- context = self.compiler_context()
482
+ Returns:
483
+ Processed data, final context.
439
484
 
440
- # Run the stages
485
+ """
486
+ if not stages:
487
+ raise RuntimeError("No stages defined.")
441
488
  for stage in self.stages:
489
+ if not stage.ready():
490
+ raise RuntimeError(f"Stage {stage.name} is not ready.")
491
+
492
+ for stage in stages:
442
493
  cpc_logger.info('Running stage "%s"...', stage.name)
443
494
  data, context = stage.run(data, context)
444
495
 
445
- cpc_logger.info("Compilation finished.")
446
496
  return data, context
447
497
 
448
498
  def build_settings(self, context: dict[str, Any], shots: int) -> tuple[SettingNode, dict[str, Any]]:
@@ -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.1.0
3
+ Version: 11.1.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
  #########
@@ -1,27 +1,27 @@
1
- iqm/cpc/__init__.py,sha256=qw_SFgwld1YOYYyBE-NSticm60xx5aCAw5LJJzjou8Y,1745
1
+ iqm/cpc/__init__.py,sha256=mml8qMgjIQcfcfumrYu2lIfl30ZPSwaN3adn8CdRd3w,1079
2
2
  iqm/cpc/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  iqm/cpc/compiler/__init__.py,sha256=ieYyHzb2IyevDm5swU--rPMsh5GdUtLrw8773Cd0ens,678
4
- iqm/cpc/compiler/compiler.py,sha256=paWwALMbLQwMBoujKMnUUfybwaoXXYBYHYPLZUXWoyQ,20442
4
+ iqm/cpc/compiler/compiler.py,sha256=YKCD_5xXJ8l_XCZftRFHmoqCpuCgqTGpgOLsz6srmQc,22398
5
5
  iqm/cpc/compiler/dd.py,sha256=j4onTod24RPxRwwsM3EMBBgX4hDO0k_nW9R762AocXo,21674
6
6
  iqm/cpc/compiler/errors.py,sha256=tz-8g1QtDvCAPmAjjCYK3FoULrazkpSTmXIvyqukaT4,1949
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=_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.1.0.dist-info/AUTHORS.rst,sha256=iCStz7WP5Jk7uMnn9jRA4ybS14X4yeUW2SsWE-OTaRk,328
23
- iqm_pulla-10.1.0.dist-info/LICENSE.txt,sha256=cCj_biRA4Q8A77vxR8AuvAf-DZ5G79yxR_3lYY6TrmA,11333
24
- iqm_pulla-10.1.0.dist-info/METADATA,sha256=cDHFIPpHWXyeYjePNu1h6jYRmCmElMg77wLtc-dxEqs,17696
25
- iqm_pulla-10.1.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
26
- iqm_pulla-10.1.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
27
- iqm_pulla-10.1.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.1.0.dist-info/AUTHORS.rst,sha256=iCStz7WP5Jk7uMnn9jRA4ybS14X4yeUW2SsWE-OTaRk,328
23
+ iqm_pulla-11.1.0.dist-info/LICENSE.txt,sha256=cCj_biRA4Q8A77vxR8AuvAf-DZ5G79yxR_3lYY6TrmA,11333
24
+ iqm_pulla-11.1.0.dist-info/METADATA,sha256=TCrfN86y-VD9EyR7t5rrwsB7RM-MltOQ0gpDdYXyqEg,17696
25
+ iqm_pulla-11.1.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
26
+ iqm_pulla-11.1.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
27
+ iqm_pulla-11.1.0.dist-info/RECORD,,