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.

@@ -4,8 +4,7 @@
4
4
 
5
5
  import heapq
6
6
  import string
7
- from collections.abc import Callable, Sequence, Set
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, QuantumProgram
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: Set[int],
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: Set[int],
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.probs) == 0 for program in self.programs.values()):
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.probs) == 0 for program in self.programs.values()):
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
- # Reflection check
255
- d = np.sign(np.linalg.det(Vt.T @ U.T))
256
- D = np.diag([1] * (P.shape[1] - 1) + [d])
261
+ # Compute rotation matrix
262
+ R = Vt.T @ U.T
257
263
 
258
- # Optimal rotation and translation
259
- R = Vt.T @ D @ U.T
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
- base_molecule: qml.qchem.Molecule
274
- The reference molecule used as a template for generating variants.
275
- bond_modifiers: Sequence[float]
276
- A list of values used to adjust bond lengths. The class will generate
277
- **one new molecule for each modifier** in this list. The modification
278
- mode is detected automatically:
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
- atom_connectivity: Sequence[tuple[int, int]] | None
284
- A sequence of atom index pairs specifying the bonds in the molecule.
285
- If not provided, a chain structure will be assumed
286
- e.g.: `[(0, 1), (1, 2), (2, 3), ...]`.
287
- bonds_to_transform: Sequence[tuple[int, int]] | None
288
- A subset of `atom_connectivity` that specifies the bonds to modify.
289
- If None, all bonds will be transformed.
290
- alignment_atoms: Sequence[int] | None
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 ansatze and molecule variants.
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.losses[-1] for key, prog in self.programs.items()}
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: min(all_energies[k].values()))
477
- smallest_value = min(all_energies[smallest_key].values())
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
- min_energies = []
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
- curr_energies = self._programs[program_key].losses[-1]
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
- min_energies,
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,
@@ -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.5
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=1S3EJH5XXou2s7EnZowhfI4b3u3zLUG05x7etj4W-IM,264
3
- divi/backends/_circuit_runner.py,sha256=RlVEPQtn_Oyb2jIhz3y4HwNb7d1bDpgKUx8ZliS2POk,1387
4
- divi/backends/_parallel_simulator.py,sha256=PMu2fsdXw9y_OwJBa5xWrnlfjhb4m7DZ_x4N1yZvVbE,13195
5
- divi/backends/_qoro_service.py,sha256=nL69tjPtXubA1-ElEyO77pv-2p32kH9tjOXGB-7GVj4,17795
6
- divi/backends/_qpu_system.py,sha256=teVeG18ukyzMFgbPSr4BLx4MJUHVK382RqZMOy2voFk,374
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=fBXRspBDCXB0M1PgHwibMDGTdRR441jp73lwh1_NvkQ,8393
9
- divi/circuits/qasm.py,sha256=iq2hLjx9KBqgG_wKb7CRfNSXTOHZttD4tgBBp-pUnQQ,8161
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=GVCeoi3IGUCPcqmg6E7lPtD52h-63_0AH4-MToajL4o,20509
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=3X7MK7PjXI-rCZQ9OYq314w14npmasCNSBECq23DW7U,622
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=CGW6bh6BQreAhcWbKgPX2MMTTTytHO51gizZh9tRFZ4,11199
49
- divi/qprog/algorithms/_qaoa.py,sha256=5mbsY4enLRAemVuUaw5iGmVI4_YBKdI7ITkV5dAultg,16608
50
- divi/qprog/algorithms/_vqe.py,sha256=iP0rKbnQys0mIGn7lcFDLVr9tdYVbfs6Wt6vUdsAuLY,8121
51
- divi/qprog/batch.py,sha256=SO1jxySGAddqzoTYX-Zq_f6HWoEf67wJ70fA3UDWxRw,17011
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=GWaO07PylyLtI-oYXgJmqYUzVzeXHVSqdVFCTiGeNTU,13402
54
- divi/qprog/quantum_program.py,sha256=c8bEZvtcmQMlrILl5j9PkyvUUb_aO1M_Zwv30NfH1cU,26858
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=EpDsU0WG4dXKaCqox96LxxupI5lts4TeLgehTg8cUno,22702
57
- divi/qprog/workflows/_qubo_partitioning.py,sha256=HDFOlQhDH_ax_CV0FtgcoUtCErnDE_Xfv0RVL6O8_WI,8243
58
- divi/qprog/workflows/_vqe_sweep.py,sha256=V8CpLEXmOqiMM2MXveTOWKIHbdP5fzJJOVzZ0Nmvxzg,18808
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=sMOpDPeTSlFh-soX4BseQkW5XiqgIjcqNgZHPH1SccI,2746
63
- divi/utils.py,sha256=Avc0Lg0AbkhXAh73Ye4NZOsqZ8U5ImHVF4_kz6hTJNA,5138
64
- qoro_divi-0.3.5.dist-info/LICENSE,sha256=NS4JlQrgNwg1bvB3kE5shE-P4cJgnntgl-kClbOpG_Q,10760
65
- qoro_divi-0.3.5.dist-info/LICENSES/.license-header,sha256=2jN_xtJscqP8LG-NaveY2KHUkfRCC543Y_XjOyKEfWY,105
66
- qoro_divi-0.3.5.dist-info/LICENSES/Apache-2.0.txt,sha256=yoILHpvVuguUBpk8UwMnzJbcHUUyst9iGNNuEwUtWVc,10270
67
- qoro_divi-0.3.5.dist-info/METADATA,sha256=2EpuPs1up06jPpmbgSalH_VRkzdGUMXToMsNyrOXdsw,2470
68
- qoro_divi-0.3.5.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
69
- qoro_divi-0.3.5.dist-info/RECORD,,
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,,