qadence 1.9.1__py3-none-any.whl → 1.10.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.
@@ -0,0 +1,235 @@
1
+ from __future__ import annotations
2
+
3
+ import json
4
+ import time
5
+ from dataclasses import dataclass
6
+ from enum import Enum
7
+ from typing import Any
8
+
9
+ from pasqal_cloud import SDK
10
+ from pasqal_cloud import Workload as WorkloadResult
11
+ from torch import Tensor
12
+
13
+ from qadence import AbstractBlock, BackendName, QuantumCircuit, QuantumModel, serialize
14
+
15
+
16
+ class ResultType(Enum):
17
+ RUN = "run"
18
+ SAMPLE = "sample"
19
+ EXPECTATION = "expectation"
20
+
21
+
22
+ @dataclass(frozen=True)
23
+ class WorkloadSpec:
24
+ """Specification of a workload to be executed on Pasqal Cloud.
25
+
26
+ This data class defines a single workload specification that is to be executed on Pasqal's
27
+ cloud platform.
28
+
29
+ Args:
30
+ circuit: The quantum circuit to be executed.
31
+ backend: The backend to execute the workload on. Not all backends are available on the
32
+ cloud platform. Currently the supported backend is `BackendName.PYQTORCH`.
33
+ result_types: The types of result to compute for this workload. The circuit will be run for
34
+ all result types specified here one by one.
35
+ parameter_values: If the quantum circuit has feature parameters, values for those need to
36
+ be provided. In the case there are only variational parameters, this field is
37
+ optional. In the case there are no parameters, this field needs to be `None`. The
38
+ parameter values can be either a tensor of dimension 0 or 1, which can differ per
39
+ parameter. For parameters that are an array, i.e. dimension 1, all array lengths should
40
+ be equal.
41
+ observable: Observable that is used when `result_types` contains `ResultType.EXPECTATION`.
42
+ The observable field is mandatory in this case. If not, the value of this field will
43
+ be ignored. Only a single observable can be passed for cloud submission; providing a
44
+ list of observables is not supported.
45
+ """
46
+
47
+ circuit: QuantumCircuit
48
+ backend: BackendName | str
49
+ result_types: list[ResultType]
50
+ parameter_values: dict[str, Tensor] | None = None
51
+ observable: AbstractBlock | None = None
52
+
53
+ def __post_init__(self) -> None:
54
+ if ResultType.EXPECTATION in self.result_types and self.observable is None:
55
+ raise ValueError(
56
+ "When an expectation result is requested, the observable field is mandatory"
57
+ )
58
+ self._validate_parameter_values()
59
+
60
+ def _validate_parameter_values(self) -> None:
61
+ if self.parameter_values is None:
62
+ return
63
+ parameter_sizes = [value.size() for value in list(self.parameter_values.values())]
64
+ if all(len(size) > 1 for size in parameter_sizes):
65
+ raise ValueError("The dimension of the parameters in parameter_values must be 0 or 1")
66
+ parameter_lengths = [size[0] for size in parameter_sizes if len(size) == 1]
67
+ if not all(item == parameter_lengths[0] for item in parameter_lengths):
68
+ raise ValueError("All parameter values that are arrays, should have the same length")
69
+
70
+
71
+ def get_spec_from_model(
72
+ model: QuantumModel,
73
+ result_types: list[ResultType],
74
+ parameter_values: dict[str, Tensor] | None = None,
75
+ observable: AbstractBlock | None = None,
76
+ ) -> WorkloadSpec:
77
+ """Creates a `WorkloadSpec` from a quantum model.
78
+
79
+ This function creates a `WorkloadSpec` from a `QuantumModel` and the other arguments provided.
80
+ The circuit, that is extracted from the model, is the original circuit that was used to
81
+ initialize the model, not the backend converted circuit in `model.circuit`. The backend set in
82
+ the model will be used in the workload specification.
83
+
84
+ It is important to note that in case there is an observable defined in the model, it is ignored
85
+ in the workload specification. To provide an observable to the workload specification, it is
86
+ only possible to set it in the observable argument of this function.
87
+
88
+ Args:
89
+ model: The quantum model that defines the circuit and backend for the workload spec.
90
+ result_types: A list of result types that is requested in this workload.
91
+ parameter_values: The parameter values that should be used during execution of the
92
+ workload.
93
+ observable: Observable that is used when `result_types` contains `ResultType.EXPECTATION`.
94
+ The observable field is mandatory in this case. If not, the value of this field will
95
+ be ignored. Only a single observable can be passed for cloud submission; providing a
96
+ list of observables is not supported.
97
+
98
+ Returns:
99
+ A `WorkloadSpec` instance based on the quantum model passed to this function.
100
+ """
101
+ circuit = model._circuit.original
102
+ backend = model._backend_name
103
+ return WorkloadSpec(circuit, backend, result_types, parameter_values, observable)
104
+
105
+
106
+ @dataclass(frozen=True)
107
+ class WorkloadSpecJSON:
108
+ backend_type: str
109
+ config: dict[str, Any]
110
+ workload_type = "qadence_circuit"
111
+
112
+
113
+ def _parameter_values_to_json(parameter_values: dict[str, Tensor] | None) -> str:
114
+ if parameter_values is None:
115
+ return json.dumps(dict())
116
+ return json.dumps({key: value.tolist() for key, value in parameter_values.items()})
117
+
118
+
119
+ def _workload_spec_to_json(workload: WorkloadSpec) -> WorkloadSpecJSON:
120
+ """Serializes a `WorkloadSpec` into JSON format.
121
+
122
+ Args:
123
+ workload: A `WorkloadSpec` object, defining the specification of the workload that needs to
124
+ be uploaded.
125
+
126
+ Returns:
127
+ Workload specification in JSON format.
128
+ """
129
+ circuit_json = json.dumps(serialize(workload.circuit))
130
+ result_types_json = [item.value for item in workload.result_types]
131
+ config = {
132
+ "circuit": circuit_json,
133
+ "result_types": result_types_json,
134
+ "c_values": _parameter_values_to_json(workload.parameter_values),
135
+ }
136
+
137
+ if workload.observable is not None:
138
+ config["observable"] = json.dumps(serialize(workload.observable))
139
+
140
+ return WorkloadSpecJSON(str(workload.backend), config)
141
+
142
+
143
+ def submit_workload(connection: SDK, workload: WorkloadSpec) -> str:
144
+ """Uploads a workload to Pasqal's Cloud and returns the created workload ID.
145
+
146
+ Args:
147
+ connection: A `pasqal_cloud.SDK` instance which is used to connect to the cloud.
148
+ workload: A `WorkloadSpec` object, defining the specification of the workload that needs to
149
+ be uploaded.
150
+
151
+ Returns:
152
+ A workload id as a `str`.
153
+ """
154
+ workload_json = _workload_spec_to_json(workload)
155
+ remote_workload = connection.create_workload(
156
+ workload_json.workload_type, workload_json.backend_type, workload_json.config
157
+ )
158
+ workload_id: str = remote_workload.id
159
+ return workload_id
160
+
161
+
162
+ class WorkloadNotDoneError(Exception):
163
+ """Is raised if a workload is not yet finished running on remote."""
164
+
165
+ pass
166
+
167
+
168
+ class WorkloadStoppedError(Exception):
169
+ """Is raised when a workload has stopped running on remote for some reason."""
170
+
171
+ pass
172
+
173
+
174
+ def check_status(connection: SDK, workload_id: str) -> WorkloadResult:
175
+ """Checks if the workload is successfully finished on remote connection.
176
+
177
+ Args:
178
+ connection: A `pasqal_cloud.SDK` instance which is used to connect to the cloud.
179
+ workload_id: the id `str` that is associated with the workload.
180
+
181
+ Raises:
182
+ WorkloadNotDoneError: Is raised when the workload status is "PENDING", "RUNNING" or
183
+ "PAUSED".
184
+ WorkloadStoppedError: Is raise when the workload status is "CANCELED", "TIMED_OUT" or
185
+ "ERROR".
186
+ ValueError: Is raised when the workload status has an unsupported value.
187
+
188
+ Returns:
189
+ The workload result if its status is "DONE" as a `pasqal_cloud.Workload` object.
190
+ """
191
+ # TODO Make the function return a "nice" result object
192
+ result = connection.get_workload(workload_id)
193
+ if result.status == "DONE":
194
+ return result
195
+ if result.status in ("PENDING", "RUNNING", "PAUSED"):
196
+ raise WorkloadNotDoneError(
197
+ f"Workload with id {workload_id} is not yet finished, the status is {result.status}"
198
+ )
199
+ if result.status in ("CANCELED", "TIMED_OUT", "ERROR"):
200
+ message = f"Workload with id {workload_id} couldn't finish, the status is {result.status}."
201
+ if result.status == "ERROR":
202
+ message += f"The following error(s) occurred {result.errors}"
203
+ raise WorkloadStoppedError(message)
204
+ raise ValueError(
205
+ f"Undefined workload status ({result.status}) was returned for workload ({result.id})"
206
+ )
207
+
208
+
209
+ def get_result(
210
+ connection: SDK, workload_id: str, timeout: float = 60.0, refresh_time: float = 1.0
211
+ ) -> WorkloadResult:
212
+ """Repeatedly checks if a workload has finished and returns the result.
213
+
214
+ Args:
215
+ connection: A `pasqal_cloud.SDK` instance which is used to connect to the cloud.
216
+ workload_id: the id `str` that is associated with the workload.
217
+ timeout: Time in seconds after which the function times out. Defaults to 60.0.
218
+ refresh_time: Time in seconds after which the remote is requested to update the status
219
+ again, when the workload is not finished yet. Defaults to 1.0.
220
+
221
+ Raises:
222
+ TimeoutError: _description_
223
+
224
+ Returns:
225
+ The workload result if its status is "DONE" as a `pasqal_cloud.Workload` object.
226
+ """
227
+ max_refresh_count = int(timeout // refresh_time)
228
+ for _ in range(max_refresh_count):
229
+ try:
230
+ result = check_status(connection, workload_id)
231
+ except WorkloadNotDoneError:
232
+ time.sleep(refresh_time)
233
+ continue
234
+ return result
235
+ raise TimeoutError("Request timed out because it wasn't finished in the specified time. ")
qadence/states.py CHANGED
@@ -6,6 +6,7 @@ from typing import List
6
6
 
7
7
  import torch
8
8
  from numpy.typing import ArrayLike
9
+ from pyqtorch.utils import DensityMatrix
9
10
  from torch import Tensor, concat
10
11
  from torch.distributions import Categorical, Distribution
11
12
 
@@ -37,6 +38,8 @@ __all__ = [
37
38
  "is_normalized",
38
39
  "rand_bitstring",
39
40
  "equivalent_state",
41
+ "DensityMatrix",
42
+ "density_mat",
40
43
  ]
41
44
 
42
45
  ATOL_64 = 1e-14 # 64 bit precision
@@ -319,6 +322,24 @@ def random_state(
319
322
  return state
320
323
 
321
324
 
325
+ # DENSITY MATRIX
326
+
327
+
328
+ def density_mat(state: Tensor) -> DensityMatrix:
329
+ """
330
+ Computes the density matrix from a pure state vector.
331
+
332
+ Arguments:
333
+ state: The pure state vector :math:`|\\psi\\rangle`.
334
+
335
+ Returns:
336
+ Tensor: The density matrix :math:`\\rho = |\psi \\rangle \\langle\\psi|`.
337
+ """
338
+ if isinstance(state, DensityMatrix):
339
+ return state
340
+ return DensityMatrix(torch.einsum("bi,bj->bij", (state, state.conj())))
341
+
342
+
322
343
  # BLOCKS
323
344
 
324
345
 
@@ -11,13 +11,13 @@ from qadence.types import LTSOrder
11
11
 
12
12
 
13
13
  @overload
14
- def digitalize(circuit: QuantumCircuit, approximation: LTSOrder = LTSOrder.BASIC) -> QuantumCircuit:
15
- ...
14
+ def digitalize(
15
+ circuit: QuantumCircuit, approximation: LTSOrder = LTSOrder.BASIC
16
+ ) -> QuantumCircuit: ...
16
17
 
17
18
 
18
19
  @overload
19
- def digitalize(block: AbstractBlock, approximation: LTSOrder = LTSOrder.BASIC) -> AbstractBlock:
20
- ...
20
+ def digitalize(block: AbstractBlock, approximation: LTSOrder = LTSOrder.BASIC) -> AbstractBlock: ...
21
21
 
22
22
 
23
23
  @singledispatch
@@ -51,13 +51,13 @@ def _flat_blocks(block: AbstractBlock, T: Type) -> Generator:
51
51
  @overload
52
52
  def flatten(
53
53
  circuit: QuantumCircuit, types: list = [ChainBlock, KronBlock, AddBlock]
54
- ) -> QuantumCircuit:
55
- ...
54
+ ) -> QuantumCircuit: ...
56
55
 
57
56
 
58
57
  @overload
59
- def flatten(block: AbstractBlock, types: list = [ChainBlock, KronBlock, AddBlock]) -> AbstractBlock:
60
- ...
58
+ def flatten(
59
+ block: AbstractBlock, types: list = [ChainBlock, KronBlock, AddBlock]
60
+ ) -> AbstractBlock: ...
61
61
 
62
62
 
63
63
  @singledispatch
@@ -49,33 +49,27 @@ def reassign(block: AbstractBlock, qubit_map: dict[int, int]) -> AbstractBlock:
49
49
 
50
50
 
51
51
  @overload
52
- def invert_endianness(wf: Tensor) -> Tensor:
53
- ...
52
+ def invert_endianness(wf: Tensor) -> Tensor: ...
54
53
 
55
54
 
56
55
  @overload
57
- def invert_endianness(arr: np.ndarray) -> np.ndarray:
58
- ...
56
+ def invert_endianness(arr: np.ndarray) -> np.ndarray: ...
59
57
 
60
58
 
61
59
  @overload
62
- def invert_endianness(cntr: Counter) -> Counter:
63
- ...
60
+ def invert_endianness(cntr: Counter) -> Counter: ...
64
61
 
65
62
 
66
63
  @overload
67
- def invert_endianness(cntrs: list) -> list:
68
- ...
64
+ def invert_endianness(cntrs: list) -> list: ...
69
65
 
70
66
 
71
67
  @overload
72
- def invert_endianness(circuit: QuantumCircuit, n_qubits: int) -> QuantumCircuit:
73
- ...
68
+ def invert_endianness(circuit: QuantumCircuit, n_qubits: int) -> QuantumCircuit: ...
74
69
 
75
70
 
76
71
  @overload
77
- def invert_endianness(block: AbstractBlock, n_qubits: int, in_place: bool) -> AbstractBlock:
78
- ...
72
+ def invert_endianness(block: AbstractBlock, n_qubits: int, in_place: bool) -> AbstractBlock: ...
79
73
 
80
74
 
81
75
  @singledispatch
@@ -12,15 +12,13 @@ BlockOrCirc = TypeVar("BlockOrCirc", AbstractBlock, QuantumCircuit)
12
12
  @overload
13
13
  def transpile(
14
14
  *fs: Callable[[AbstractBlock], AbstractBlock]
15
- ) -> Callable[[AbstractBlock], AbstractBlock]:
16
- ...
15
+ ) -> Callable[[AbstractBlock], AbstractBlock]: ...
17
16
 
18
17
 
19
18
  @overload
20
19
  def transpile(
21
20
  *fs: Callable[[QuantumCircuit], QuantumCircuit]
22
- ) -> Callable[[QuantumCircuit], QuantumCircuit]:
23
- ...
21
+ ) -> Callable[[QuantumCircuit], QuantumCircuit]: ...
24
22
 
25
23
 
26
24
  def transpile(*fs: Callable) -> Callable:
qadence/types.py CHANGED
@@ -9,7 +9,7 @@ import numpy as np
9
9
  import sympy
10
10
  from matplotlib.figure import Figure
11
11
  from numpy.typing import ArrayLike
12
- from pyqtorch.noise import NoiseType as DigitalNoise
12
+ from pyqtorch.noise import DigitalNoiseType as DigitalNoise
13
13
  from pyqtorch.noise.readout import WhiteNoise
14
14
  from pyqtorch.utils import DropoutMode, SolverType
15
15
  from torch import Tensor, pi
@@ -1,9 +1,10 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: qadence
3
- Version: 1.9.1
3
+ Version: 1.10.0
4
4
  Summary: Pasqal interface for circuit-based quantum computing SDKs
5
5
  Author-email: Aleksander Wennersteen <aleksander.wennersteen@pasqal.com>, Gert-Jan Both <gert-jan.both@pasqal.com>, Niklas Heim <niklas.heim@pasqal.com>, Mario Dagrada <mario.dagrada@pasqal.com>, Vincent Elfving <vincent.elfving@pasqal.com>, Dominik Seitz <dominik.seitz@pasqal.com>, Roland Guichard <roland.guichard@pasqal.com>, "Joao P. Moutinho" <joao.moutinho@pasqal.com>, Vytautas Abramavicius <vytautas.abramavicius@pasqal.com>, Gergana Velikova <gergana.velikova@pasqal.com>, Eduardo Maschio <eduardo.maschio@pasqal.com>, Smit Chaudhary <smit.chaudhary@pasqal.com>, Ignacio Fernández Graña <ignacio.fernandez-grana@pasqal.com>, Charles Moussa <charles.moussa@pasqal.com>, Giorgio Tosti Balducci <giorgio.tosti-balducci@pasqal.com>, Daniele Cucurachi <daniele.cucurachi@pasqal.com>
6
6
  License: Apache 2.0
7
+ License-File: LICENSE
7
8
  Classifier: License :: OSI Approved :: Apache Software License
8
9
  Classifier: Programming Language :: Python
9
10
  Classifier: Programming Language :: Python :: 3
@@ -21,7 +22,7 @@ Requires-Dist: matplotlib
21
22
  Requires-Dist: nevergrad
22
23
  Requires-Dist: numpy
23
24
  Requires-Dist: openfermion
24
- Requires-Dist: pyqtorch==1.6.0
25
+ Requires-Dist: pyqtorch==1.7.0
25
26
  Requires-Dist: pyyaml
26
27
  Requires-Dist: rich
27
28
  Requires-Dist: scipy
@@ -53,9 +54,9 @@ Requires-Dist: mlflow; extra == 'mlflow'
53
54
  Provides-Extra: protocols
54
55
  Requires-Dist: qadence-protocols; extra == 'protocols'
55
56
  Provides-Extra: pulser
56
- Requires-Dist: pasqal-cloud==0.12.5; extra == 'pulser'
57
- Requires-Dist: pulser-core==1.1.1; extra == 'pulser'
58
- Requires-Dist: pulser-simulation==1.1.1; extra == 'pulser'
57
+ Requires-Dist: pasqal-cloud==0.12.7; extra == 'pulser'
58
+ Requires-Dist: pulser-core==1.2.0; extra == 'pulser'
59
+ Requires-Dist: pulser-simulation==1.2.0; extra == 'pulser'
59
60
  Provides-Extra: visualization
60
61
  Requires-Dist: graphviz; extra == 'visualization'
61
62
  Description-Content-Type: text/markdown
@@ -80,6 +81,8 @@ programs** with tunable qubit interactions and arbitrary register topologies rea
80
81
  [![Documentation](https://github.com/pasqal-io/qadence/actions/workflows/build_docs.yml/badge.svg)](https://pasqal-io.github.io/qadence/latest)
81
82
  [![Pypi](https://badge.fury.io/py/qadence.svg)](https://pypi.org/project/qadence/)
82
83
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
84
+ ![Coverage](https://img.shields.io/codecov/c/github/pasqal-io/qadence?style=flat-square)
85
+
83
86
 
84
87
  ## Feature highlights
85
88
 
@@ -4,39 +4,40 @@ qadence/circuit.py,sha256=r8QvzLWHvavqLOlNstq8aHg6UpKmPClEDoZVBkk-tzY,6970
4
4
  qadence/decompose.py,sha256=C4LYia_GcC9Rx3QO0ZLWTI9dN63a8WTEAXO0ZVQWuiE,5221
5
5
  qadence/divergences.py,sha256=JhpELhWSnuDvQxa9hJp_DE3EQg2Ban-Ta0mHZ_fVrHg,1832
6
6
  qadence/execution.py,sha256=SoB5n8mRQ6mxY9JqnqrrU5hY-M72WQOpnZC25PBM_dA,9670
7
- qadence/extensions.py,sha256=Fyj8WweDNbtZc6snZ2y7zLL-jBOvi7InMYElbC2gNmQ,6084
7
+ qadence/extensions.py,sha256=Bx2cMsBq3sNTnmwPoqQF-7Tks-FspXb1fTl6zncJFUE,6068
8
8
  qadence/libs.py,sha256=HetkKO8TCTlVCViQdVQJvxwBekrhd-y_iMox4UJMY1M,410
9
9
  qadence/log_config.yaml,sha256=QiwoB1bnRdk9NpxnvfgWX2PjN7EDfYlrc3GVD38rtdI,739
10
10
  qadence/logger.py,sha256=Hb76pK3VyQjVjJb4_NqFlOJgjYJVa8t7DHJFlzOM86M,407
11
11
  qadence/model.py,sha256=OH61_Ij_c7PRywiXf16tJ5mnK9iYNbBTdRiHeG8PZ54,21623
12
12
  qadence/overlap.py,sha256=ekaUnIcQWdF4hSFuUWpRjaxo43JyDGFOayP7vMXCZpw,16821
13
13
  qadence/parameters.py,sha256=RDYklyW5EQZTjsAazEXa4lLGDOdmUUU53hLj385uSaI,12687
14
+ qadence/pasqal_cloud_connection.py,sha256=aGeLrJ50owc8xC1OBP2MIxy-v3heTDGlr42boH5QAAc,9677
14
15
  qadence/protocols.py,sha256=bcYTxSjgMPV-a-D6yv90jCpnGik8myzaNpFv9z1gzJ0,442
15
16
  qadence/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
17
  qadence/qubit_support.py,sha256=Nkn1Q01RVViTcggSIom7EFKdWpAuM4TMGwBZ5feCUxA,2120
17
18
  qadence/register.py,sha256=mwmvS6PcTY0F9cIhTUXG3NT73FIagfMCwVqYa4DrQrk,13001
18
19
  qadence/serial_expr_grammar.peg,sha256=z5ytL7do9kO8o4h-V5GrsDuLdso0KsRcMuIYURFfmAY,328
19
20
  qadence/serialization.py,sha256=qEET6Gu9u2aSibPve3bJrqDzK2_gO3RPDJjt4ZY8GbE,15596
20
- qadence/states.py,sha256=5QIOBBYs8e2uLFiMa8iMYZ-MvWIFEqkZAjNYx0SyYPI,14843
21
- qadence/types.py,sha256=NR1dnN4tKC3zL1KEzjs2p_IYVth7GctgXVbIJsuiUws,11992
21
+ qadence/states.py,sha256=OMFuPAmPTLfZYwefXMv82P96xp5aBDJpanmCNgkRO-o,15379
22
+ qadence/types.py,sha256=Jhd_qTI8X7R61LcueNfIsODLUFB7WfVHWiJpsQkrixs,11999
22
23
  qadence/utils.py,sha256=zb2j7wURfy8kazaS84r4t35vAeDpo4Tpm4HbmPH-kFA,9865
23
24
  qadence/analog/__init__.py,sha256=BCyS9R4KUjzUXN0Ax3b0eMo8ZAuSkGoJQVtZ4_pvAFs,279
24
25
  qadence/analog/addressing.py,sha256=GSt4heEmRkBmoQIgdgkTclEFxZY-jjuAd77_SsZtGdI,6513
25
26
  qadence/analog/constants.py,sha256=B2phQoN1ASL8CwM-Dsa1rbraYwGwwPSeiB3HbVe-MPA,1243
26
- qadence/analog/device.py,sha256=LK8rQYBiK_PWHezLfTL0Ig83yc5wQPmZ3rBZF-gWgYw,2416
27
+ qadence/analog/device.py,sha256=t7oGjiZhk28IG2C-SVkc0RNSlV1L4SXV-tkLNiSYFNM,2570
27
28
  qadence/analog/hamiltonian_terms.py,sha256=9LKidqqEMJTTdXeaxkxP_otTmcv9i4yeJ-JKCLOCK3Y,3421
28
29
  qadence/analog/parse_analog.py,sha256=9Y_LMdw4wCHH6YSkvHhs6PUNwzT14HS7cUGheNSmDQg,4168
29
30
  qadence/backends/__init__.py,sha256=ibm7wmZxuIoMYAQxgAx0MsfLYWOVHNWgLwyS1HjMuuI,215
30
- qadence/backends/api.py,sha256=NPrvtZQ4klUBabUWJ5hbTUCVoaoW9-sHVbiXxAnTt3A,2643
31
+ qadence/backends/api.py,sha256=IPqxgJ1yJ1Z_yx37DSADro21C7ArGbfneYoFhDfttOI,2651
31
32
  qadence/backends/gpsr.py,sha256=HW5m6iHLq3hLHdJoU1q1i1laR0hBs7uCniXqrsFoNCI,5616
32
33
  qadence/backends/jax_utils.py,sha256=VfKhqCKknHDWZO21UFipWH_Lkiq175Z5GkP49gWjbyw,5038
33
- qadence/backends/utils.py,sha256=SdeAf6BDayc-W9hPI271PKtJ_ROOzRry9Jw72wUGmm4,8565
34
+ qadence/backends/utils.py,sha256=SSiMxZjaFS8e8sB6ZBLXPKuJNQGl93pRMy9hnI4oDrw,9104
34
35
  qadence/backends/horqrux/__init__.py,sha256=0OdVy6cq0oQggV48LO1WXdaZuSkDkz7OYNEPIkNAmfk,140
35
36
  qadence/backends/horqrux/backend.py,sha256=KNFFGN9dsgB9QKtNXiP3LyMY9DQ-7W7ScyE6k29fHJY,8842
36
37
  qadence/backends/horqrux/config.py,sha256=xz7JlUcwW_4JAbvProbSI9hA1SXZRRAN0Hr2bvmLzfg,892
37
- qadence/backends/horqrux/convert_ops.py,sha256=3uG3yLq5wjfrWzFHDs0HEnd8kER91ZHVX3HCpYjOdjk,8565
38
+ qadence/backends/horqrux/convert_ops.py,sha256=LTT8xptZ6DfhgEvFaACtal-qY2doy_Jj3dvV6HXE1Q8,8646
38
39
  qadence/backends/pulser/__init__.py,sha256=capQ-eHqwtOeLf4mWsI0BIseAHhiLGie5cFD4-iVhUo,116
39
- qadence/backends/pulser/backend.py,sha256=kNo_AAvOPNevdiMbZnQlEUbWCO-NXcwUtFWQHJ6VR2Q,14845
40
+ qadence/backends/pulser/backend.py,sha256=cI4IgijPpItNdDmLpKkJFas0X02wMiZd_XmVas41gEI,14846
40
41
  qadence/backends/pulser/channels.py,sha256=ZF0yEXUFHAmi3IdeXjzdTNGR5NzaRRFTiUpUGVg2sO4,329
41
42
  qadence/backends/pulser/cloud.py,sha256=0uUluvbFV9sOuCPraE-9uiVtC3Q8QaDY1IJMDi8grDM,2057
42
43
  qadence/backends/pulser/config.py,sha256=aoHDmtgq5i0Zryxenw_p3uARY0B1w-UaYvfqDmrWHM0,2175
@@ -47,22 +48,23 @@ qadence/backends/pulser/waveforms.py,sha256=0uz95b7rUaUUtN0tuHBZmJ0H6UBmfHST_59o
47
48
  qadence/backends/pyqtorch/__init__.py,sha256=0OdVy6cq0oQggV48LO1WXdaZuSkDkz7OYNEPIkNAmfk,140
48
49
  qadence/backends/pyqtorch/backend.py,sha256=Sjuof9b332w4gk9o8Rso2rgSHxskexfkIazRfxRD0Ng,11458
49
50
  qadence/backends/pyqtorch/config.py,sha256=sAxWVSkWvj6Lu0em1KJCDb6nfjqe8Dsxi7pyh6qYJpA,2387
50
- qadence/backends/pyqtorch/convert_ops.py,sha256=QVlXAqqBPtBt2NuFU9mvEm5i7FWXg3gWqoeizlH-1_s,13401
51
+ qadence/backends/pyqtorch/convert_ops.py,sha256=qG26-HmtUDaZO0KDnw2sbT3CRx_poS7eqJ3dn9wpWgc,13457
51
52
  qadence/blocks/__init__.py,sha256=H6jEA_CptkE-eoB4UfSbUiDszbxxhZwECV_TgoZWXoU,960
52
53
  qadence/blocks/abstract.py,sha256=DSQUE71rMyRBwAP--4Tx1WQC_LCXaNlftjd7goGyrpQ,12027
53
54
  qadence/blocks/analog.py,sha256=ymnnlSVoW1XL05ZvnnHCqRTHuOXIEY_7E9M0PNKJZy4,10812
54
55
  qadence/blocks/block_to_tensor.py,sha256=Sg7YGKUoPUUHKvyB8Khztrk7UYnV5SD451_3I00n84w,17367
55
56
  qadence/blocks/composite.py,sha256=f9D8L3u5Ktu_-xDBWsWiPlY8I-YW5YFgU18BtqwFHK0,8937
56
- qadence/blocks/embedding.py,sha256=MA3vRt659A828ZnH-6q7SpFdzS8Cf0oTtA2DJIDHmx4,7043
57
+ qadence/blocks/embedding.py,sha256=MI-gTPEe1e56AiHJr6MJwMAHdA7ZYmTo0b0VmFfyISQ,7029
57
58
  qadence/blocks/manipulate.py,sha256=kPmzej7mnWFoqTJA2CkGulT7hcPha0GGPARC8rjZltg,2387
58
59
  qadence/blocks/matrix.py,sha256=unE8mVWBTTcmSLX4le2fHqHFu4fbGeMTK8MrGoPsVRY,4036
59
60
  qadence/blocks/primitive.py,sha256=GLruKpiFBStWVd_M9mzLr3MqDNPbyaMUzEVB6xV3cPQ,17657
60
- qadence/blocks/utils.py,sha256=_ggOmIesfmTtIeldUyiZrKyS5HT5i_R3ZS8ihBCw73E,17700
61
- qadence/constructors/__init__.py,sha256=HTVulUFol_RxdCI3Gn2CBKjJ6ue0ALOB6GUuibP0ONE,1000
62
- qadence/constructors/ansatze.py,sha256=a7ZTYhfOat7fme_w_NFEUbZrMLSDMrkpu5RrablkeUU,14856
61
+ qadence/blocks/utils.py,sha256=_V43qD7kQNK8JS3gxfpkRn56ZIF_GGrhAnARn1hq2hk,17772
62
+ qadence/constructors/__init__.py,sha256=kFAMJMZbEUQlNZBAJi2XOaPFMh-ynb2_A1lI85la4y0,1027
63
+ qadence/constructors/ala.py,sha256=76rdD_vMki5F_r_Iq-68zU3NHrJiebVmr-e7L4lIDAo,8359
63
64
  qadence/constructors/feature_maps.py,sha256=BaAxFi6fSKwjsfFjqZ8T7lyZfjotcgH2OW3b0j67YVk,8644
64
65
  qadence/constructors/hamiltonians.py,sha256=u9feuuLmgQ7tX0TcP8tsbCefvBSVjkY7k4fMT5vp12Q,10054
65
- qadence/constructors/iia.py,sha256=z-4AA9Oj-j2oZ0QDkLYNk4duS3UHY_98Qwt9VO_ZDDU,7001
66
+ qadence/constructors/hea.py,sha256=EJveIvEAwOGWfMQ08LUdZkjTRFoqQioXjQXimv4-VUs,11702
67
+ qadence/constructors/iia.py,sha256=wYcvR-4U-C1WkyK_EN8Rz2g3kZpWb1-302X3h60PtWw,7946
66
68
  qadence/constructors/qft.py,sha256=2LpgQ-z1HUxB3rqHzYsbjqpdU63gyuuaUVCbNEFbjo8,7688
67
69
  qadence/constructors/rydberg_feature_maps.py,sha256=RuXtuAhjpong78jpKUjZHdh4fOdHBnuht1ffoAMWdEE,4839
68
70
  qadence/constructors/rydberg_hea.py,sha256=GrIrboyjEe1fJEbhtRYeCZ5dYzDVpMt-SQucS9UyNtw,8372
@@ -86,13 +88,13 @@ qadence/engines/jax/differentiable_backend.py,sha256=FcSrzzjzb0zfXC0-4mUJ6UB-wGO
86
88
  qadence/engines/jax/differentiable_expectation.py,sha256=rn_l7IH-S4IvuAcyAIgyEuMZOIqswu5Nsfz0JffXjaE,3694
87
89
  qadence/engines/torch/__init__.py,sha256=iZFdD32ot0B0CVyC-f5dVViOBnqoalxa6M9Lj4WQuPE,160
88
90
  qadence/engines/torch/differentiable_backend.py,sha256=uQfyGg-25MAc0soK1FyvJ2FJakRuv5_5DOy7OPiZYg8,3567
89
- qadence/engines/torch/differentiable_expectation.py,sha256=AXb1nLG1WuJXUOH02OhRVKASXst12d1b8Y2eUMmPt5M,10304
91
+ qadence/engines/torch/differentiable_expectation.py,sha256=kc4WTos7d65DDmao6YSrpTM0rCBnpqhGK4xLHm_K4yk,10351
90
92
  qadence/exceptions/__init__.py,sha256=BU6vWrI9mshzr1aTPm1Ticr_o_42GjTrWI4OZXhThsI,203
91
93
  qadence/exceptions/exceptions.py,sha256=4j_VJpx2sZ2Mir5BJUWu4nwb131FY1ygO4q8-XlyfRc,190
92
94
  qadence/measurements/__init__.py,sha256=RIjG9tVJMqhNzyj7maZI250Um0KgHl2PizDcKJag-JU,161
93
95
  qadence/measurements/protocols.py,sha256=mD50R9yPs5bIYH7Efd0BsR0503apiyrsZydi_Q6BJag,1161
94
96
  qadence/measurements/samples.py,sha256=AVvszDwgfKnZ_ooATyTA3270vGeg1V3WO94jsfrTk-8,1200
95
- qadence/measurements/shadow.py,sha256=ahyGl-krBqyzm1teMlWes9o1vqSjp4pX-QIYQ_AzNPc,11499
97
+ qadence/measurements/shadow.py,sha256=7FF7QoafUaFh1hK4PklwtBq9Vylv6gS6jCC8NxuntXI,12213
96
98
  qadence/measurements/tomography.py,sha256=Xz_sw-Vo1LOAHFgTiUsEmIn77j__4uuJNwWZz3KmTgE,2679
97
99
  qadence/measurements/utils.py,sha256=rGFU2ZoTWdhYrUmVHiSSobzhQri8VTCPC-CW23-Dv5E,6548
98
100
  qadence/mitigations/__init__.py,sha256=RzaxYJftePFMloGhBVSixZ8fSe-ps_Jc-EyPm6xz-bs,159
@@ -101,20 +103,20 @@ qadence/mitigations/protocols.py,sha256=0TeHvlGTN8_88XNEwrjA97C5BUlrh34wYmx0w6-5
101
103
  qadence/mitigations/readout.py,sha256=nI-voV5N0R7630Cn8t8x9EdV9iB76P0LDkRosy1s0Ec,6631
102
104
  qadence/ml_tools/__init__.py,sha256=a52dLBtUh5rTJ0ks_LREv-txtQ8pQZZhnQaIg28fSOw,936
103
105
  qadence/ml_tools/config.py,sha256=KcwvfyUb1XT-8NkP1ULjaGRNZqJm6dmWnuY9Bl4KZl0,19406
104
- qadence/ml_tools/constructors.py,sha256=gPfU-ICudfsByilYK-rFjax3HeTjtf_CqnR8axDy0F0,28081
106
+ qadence/ml_tools/constructors.py,sha256=bhARCCN-GHwSyBCBROnMGH32jo2wj3KV2FEVxIo5zDM,28021
105
107
  qadence/ml_tools/data.py,sha256=5sAqG9rUtGZPzFlzEDhMjSeOXF8Z0BmszJ_FRzYAy2A,5311
106
108
  qadence/ml_tools/models.py,sha256=DKSVFNC-Iq0-AmBrCZ1kqUpTBHQh_pX_1MqYT8eCG08,17045
107
109
  qadence/ml_tools/optimize_step.py,sha256=wUnxfWy0c9rEKe41-26On1bPFBwmSYBF4WCGn76oyq8,3376
108
110
  qadence/ml_tools/parameters.py,sha256=gew2Kq_5-RgRpaTvs8eauVhgo0sTqqDQEV6WHFEiLGM,1301
109
111
  qadence/ml_tools/stages.py,sha256=qW2phMIvQBLM3tn2UoGN-ePiBnZoNq5k844eHVnnn8Y,1407
110
112
  qadence/ml_tools/tensors.py,sha256=xZ9ZRzOqEaMgLUGWQf1najDmL6iLuN1ojCGVFs1Tm94,1337
111
- qadence/ml_tools/trainer.py,sha256=u9Mxv9WwRlYScLozT1Qltf1tNYLAUgn3oiz2E8bLpx0,26803
113
+ qadence/ml_tools/trainer.py,sha256=xU7qffXzWZDfJLlcYebGt4cGXnI8PPls_WdVrGQE31M,27026
112
114
  qadence/ml_tools/utils.py,sha256=PW8FyoV0mG_DtN1U8njTDV5qxZ0EK4mnFwMAsLBArfk,1410
113
- qadence/ml_tools/callbacks/__init__.py,sha256=XaUKmyQZaqxI0jvKnWCpIBgnX5y4Kczcbn2FRiomFu4,655
114
- qadence/ml_tools/callbacks/callback.py,sha256=F9tbXBBv3ZKTFbm0fGBZIZtTRO63jLazMk_oeL77dyE,16289
115
+ qadence/ml_tools/callbacks/__init__.py,sha256=pTdfjulDGNKca--9BgrdmMyvJSah_0spp929Th6RzC8,913
116
+ qadence/ml_tools/callbacks/callback.py,sha256=XoqTS1uLOkbh4FtKpDSXbUA5_LzjOAoVMaa2jYcYB3w,28800
115
117
  qadence/ml_tools/callbacks/callbackmanager.py,sha256=HwxgbqJi1GWYg2lgUqEyw9Y6a71YG_m5DmhpaeB6kLs,8007
116
118
  qadence/ml_tools/callbacks/saveload.py,sha256=2z8v1A3qIIPZuusEcSNqgYTnKGKkDj71KvY_atJvKnM,6015
117
- qadence/ml_tools/callbacks/writer_registry.py,sha256=FVM13j1-mv1Qt-v2QgkRFSB_uQ1bmezr5v6UKfeh3as,15264
119
+ qadence/ml_tools/callbacks/writer_registry.py,sha256=_lPb4VvDHiiRNh2EaEKxOSslnJgBAImGw5SoVReg-Rs,15351
118
120
  qadence/ml_tools/loss/__init__.py,sha256=d_0FlisdmgLY0qL1PeaabbcWX1B42RBdm7220cfzSN4,247
119
121
  qadence/ml_tools/loss/loss.py,sha256=Bditg8nelMEpG4Yt0aopcAQz84xIc6O-AGUO2M0nqbM,2982
120
122
  qadence/ml_tools/train_utils/__init__.py,sha256=1A2FlFg7kn68R1fdRC73S8DzA9gkBW7whdNHjzH5UTA,235
@@ -124,7 +126,7 @@ qadence/noise/__init__.py,sha256=tnChHv7FzOaV8C7O0P2l_gfjrpmHg8JaNhZprL33CP4,161
124
126
  qadence/noise/protocols.py,sha256=SPHJi5AiIOcz6U_iXY3ddVHk3cl9UHSDKk49eMTX2QM,8586
125
127
  qadence/operations/__init__.py,sha256=HAAo9VZUTq2H7kcEarChTgTWCIq7LT25-xBxkwE0F9c,1922
126
128
  qadence/operations/analog.py,sha256=v11DSrg-XUbwIAWAWM43y3VQbYKsx2ynx-HimUoC-x0,7435
127
- qadence/operations/control_ops.py,sha256=2ABP8fuf2mpJqRooDiBd2p-J-AL1yx3NDRF2TZf3K-c,10253
129
+ qadence/operations/control_ops.py,sha256=fPSwOxJaVtJNbwri1UdD20W1JXQlB-inPTCJG3Fk4hI,10187
128
130
  qadence/operations/ham_evo.py,sha256=brJ11tlwj6UPYkUcnId-BKlzNStsZd0vp9FKHCFTjlM,10642
129
131
  qadence/operations/parametric.py,sha256=kV5d-diaQAoRlqKqoo0CGCbPej6eAxHQXniqfFKff3g,5394
130
132
  qadence/operations/primitive.py,sha256=hDuwWndfPWqchM_98mOMf40qpkuPuwh39DIwHAbzGRo,9944
@@ -132,12 +134,12 @@ qadence/transpile/__init__.py,sha256=JrrQ4Osc4nNRWWjRGmVn57fWc8WwF92MokhKLRZ1vVA
132
134
  qadence/transpile/apply_fn.py,sha256=glZo2_wMOjw7_KgWKYbqg8j-9SDs-RefWIfxWgdQK8I,1336
133
135
  qadence/transpile/block.py,sha256=jV-EyatrwwdL2ahjF3wyEhC3PKMBPLaL5sQN1VNFc_w,11582
134
136
  qadence/transpile/circuit.py,sha256=KTh6Gv1czZddFuA1JhNNszheZbwViVixiGh4rGvIgTM,451
135
- qadence/transpile/digitalize.py,sha256=iWRwYAYQsD2INHj0HNbGJriv_3fRCuBW1nDBrwtKSuI,1523
136
- qadence/transpile/flatten.py,sha256=EdhSG5WyF56nbnxINNLqrHgY84MRM1YFjT3fR4aph5Q,3427
137
- qadence/transpile/invert.py,sha256=KAefHTG2AWr39aengVhXrzCtJPhrZC-ZnL6vYvmbnY0,4867
137
+ qadence/transpile/digitalize.py,sha256=7oNHEBs50ff3rvP-Tb72tCQ5sk6vMpoQvz4CXyvH6Tc,1521
138
+ qadence/transpile/flatten.py,sha256=k4HAfVzvDV40HyfaukiEHyJtAtvFRIcyDbAWiCL8tf0,3425
139
+ qadence/transpile/invert.py,sha256=IeyidgBwECCKB0i7Ym0KkLyfcx42LyT2mbqkfbK1H8M,4843
138
140
  qadence/transpile/noise.py,sha256=LDcDJtQGkgUPkL2t69gg6AScTb-p3J3SxCDZbYOu1L8,1668
139
- qadence/transpile/transpile.py,sha256=6MRRkk1OS279L1fwUQjazA6qlfpbd-T_EJMKT8hAhOU,2721
140
- qadence-1.9.1.dist-info/METADATA,sha256=LR5dgYAA874bZyIRlUpSxHmjPY3Ww-Yos7p_LLZtNT0,9842
141
- qadence-1.9.1.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
142
- qadence-1.9.1.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
143
- qadence-1.9.1.dist-info/RECORD,,
141
+ qadence/transpile/transpile.py,sha256=xnzkHA6Qdb-Y5Fv9Latrolrpw44N6_OKc7_QGt70f0I,2713
142
+ qadence-1.10.0.dist-info/METADATA,sha256=EZCIbVwwlysCzEh5Cq7xjJVrUDqHulODFjL6xLEaWGI,9955
143
+ qadence-1.10.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
144
+ qadence-1.10.0.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
145
+ qadence-1.10.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.26.3
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any