qoro-divi 0.3.5__py3-none-any.whl → 0.4.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.
Potentially problematic release.
This version of qoro-divi might be problematic. Click here for more details.
- divi/backends/__init__.py +1 -1
- divi/backends/_circuit_runner.py +21 -0
- divi/backends/_parallel_simulator.py +14 -0
- divi/backends/_qoro_service.py +232 -70
- divi/backends/_qpu_system.py +77 -3
- divi/circuits/_core.py +24 -5
- divi/circuits/qasm.py +1 -3
- divi/extern/cirq/_validator.py +12 -3
- divi/qprog/__init__.py +1 -0
- divi/qprog/algorithms/_ansatze.py +20 -16
- divi/qprog/algorithms/_qaoa.py +152 -111
- divi/qprog/algorithms/_vqe.py +170 -79
- divi/qprog/batch.py +34 -1
- divi/qprog/optimizers.py +133 -50
- divi/qprog/quantum_program.py +131 -633
- divi/qprog/variational_quantum_algorithm.py +786 -0
- divi/qprog/workflows/_graph_partitioning.py +42 -6
- divi/qprog/workflows/_qubo_partitioning.py +1 -1
- divi/qprog/workflows/_vqe_sweep.py +40 -33
- divi/reporting/_reporter.py +3 -6
- divi/utils.py +65 -0
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/METADATA +15 -1
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/RECORD +27 -26
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/LICENSE +0 -0
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/LICENSES/.license-header +0 -0
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/LICENSES/Apache-2.0.txt +0 -0
- {qoro_divi-0.3.5.dist-info → qoro_divi-0.4.0.dist-info}/WHEEL +0 -0
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import heapq
|
|
6
6
|
import string
|
|
7
|
-
from collections.abc import Callable, Sequence
|
|
8
|
-
from concurrent.futures import ProcessPoolExecutor
|
|
7
|
+
from collections.abc import Callable, Sequence
|
|
9
8
|
from dataclasses import dataclass
|
|
10
9
|
from functools import partial
|
|
11
10
|
from typing import Literal
|
|
@@ -21,7 +20,7 @@ from pymetis import part_graph
|
|
|
21
20
|
from sklearn.cluster import SpectralClustering
|
|
22
21
|
|
|
23
22
|
from divi.backends import CircuitRunner
|
|
24
|
-
from divi.qprog import QAOA, ProgramBatch
|
|
23
|
+
from divi.qprog import QAOA, ProgramBatch
|
|
25
24
|
from divi.qprog.algorithms._qaoa import (
|
|
26
25
|
_SUPPORTED_INITIAL_STATES_LITERAL,
|
|
27
26
|
GraphProblem,
|
|
@@ -41,6 +40,43 @@ _MAXIMUM_AVAILABLE_QUBITS = 30
|
|
|
41
40
|
|
|
42
41
|
@dataclass(frozen=True, eq=True)
|
|
43
42
|
class PartitioningConfig:
|
|
43
|
+
"""Configuration for graph partitioning algorithms.
|
|
44
|
+
|
|
45
|
+
This class defines the parameters and constraints for partitioning large graphs
|
|
46
|
+
into smaller subgraphs for quantum algorithm execution. It supports multiple
|
|
47
|
+
partitioning algorithms and allows specification of size constraints.
|
|
48
|
+
|
|
49
|
+
Attributes:
|
|
50
|
+
max_n_nodes_per_cluster: Maximum number of nodes allowed in each cluster.
|
|
51
|
+
If None, no upper limit is enforced. Must be a positive integer.
|
|
52
|
+
minimum_n_clusters: Minimum number of clusters to create. If None, no
|
|
53
|
+
lower limit is enforced. Must be a positive integer.
|
|
54
|
+
partitioning_algorithm: Algorithm to use for partitioning. Options are:
|
|
55
|
+
- "spectral": Spectral partitioning using Fiedler vector (default)
|
|
56
|
+
- "metis": METIS graph partitioning library
|
|
57
|
+
- "kernighan_lin": Kernighan-Lin algorithm
|
|
58
|
+
|
|
59
|
+
Note:
|
|
60
|
+
At least one of `max_n_nodes_per_cluster` or `minimum_n_clusters` must be
|
|
61
|
+
specified. Both constraints cannot be None.
|
|
62
|
+
|
|
63
|
+
Examples:
|
|
64
|
+
>>> # Partition into clusters of at most 10 nodes
|
|
65
|
+
>>> config = PartitioningConfig(max_n_nodes_per_cluster=10)
|
|
66
|
+
|
|
67
|
+
>>> # Create at least 5 clusters using METIS
|
|
68
|
+
>>> config = PartitioningConfig(
|
|
69
|
+
... minimum_n_clusters=5,
|
|
70
|
+
... partitioning_algorithm="metis"
|
|
71
|
+
... )
|
|
72
|
+
|
|
73
|
+
>>> # Both constraints: clusters of max 8 nodes, min 3 clusters
|
|
74
|
+
>>> config = PartitioningConfig(
|
|
75
|
+
... max_n_nodes_per_cluster=8,
|
|
76
|
+
... minimum_n_clusters=3
|
|
77
|
+
... )
|
|
78
|
+
"""
|
|
79
|
+
|
|
44
80
|
max_n_nodes_per_cluster: int | None = None
|
|
45
81
|
minimum_n_clusters: int | None = None
|
|
46
82
|
partitioning_algorithm: Literal["spectral", "metis", "kernighan_lin"] = "spectral"
|
|
@@ -335,7 +371,7 @@ def _node_partition_graph(
|
|
|
335
371
|
|
|
336
372
|
def linear_aggregation(
|
|
337
373
|
curr_solution: Sequence[Literal[0] | Literal[1]],
|
|
338
|
-
subproblem_solution:
|
|
374
|
+
subproblem_solution: set[int],
|
|
339
375
|
subproblem_reverse_index_map: dict[int, int],
|
|
340
376
|
):
|
|
341
377
|
"""Linearly combines a subproblem's solution into the main solution vector.
|
|
@@ -365,7 +401,7 @@ def linear_aggregation(
|
|
|
365
401
|
|
|
366
402
|
def dominance_aggregation(
|
|
367
403
|
curr_solution: Sequence[Literal[0] | Literal[1]],
|
|
368
|
-
subproblem_solution:
|
|
404
|
+
subproblem_solution: set[int],
|
|
369
405
|
subproblem_reverse_index_map: dict[int, int],
|
|
370
406
|
):
|
|
371
407
|
for node in subproblem_solution:
|
|
@@ -513,7 +549,7 @@ class GraphPartitioningQAOA(ProgramBatch):
|
|
|
513
549
|
"""
|
|
514
550
|
super().aggregate_results()
|
|
515
551
|
|
|
516
|
-
if any(len(program.
|
|
552
|
+
if any(len(program.best_probs) == 0 for program in self.programs.values()):
|
|
517
553
|
raise RuntimeError(
|
|
518
554
|
"Not all final probabilities computed yet. Please call `run()` first."
|
|
519
555
|
)
|
|
@@ -179,7 +179,7 @@ class QUBOPartitioningQAOA(ProgramBatch):
|
|
|
179
179
|
"""
|
|
180
180
|
super().aggregate_results()
|
|
181
181
|
|
|
182
|
-
if any(len(program.
|
|
182
|
+
if any(len(program.best_probs) == 0 for program in self.programs.values()):
|
|
183
183
|
raise RuntimeError(
|
|
184
184
|
"Not all final probabilities computed yet. Please call `run()` first."
|
|
185
185
|
)
|
|
@@ -127,6 +127,13 @@ def _zmatrix_to_cartesian(z_matrix: list[_ZMatrixEntry]) -> np.ndarray:
|
|
|
127
127
|
if n_atoms == 0:
|
|
128
128
|
return coords
|
|
129
129
|
|
|
130
|
+
# Validate bond lengths are positive
|
|
131
|
+
for i, entry in enumerate(z_matrix[1:], start=1):
|
|
132
|
+
if entry.bond_length is not None and entry.bond_length <= 0:
|
|
133
|
+
raise ValueError(
|
|
134
|
+
f"Bond length for atom {i} must be positive, got {entry.bond_length}"
|
|
135
|
+
)
|
|
136
|
+
|
|
130
137
|
# --- First atom at origin ---
|
|
131
138
|
coords[0] = np.array([0.0, 0.0, 0.0])
|
|
132
139
|
|
|
@@ -251,12 +258,14 @@ def _kabsch_align(P_in: np.ndarray, Q_in: np.ndarray, reference_atoms_idx=slice(
|
|
|
251
258
|
H = P_centered.T @ Q_centered
|
|
252
259
|
U, _, Vt = np.linalg.svd(H)
|
|
253
260
|
|
|
254
|
-
#
|
|
255
|
-
|
|
256
|
-
D = np.diag([1] * (P.shape[1] - 1) + [d])
|
|
261
|
+
# Compute rotation matrix
|
|
262
|
+
R = Vt.T @ U.T
|
|
257
263
|
|
|
258
|
-
#
|
|
259
|
-
|
|
264
|
+
# Ensure proper rotation (det = +1) by handling reflections
|
|
265
|
+
if np.linalg.det(R) < 0:
|
|
266
|
+
# Flip the last column of Vt to ensure proper rotation
|
|
267
|
+
Vt[-1, :] *= -1
|
|
268
|
+
R = Vt.T @ U.T
|
|
260
269
|
t = Qc - Pc @ R
|
|
261
270
|
|
|
262
271
|
# Apply transformation
|
|
@@ -270,27 +279,28 @@ def _kabsch_align(P_in: np.ndarray, Q_in: np.ndarray, reference_atoms_idx=slice(
|
|
|
270
279
|
@dataclass(frozen=True, eq=True)
|
|
271
280
|
class MoleculeTransformer:
|
|
272
281
|
"""
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
282
|
+
A class for transforming molecular structures by modifying bond lengths.
|
|
283
|
+
|
|
284
|
+
This class generates variants of a base molecule by adjusting bond lengths
|
|
285
|
+
according to specified modifiers. The modification mode is detected automatically.
|
|
286
|
+
|
|
287
|
+
Attributes:
|
|
288
|
+
base_molecule (qml.qchem.Molecule): The reference molecule used as a template for generating variants.
|
|
289
|
+
bond_modifiers (Sequence[float]): A list of values used to adjust bond lengths. The class will generate
|
|
290
|
+
**one new molecule for each modifier** in this list. The modification
|
|
291
|
+
mode is detected automatically:
|
|
279
292
|
- **Scale mode**: If all values are positive, they are used as scaling
|
|
280
293
|
factors (e.g., 1.1 for a 10% increase).
|
|
281
294
|
- **Delta mode**: If any value is zero or negative, all values are
|
|
282
295
|
treated as additive changes to the bond length, in Ångstroms.
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
Indices of atoms onto which to align the orientation of the resulting
|
|
292
|
-
variants of the molecule. Only useful for visualization and debuggin.
|
|
293
|
-
If None, no alignment is carried out.
|
|
296
|
+
atom_connectivity (Sequence[tuple[int, int]] | None): A sequence of atom index pairs specifying the bonds in the molecule.
|
|
297
|
+
If not provided, a chain structure will be assumed
|
|
298
|
+
e.g.: `[(0, 1), (1, 2), (2, 3), ...]`.
|
|
299
|
+
bonds_to_transform (Sequence[tuple[int, int]] | None): A subset of `atom_connectivity` that specifies the bonds to modify.
|
|
300
|
+
If None, all bonds will be transformed.
|
|
301
|
+
alignment_atoms (Sequence[int] | None): Indices of atoms onto which to align the orientation of the resulting
|
|
302
|
+
variants of the molecule. Only useful for visualization and debugging.
|
|
303
|
+
If None, no alignment is carried out.
|
|
294
304
|
"""
|
|
295
305
|
|
|
296
306
|
base_molecule: qml.qchem.Molecule
|
|
@@ -431,7 +441,7 @@ class VQEHyperparameterSweep(ProgramBatch):
|
|
|
431
441
|
|
|
432
442
|
def create_programs(self):
|
|
433
443
|
"""
|
|
434
|
-
Create VQE programs for all combinations of
|
|
444
|
+
Create VQE programs for all combinations of ansätze and molecule variants.
|
|
435
445
|
|
|
436
446
|
Generates molecule variants using the configured MoleculeTransformer, then
|
|
437
447
|
creates a VQE program for each (ansatz, molecule_variant) pair.
|
|
@@ -471,10 +481,10 @@ class VQEHyperparameterSweep(ProgramBatch):
|
|
|
471
481
|
"""
|
|
472
482
|
super().aggregate_results()
|
|
473
483
|
|
|
474
|
-
all_energies = {key: prog.
|
|
484
|
+
all_energies = {key: prog.best_loss for key, prog in self.programs.items()}
|
|
475
485
|
|
|
476
|
-
smallest_key = min(all_energies, key=lambda k:
|
|
477
|
-
smallest_value =
|
|
486
|
+
smallest_key = min(all_energies, key=lambda k: all_energies[k])
|
|
487
|
+
smallest_value = all_energies[smallest_key]
|
|
478
488
|
|
|
479
489
|
return smallest_key, smallest_value
|
|
480
490
|
|
|
@@ -504,18 +514,17 @@ class VQEHyperparameterSweep(ProgramBatch):
|
|
|
504
514
|
# Plot each ansatz's results as a separate series for clarity
|
|
505
515
|
for ansatz in unique_ansatze:
|
|
506
516
|
modifiers = []
|
|
507
|
-
|
|
517
|
+
energies = []
|
|
508
518
|
for modifier in self.molecule_transformer.bond_modifiers:
|
|
509
519
|
program_key = (ansatz.name, modifier)
|
|
510
520
|
if program_key in self._programs:
|
|
511
521
|
modifiers.append(modifier)
|
|
512
|
-
|
|
513
|
-
min_energies.append(min(curr_energies.values()))
|
|
522
|
+
energies.append(self._programs[program_key].best_loss)
|
|
514
523
|
|
|
515
524
|
# Use the new .name property for the label and the color_map
|
|
516
525
|
plt.scatter(
|
|
517
526
|
modifiers,
|
|
518
|
-
|
|
527
|
+
energies,
|
|
519
528
|
color=color_map[ansatz],
|
|
520
529
|
label=ansatz.name,
|
|
521
530
|
)
|
|
@@ -524,9 +533,7 @@ class VQEHyperparameterSweep(ProgramBatch):
|
|
|
524
533
|
for ansatz in unique_ansatze:
|
|
525
534
|
energies = []
|
|
526
535
|
for modifier in self.molecule_transformer.bond_modifiers:
|
|
527
|
-
energies.append(
|
|
528
|
-
min(self._programs[(ansatz.name, modifier)].losses[-1].values())
|
|
529
|
-
)
|
|
536
|
+
energies.append(self._programs[(ansatz.name, modifier)].best_loss)
|
|
530
537
|
|
|
531
538
|
plt.plot(
|
|
532
539
|
self.molecule_transformer.bond_modifiers,
|
divi/reporting/_reporter.py
CHANGED
|
@@ -13,16 +13,13 @@ class ProgressReporter(ABC):
|
|
|
13
13
|
"""An abstract base class for reporting progress of a quantum program."""
|
|
14
14
|
|
|
15
15
|
@abstractmethod
|
|
16
|
-
def update(self, **kwargs):
|
|
16
|
+
def update(self, **kwargs) -> None:
|
|
17
17
|
"""Provides a progress update."""
|
|
18
18
|
pass
|
|
19
19
|
|
|
20
20
|
@abstractmethod
|
|
21
|
-
def info(self, message: str, **kwargs):
|
|
22
|
-
"""
|
|
23
|
-
Provides a simple informational message.
|
|
24
|
-
No changes to progress or state.
|
|
25
|
-
"""
|
|
21
|
+
def info(self, message: str, **kwargs) -> None:
|
|
22
|
+
"""Provides a simple informational message."""
|
|
26
23
|
pass
|
|
27
24
|
|
|
28
25
|
|
divi/utils.py
CHANGED
|
@@ -10,6 +10,71 @@ import pennylane as qml
|
|
|
10
10
|
import scipy.sparse as sps
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
def hamiltonian_to_pauli_string(hamiltonian: qml.Hamiltonian, n_qubits: int) -> str:
|
|
14
|
+
"""
|
|
15
|
+
Convert a QNode Hamiltonian to a semicolon-separated string of Pauli operators.
|
|
16
|
+
|
|
17
|
+
Each term in the Hamiltonian is represented as a string of Pauli letters ('I', 'X', 'Y', 'Z'),
|
|
18
|
+
one per qubit. Multiple terms are separated by semicolons.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
hamiltonian (qml.Hamiltonian): The Pennylane Hamiltonian object to convert.
|
|
22
|
+
n_qubits (int): Number of qubits to represent in the string.
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
str: The Hamiltonian as a semicolon-separated string of Pauli operators.
|
|
26
|
+
|
|
27
|
+
Raises:
|
|
28
|
+
ValueError: If an unknown Pauli operator is encountered or wire index is out of range.
|
|
29
|
+
"""
|
|
30
|
+
pauli_letters = {"PauliX": "X", "PauliY": "Y", "PauliZ": "Z"}
|
|
31
|
+
identity_row = np.full(n_qubits, "I", dtype="<U1")
|
|
32
|
+
|
|
33
|
+
terms = []
|
|
34
|
+
for term in hamiltonian.operands:
|
|
35
|
+
op = term.base if isinstance(term, qml.ops.SProd) else term
|
|
36
|
+
ops = op.operands if isinstance(op, qml.ops.Prod) else [op]
|
|
37
|
+
|
|
38
|
+
paulis = identity_row.copy()
|
|
39
|
+
for p in ops:
|
|
40
|
+
# Better fallback logic with validation
|
|
41
|
+
if p.name in pauli_letters:
|
|
42
|
+
pauli = pauli_letters[p.name]
|
|
43
|
+
elif p.name.startswith("Pauli") and len(p.name) > 5:
|
|
44
|
+
pauli = p.name[5:] # Only if safe to slice
|
|
45
|
+
else:
|
|
46
|
+
raise ValueError(
|
|
47
|
+
f"Unknown Pauli operator: {p.name}. "
|
|
48
|
+
"Expected 'PauliX', 'PauliY', 'PauliZ', or a name starting with 'Pauli'."
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Bounds checking for wire indices
|
|
52
|
+
if not p.wires:
|
|
53
|
+
raise ValueError(f"Pauli operator {p.name} has no wires")
|
|
54
|
+
|
|
55
|
+
wire = int(p.wires[0])
|
|
56
|
+
if wire < 0 or wire >= n_qubits:
|
|
57
|
+
raise ValueError(
|
|
58
|
+
f"Wire index {wire} out of range for {n_qubits} qubits. "
|
|
59
|
+
f"Valid range: [0, {n_qubits - 1}]"
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
paulis[wire] = pauli
|
|
63
|
+
terms.append("".join(paulis))
|
|
64
|
+
|
|
65
|
+
return ";".join(terms)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def reverse_dict_endianness(
|
|
69
|
+
probs_dict: dict[str, dict[str, float]],
|
|
70
|
+
) -> dict[str, dict[str, float]]:
|
|
71
|
+
"""Reverse endianness of all bitstrings in a dictionary of probability distributions."""
|
|
72
|
+
return {
|
|
73
|
+
tag: {bitstring[::-1]: prob for bitstring, prob in probs.items()}
|
|
74
|
+
for tag, probs in probs_dict.items()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
13
78
|
def _is_sanitized(
|
|
14
79
|
qubo_matrix: np.ndarray | sps.spmatrix,
|
|
15
80
|
) -> np.ndarray | sps.spmatrix:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: qoro-divi
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A Python library to automate generating, parallelizing, and executing quantum programs.
|
|
5
5
|
Author: Ahmed Darwish
|
|
6
6
|
Author-email: ahmed@qoroquantum.de
|
|
@@ -63,3 +63,17 @@ pip install qoro-divi
|
|
|
63
63
|
- Full documentation is available at: <https://docs.qoroquantum.net/divi>
|
|
64
64
|
- Tutorials can be found in the `tutorials` folder.
|
|
65
65
|
|
|
66
|
+
## 🧪 Testing
|
|
67
|
+
|
|
68
|
+
To run the test suite:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Run all tests
|
|
72
|
+
pytest
|
|
73
|
+
|
|
74
|
+
# Run only API tests (requires API token)
|
|
75
|
+
pytest --run-api-tests
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Note:** Some tests require a Qoro API token to test the cloud REST API. Set the `QORO_API_KEY` environment variable or use the `--api-token` option. For local development, you can create a `.env`.
|
|
79
|
+
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
divi/__init__.py,sha256=SyBWflbDS6qGEtHg-AfzD1TRNgfXoW2H5qTYGJ-W3XQ,167
|
|
2
|
-
divi/backends/__init__.py,sha256=
|
|
3
|
-
divi/backends/_circuit_runner.py,sha256=
|
|
4
|
-
divi/backends/_parallel_simulator.py,sha256=
|
|
5
|
-
divi/backends/_qoro_service.py,sha256=
|
|
6
|
-
divi/backends/_qpu_system.py,sha256=
|
|
2
|
+
divi/backends/__init__.py,sha256=xi1thgxkqNVIbKO1ZOkn1qewlO8iV8dYijUPIn1WxzU,275
|
|
3
|
+
divi/backends/_circuit_runner.py,sha256=IDObfDWvFMSXi0JODul1x6Fg9MwTEOGGLYdGiE6KCDg,1988
|
|
4
|
+
divi/backends/_parallel_simulator.py,sha256=J2EfRUl8VlmUrxPYbE3HdCMN-xlS5vZnWePldEapMH0,13517
|
|
5
|
+
divi/backends/_qoro_service.py,sha256=R31waE67ZmyTNuVPa2XDyisouIPqLtjjEfD9QVlZmTA,24313
|
|
6
|
+
divi/backends/_qpu_system.py,sha256=Qrn7lp4NsN5rP7AEpo9MCGv7ndDAuQHvbHB1KD-Upgo,2863
|
|
7
7
|
divi/circuits/__init__.py,sha256=Wl4BF0_TwG1Ol4oaftCD5lpkgS9us9EW7F4hu6r_eXM,151
|
|
8
|
-
divi/circuits/_core.py,sha256=
|
|
9
|
-
divi/circuits/qasm.py,sha256=
|
|
8
|
+
divi/circuits/_core.py,sha256=DzD-0F9YmT7Qdj6lzwm6X41nnmZU_TDfr06Y1Od7KZI,9286
|
|
9
|
+
divi/circuits/qasm.py,sha256=6FDcNNdXGfYVGK64YTt22r2Jqz6c_TzNBC0NRjFs34g,8116
|
|
10
10
|
divi/circuits/qem.py,sha256=o6rMPUcxLuCBitBb8-QcxveUiKZVsP3HMamxyVFLi6M,6805
|
|
11
11
|
divi/extern/cirq/__init__.py,sha256=6NjP3TlQn_oNkg8VrKvEIoYQxB5Bx0mLLFOT3SXReTc,371
|
|
12
12
|
divi/extern/cirq/_lexer.py,sha256=x5UArrnN_JEyiq7E02ikq0wdmqZ2vEQ3_FADL1LIhQI,3187
|
|
13
13
|
divi/extern/cirq/_parser.py,sha256=z_bSn4m03-sfRlN8eL99Mo4LnjY-zmR-Xt6UrjzstZc,29279
|
|
14
14
|
divi/extern/cirq/_qasm_export.py,sha256=8C5xLYvIIkQTWWAAYo7ZjwtQjvYXNSflbf5UyUx6YUE,1024
|
|
15
15
|
divi/extern/cirq/_qasm_import.py,sha256=HbehrgfLl3iDdRyWr4o26Bek3ZpN-_dvNVSexl5-aVE,969
|
|
16
|
-
divi/extern/cirq/_validator.py,sha256=
|
|
16
|
+
divi/extern/cirq/_validator.py,sha256=od1vilsqn0T8wYAU1u1Rr5pZfjyaqHlIMwD_NWzUU4Y,20875
|
|
17
17
|
divi/extern/cirq/exception.py,sha256=w1w2vSubOGMRmyKBFqXejxfeIAzkPZ6V7gSrDX_ap4A,765
|
|
18
18
|
divi/extern/scipy/_cobyla.py,sha256=cnCf5AsOM8JWIMiujuUbWMNOgmUr3ZET9y04hUyumHs,10937
|
|
19
19
|
divi/extern/scipy/pyprima/LICENCE.txt,sha256=mXN5ssG_U6OR0v0yldznW_PJTtKNZIgu3jDRtRjLDdY,1533
|
|
@@ -43,27 +43,28 @@ divi/extern/scipy/pyprima/common/present.py,sha256=caedmqSB5ggGXNfky0A6v6FAdyaEG
|
|
|
43
43
|
divi/extern/scipy/pyprima/common/ratio.py,sha256=taadehpW0c3ULUggH5frIMpvTom53dsEhvFaXrIKvOI,1833
|
|
44
44
|
divi/extern/scipy/pyprima/common/redrho.py,sha256=J6rJILcOoCeo942LUAXxpUvKLarUGNCGdC-zcmIlVHE,1264
|
|
45
45
|
divi/extern/scipy/pyprima/common/selectx.py,sha256=mXVS2L6AuTmbOhpp1KlXwOBR54ttnbjwagYfnXhezJY,14713
|
|
46
|
-
divi/qprog/__init__.py,sha256=
|
|
46
|
+
divi/qprog/__init__.py,sha256=AkyI0JDBK4REYS_Z0op2sM81nFW6HEmqWJtfg6ARMJw,693
|
|
47
47
|
divi/qprog/algorithms/__init__.py,sha256=KLGD3zRk3z4nJQDqBjejTGgJ5m0n02jyBVHLJihMMws,355
|
|
48
|
-
divi/qprog/algorithms/_ansatze.py,sha256=
|
|
49
|
-
divi/qprog/algorithms/_qaoa.py,sha256=
|
|
50
|
-
divi/qprog/algorithms/_vqe.py,sha256=
|
|
51
|
-
divi/qprog/batch.py,sha256=
|
|
48
|
+
divi/qprog/algorithms/_ansatze.py,sha256=bc-8AtJhaM45iwA5LoTup2mxlecHlIgjia6gT5c5W6E,11422
|
|
49
|
+
divi/qprog/algorithms/_qaoa.py,sha256=uNqNxTyMvIyKRJ6uABiKq9H6g_FPN7Wxtn-LeoaxehU,20080
|
|
50
|
+
divi/qprog/algorithms/_vqe.py,sha256=_xbuhCI8BPwiULhH6SKSfz1noI1Z63u9WZC7ivNcCAI,12197
|
|
51
|
+
divi/qprog/batch.py,sha256=1EDkM4NFr_wjxjpdFNJpBufpylG6Bcg-9v_TaPR2vgQ,18605
|
|
52
52
|
divi/qprog/exceptions.py,sha256=2VvUf8qgNBw60Q4wyt_2nbE4JHHMmZiT2JaGmWChp2o,231
|
|
53
|
-
divi/qprog/optimizers.py,sha256=
|
|
54
|
-
divi/qprog/quantum_program.py,sha256=
|
|
53
|
+
divi/qprog/optimizers.py,sha256=xw3KIIwWEGYSC_RnXCBARWvkHuzmKDmUt1wuRhrrIqg,17123
|
|
54
|
+
divi/qprog/quantum_program.py,sha256=Bvq_CWWc8gea9i4aQ36jw8rSDKR3jNgHnUqErSMfeDs,8767
|
|
55
|
+
divi/qprog/variational_quantum_algorithm.py,sha256=kohRUBKyrto04vJedR9uZC766Vcl6g9lSvtkI541a6Y,29433
|
|
55
56
|
divi/qprog/workflows/__init__.py,sha256=_GAFsZsgj9p61E1xUXasa1aspwcOWp4s8i6hA6mQ9eg,320
|
|
56
|
-
divi/qprog/workflows/_graph_partitioning.py,sha256=
|
|
57
|
-
divi/qprog/workflows/_qubo_partitioning.py,sha256=
|
|
58
|
-
divi/qprog/workflows/_vqe_sweep.py,sha256=
|
|
57
|
+
divi/qprog/workflows/_graph_partitioning.py,sha256=QvyxN50I1R3SkCMzZpjpdoXfDSC8eskY8tancRmTUF8,24217
|
|
58
|
+
divi/qprog/workflows/_qubo_partitioning.py,sha256=6_z095R6kFtuL8bHVQMCM7S8h4tTOQOqpthsqFzkaoQ,8248
|
|
59
|
+
divi/qprog/workflows/_vqe_sweep.py,sha256=l0dndM7jl9WUAZxF6sAd6Gnx37-vkBCNKpgZI07LR3s,19291
|
|
59
60
|
divi/reporting/__init__.py,sha256=gaBUZrhNxR53VHojZxfjvQRDl-eDHo901vLE8I95kIw,290
|
|
60
61
|
divi/reporting/_pbar.py,sha256=I5UcriPLMKdTf_wusFCbxVH4MlA1Etui2GcYxRPC9Is,3686
|
|
61
62
|
divi/reporting/_qlogger.py,sha256=moFF9k_KECdhEmbsUTZHFXwVh30CuRCcChil_LBQUXM,5000
|
|
62
|
-
divi/reporting/_reporter.py,sha256=
|
|
63
|
-
divi/utils.py,sha256=
|
|
64
|
-
qoro_divi-0.
|
|
65
|
-
qoro_divi-0.
|
|
66
|
-
qoro_divi-0.
|
|
67
|
-
qoro_divi-0.
|
|
68
|
-
qoro_divi-0.
|
|
69
|
-
qoro_divi-0.
|
|
63
|
+
divi/reporting/_reporter.py,sha256=hqKWkpezolm80bJ16Tk4byjWxtZFEzgFAH9_yaXkQgM,2703
|
|
64
|
+
divi/utils.py,sha256=eOLcA7kY0Pib4pUsrfhN6l_GgNcKM95KVUSQLlh6W0s,7569
|
|
65
|
+
qoro_divi-0.4.0.dist-info/LICENSE,sha256=NS4JlQrgNwg1bvB3kE5shE-P4cJgnntgl-kClbOpG_Q,10760
|
|
66
|
+
qoro_divi-0.4.0.dist-info/LICENSES/.license-header,sha256=2jN_xtJscqP8LG-NaveY2KHUkfRCC543Y_XjOyKEfWY,105
|
|
67
|
+
qoro_divi-0.4.0.dist-info/LICENSES/Apache-2.0.txt,sha256=yoILHpvVuguUBpk8UwMnzJbcHUUyst9iGNNuEwUtWVc,10270
|
|
68
|
+
qoro_divi-0.4.0.dist-info/METADATA,sha256=TH0_pY9aljjQGcGnqabmavas03vLnhGXAam1vFq2SGU,2813
|
|
69
|
+
qoro_divi-0.4.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
|
70
|
+
qoro_divi-0.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|