iqm-benchmarks 2.26__py3-none-any.whl → 2.27__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 iqm-benchmarks might be problematic. Click here for more details.

@@ -237,8 +237,12 @@ def generate_non_gate_results(
237
237
  else:
238
238
  df_o_final = DataFrame(
239
239
  {
240
- f"mean_total_variation_distance_estimate_data": reporting.number_to_str(df_o.values[0, 1].copy(), precision=5),
241
- f"mean_total_variation_distance_target_data": reporting.number_to_str(df_o.values[0, 2].copy(), precision=5),
240
+ f"mean_total_variation_distance_estimate_data": reporting.number_to_str(
241
+ df_o.values[0, 1].copy(), precision=5
242
+ ),
243
+ f"mean_total_variation_distance_target_data": reporting.number_to_str(
244
+ df_o.values[0, 2].copy(), precision=5
245
+ ),
242
246
  f"povm_diamond_distance": reporting.number_to_str(df_o.values[0, 3].copy(), precision=5),
243
247
  f"state_trace_distance": reporting.number_to_str(df_o.values[0, 4].copy(), precision=5),
244
248
  },
@@ -205,7 +205,8 @@ def fidelity_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
205
205
  dataset = run.dataset
206
206
  routine = dataset.attrs["fidelity_routine"]
207
207
  qubit_layouts = dataset.attrs["custom_qubits_array"]
208
- backend_name = dataset.attrs["backend_name"]
208
+ backend_topology = dataset.attrs["backend_topology"]
209
+ backend_num_qubits = dataset.attrs["backend_num_qubits"]
209
210
 
210
211
  observation_list: list[BenchmarkObservation] = []
211
212
  for qubit_layout in qubit_layouts:
@@ -218,7 +219,7 @@ def fidelity_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
218
219
  for qc in all_circuits:
219
220
  qc_copy = qc.copy()
220
221
  qc_copy.remove_final_measurements()
221
- deflated_qc = reduce_to_active_qubits(qc_copy, backend_name)
222
+ deflated_qc = reduce_to_active_qubits(qc_copy, backend_topology, backend_num_qubits)
222
223
  ideal_probabilities.append(
223
224
  dict(sorted(ideal_simulator.run(deflated_qc).result().get_counts().items()))
224
225
  )
@@ -374,11 +375,11 @@ def generate_ghz_spanning_tree(
374
375
  participating_qubits = set(qubit for pair in cx_map[: n_state - 1] for qubit in pair)
375
376
 
376
377
  relabeling = {idx_old: idx_new for idx_new, idx_old in enumerate(participating_qubits)}
377
- n_state_register = QuantumRegister(n_state)
378
- qc = QuantumCircuit(n_state_register, name="ghz")
378
+ qc = QuantumCircuit(n_state, name="ghz")
379
379
  qc.h([relabeling[cx_map[0][0]]])
380
380
  for _, pair in zip(np.arange(n_state - 1), cx_map):
381
381
  relabeled_pair = [relabeling[pair[0]], relabeling[pair[1]]]
382
+ # This barrier prevents Hadamards from being put at the beginning of the circuit, which would make it more susceptible to phase errors
382
383
  qc.barrier(relabeled_pair)
383
384
  qc.cx(*relabeled_pair)
384
385
  qc.measure_active()
@@ -620,14 +621,11 @@ class GHZBenchmark(Benchmark):
620
621
  qcvv_logger.warning(
621
622
  f"The current backend is a star architecture for which a suboptimal state generation routine is chosen. Consider setting state_generation_routine={routine}."
622
623
  )
623
- effective_coupling_map = [[x, y] for x in qubit_layout for y in qubit_layout if x != y]
624
- else:
625
- effective_coupling_map = self.backend.coupling_map
626
624
  if self.cal_url:
627
625
  edges_cal, fidelities_cal, _ = extract_fidelities(self.cal_url)
628
- graph = get_edges(effective_coupling_map, qubit_layout, edges_cal, fidelities_cal)
626
+ graph = get_edges(self.backend.coupling_map, qubit_layout, edges_cal, fidelities_cal)
629
627
  else:
630
- graph = get_edges(effective_coupling_map, qubit_layout)
628
+ graph = get_edges(self.backend.coupling_map, qubit_layout)
631
629
  ghz, _ = generate_ghz_spanning_tree(graph, qubit_layout, qubit_count)
632
630
  circuit_group.add_circuit(ghz)
633
631
  ghz_native_transpiled, _ = perform_backend_transpilation(
@@ -670,7 +668,7 @@ class GHZBenchmark(Benchmark):
670
668
  else:
671
669
  index_min_depth = np.argmin([c.depth() for c in ghz_native_transpiled])
672
670
  final_ghz = ghz_native_transpiled[index_min_depth]
673
- circuit_group.add_circuit([ghz_log[index_min_depth]])
671
+ circuit_group.add_circuit(ghz_log[index_min_depth])
674
672
  self.circuits["untranspiled_circuits"].circuit_groups.append(circuit_group)
675
673
  return CircuitGroup(name=f"{qubit_layout}_native_ghz", circuits=[final_ghz[0]])
676
674
 
@@ -821,6 +819,8 @@ class GHZBenchmark(Benchmark):
821
819
  else:
822
820
  dataset.attrs[key] = value
823
821
  dataset.attrs[f"backend_name"] = self.backend.name
822
+ dataset.attrs[f"backend_topology"] = "star" if "move" in self.backend.operation_names else "crystal"
823
+ dataset.attrs[f"backend_num_qubits"] = self.backend.num_qubits
824
824
  dataset.attrs[f"execution_timestamp"] = self.execution_timestamp
825
825
  dataset.attrs["fidelity_routine"] = self.fidelity_routine
826
826
 
@@ -856,7 +856,7 @@ class QScoreBenchmark(Benchmark):
856
856
  else:
857
857
  qcvv_logger.setLevel(logging.WARNING)
858
858
  # Account for all-to-all connected backends like Deneb
859
- if "move" in self.backend.operation_names:
859
+ if "move" in backend.architecture.gates:
860
860
  # If the circuit is defined on a subset of qubit_set, choose the first qubtis in the set
861
861
  active_qubit_set = qubit_set[: len(qc.qubits)]
862
862
  # All-to-all coupling map on the active qubits
@@ -514,7 +514,7 @@ class CLOPSBenchmark(Benchmark):
514
514
  parameters = self.generate_random_parameters()
515
515
 
516
516
  # Star can't use optimize_sqg as is, yet -> complains about MOVE gate not being IQM native!
517
- if optimize_sqg and "move" not in self.backend.operation_names:
517
+ if optimize_sqg and "move" not in self.backend.architecture.gates:
518
518
  sorted_dict_parametrized[k].append(
519
519
  optimize_single_qubit_gates( # Optimize SQG seems worth it AFTER assignment
520
520
  qc.assign_parameters(
@@ -332,7 +332,7 @@ def generate_pauli_dressed_mrb_circuits(
332
332
 
333
333
  # Add measurements to transpiled - before!
334
334
  circ.measure_all()
335
- if "move" in retrieved_backend.operation_names:
335
+ if "move" in retrieved_backend.architecture.gates:
336
336
  # All-to-all coupling map on the active qubits
337
337
  effective_coupling_map = [[x, y] for x in qubits for y in qubits if x != y]
338
338
  else:
iqm/benchmarks/utils.py CHANGED
@@ -45,7 +45,6 @@ from iqm.qiskit_iqm.fake_backends.fake_apollo import IQMFakeApollo
45
45
  from iqm.qiskit_iqm.iqm_backend import IQMBackendBase
46
46
  from iqm.qiskit_iqm.iqm_job import IQMJob
47
47
  from iqm.qiskit_iqm.iqm_provider import IQMProvider
48
- from iqm.qiskit_iqm.iqm_transpilation import optimize_single_qubit_gates
49
48
 
50
49
 
51
50
  def timeit(f):
@@ -169,6 +168,9 @@ def count_native_gates(
169
168
  backend = backend_arg
170
169
 
171
170
  native_operations = backend.operation_names
171
+
172
+ if "move" in backend.architecture.gates:
173
+ native_operations.append("move")
172
174
  # Some backends may not include "barrier" in the operation_names attribute
173
175
  if "barrier" not in native_operations:
174
176
  native_operations.append("barrier")
@@ -301,21 +303,22 @@ def perform_backend_transpilation(
301
303
  initial_layout=qubits if aux_qc is None else None,
302
304
  routing_method=routing_method,
303
305
  )
304
- if optimize_sqg:
305
- transpiled = optimize_single_qubit_gates(transpiled, drop_final_rz=drop_final_rz)
306
- if "move" in backend.operation_names:
306
+ if "move" in backend.architecture.gates:
307
307
  transpiled = transpile_to_IQM(
308
308
  qc, backend=backend, optimize_single_qubits=optimize_sqg, remove_final_rzs=drop_final_rz
309
309
  )
310
310
  if aux_qc is not None:
311
- if "move" in backend.operation_names:
312
- if 0 in qubits:
311
+ if "move" in backend.architecture.gates:
312
+ if backend.num_qubits in qubits:
313
313
  raise ValueError(
314
- "Label 0 is reserved for Resonator - Please specify computational qubit labels (1,2,...)"
314
+ f"Label {backend.num_qubits} is reserved for Resonator - "
315
+ f"Please specify computational qubit labels {np.arange(backend.num_qubits)}"
315
316
  )
316
- backend_name = "IQMNdonisBackend"
317
- transpiled = reduce_to_active_qubits(transpiled, backend_name)
318
- transpiled = aux_qc.compose(transpiled, qubits=[0] + qubits, clbits=list(range(qc.num_clbits)))
317
+ backend_topology = "star"
318
+ transpiled = reduce_to_active_qubits(transpiled, backend_topology, backend.num_qubits)
319
+ transpiled = aux_qc.compose(
320
+ transpiled, qubits=qubits + [backend.num_qubits], clbits=list(range(qc.num_clbits))
321
+ )
319
322
  else:
320
323
  transpiled = aux_qc.compose(transpiled, qubits=qubits, clbits=list(range(qc.num_clbits)))
321
324
 
@@ -323,25 +326,31 @@ def perform_backend_transpilation(
323
326
 
324
327
  qcvv_logger.info(
325
328
  f"Transpiling for backend {backend.name} with optimization level {qiskit_optim_level}, "
326
- f"{routing_method} routing method{' and SQG optimization' if optimize_sqg else ''} all circuits"
329
+ f"{routing_method} routing method{' including SQG optimization' if qiskit_optim_level>0 else ''} all circuits"
327
330
  )
328
331
 
329
332
  if coupling_map == backend.coupling_map:
330
333
  transpiled_qc_list = [transpile_and_optimize(qc) for qc in qc_list]
331
334
  else: # The coupling map will be reduced if the physical layout is to be fixed
332
- aux_qc_list = [QuantumCircuit(backend.num_qubits, q.num_clbits) for q in qc_list]
335
+ if "move" in backend.architecture.gates:
336
+ aux_qc_list = [QuantumCircuit(backend.num_qubits + 1, q.num_clbits) for q in qc_list]
337
+ else:
338
+ aux_qc_list = [QuantumCircuit(backend.num_qubits, q.num_clbits) for q in qc_list]
333
339
  transpiled_qc_list = [transpile_and_optimize(qc, aux_qc=aux_qc_list[idx]) for idx, qc in enumerate(qc_list)]
334
340
 
335
341
  return transpiled_qc_list
336
342
 
337
343
 
338
- def reduce_to_active_qubits(circuit: QuantumCircuit, backend_name: Optional[str] = None) -> QuantumCircuit:
344
+ def reduce_to_active_qubits(
345
+ circuit: QuantumCircuit, backend_topology: Optional[str] = None, backend_num_qubits=None
346
+ ) -> QuantumCircuit:
339
347
  """
340
348
  Reduces a quantum circuit to only its active qubits.
341
349
 
342
350
  Args:
343
- backend_name (Optional[str]): The backend name, if any, in which the circuits are defined.
351
+ backend_topology (Optional[str]): The backend topology to execute the benchmark on.
344
352
  circuit (QuantumCircuit): The original quantum circuit.
353
+ backend_num_qubits (int): The number of qubits in the backend.
345
354
 
346
355
  Returns:
347
356
  QuantumCircuit: A new quantum circuit containing only active qubits.
@@ -351,9 +360,9 @@ def reduce_to_active_qubits(circuit: QuantumCircuit, backend_name: Optional[str]
351
360
  for instruction in circuit.data:
352
361
  for qubit in instruction.qubits:
353
362
  active_qubits.add(circuit.find_bit(qubit).index)
354
- if backend_name is not None and backend_name == "IQMNdonisBackend" and 0 not in active_qubits:
363
+ if backend_topology == "star" and backend_num_qubits not in active_qubits:
355
364
  # For star systems, the resonator must always be there, regardless of whether it MOVE gates on it or not
356
- active_qubits.add(0)
365
+ active_qubits.add(backend_num_qubits)
357
366
 
358
367
  # Create a mapping from old qubits to new qubits
359
368
  active_qubits = set(sorted(active_qubits))
@@ -453,12 +462,12 @@ def set_coupling_map(
453
462
  ValueError: if the physical layout is not "fixed" or "batching".
454
463
  """
455
464
  if physical_layout == "fixed":
456
- if "move" in backend.operation_names:
457
- if 0 in qubits:
458
- raise ValueError(
459
- "Label 0 is reserved for Resonator - Please specify computational qubit labels (1,2,...)"
460
- )
461
- return backend.coupling_map.reduce(mapping=[0] + list(qubits))
465
+ # if "move" in backend.architecture.gates:
466
+ # if 0 in qubits:
467
+ # raise ValueError(
468
+ # "Label 0 is reserved for Resonator - Please specify computational qubit labels (1,2,...)"
469
+ # )
470
+ # return backend.coupling_map.reduce(mapping=[0] + list(qubits))
462
471
  return backend.coupling_map.reduce(mapping=qubits)
463
472
  if physical_layout == "batching":
464
473
  return backend.coupling_map
@@ -637,13 +646,13 @@ class GraphPositions:
637
646
  }
638
647
 
639
648
  deneb_positions = {
640
- 0: (2.0, 2.0),
641
- 1: (1.0, 1.0),
642
- 3: (2.0, 1.0),
643
- 5: (3.0, 1.0),
644
- 2: (1.0, 3.0),
649
+ 6: (2.0, 2.0),
650
+ 0: (1.0, 1.0),
651
+ 1: (2.0, 1.0),
652
+ 2: (3.0, 1.0),
653
+ 3: (1.0, 3.0),
645
654
  4: (2.0, 3.0),
646
- 6: (3.0, 3.0),
655
+ 5: (3.0, 3.0),
647
656
  }
648
657
 
649
658
  predefined_stations = {
@@ -665,15 +674,15 @@ class GraphPositions:
665
674
  n_nodes = len(graph.node_indices())
666
675
 
667
676
  if topology == "star":
668
- # Place center node at (0,0)
669
- pos = {0: (0.0, 0.0)}
677
+ # Place resonator node with index n_nodes-1 at (0,0)
678
+ pos = {n_nodes - 1: (0.0, 0.0)}
670
679
 
671
680
  if n_nodes > 1:
672
681
  # Place other nodes in a circle around the center
673
682
  angles = np.linspace(0, 2 * np.pi, n_nodes - 1, endpoint=False)
674
683
  radius = 1.0
675
684
 
676
- for i, angle in enumerate(angles, start=1):
685
+ for i, angle in enumerate(angles):
677
686
  x = radius * np.cos(angle)
678
687
  y = radius * np.sin(angle)
679
688
  pos[i] = (x, y)
@@ -686,7 +695,7 @@ class GraphPositions:
686
695
  # Get spring layout with one fixed position
687
696
  pos = {
688
697
  int(k): (float(v[0]), float(v[1]))
689
- for k, v in spring_layout(graph, scale=2, pos=fixed_pos, num_iter=300, fixed={0}).items()
698
+ for k, v in spring_layout(graph, scale=2, pos=fixed_pos, num_iter=500, k=0.15, fixed={0}).items()
690
699
  }
691
700
  return pos
692
701
 
@@ -721,23 +730,21 @@ def extract_fidelities(cal_url: str) -> tuple[list[list[int]], list[float], str]
721
730
  i, j = cal_keys["cz_gate_fidelity"]
722
731
  topology = "crystal"
723
732
  for item in calibration["calibrations"][i]["metrics"][j]["metrics"]:
724
- qb1 = int(item["locus"][0][2:]) if item["locus"][0] != "COMP_R" else 0
725
- qb2 = int(item["locus"][1][2:]) if item["locus"][1] != "COMP_R" else 0
726
- if topology == "star":
727
- list_couplings.append([qb1, qb2])
728
- else:
729
- list_couplings.append([qb1 - 1, qb2 - 1])
733
+ qb1 = int(item["locus"][0][2:]) if "COMP" not in item["locus"][0] else 0
734
+ qb2 = int(item["locus"][1][2:]) if "COMP" not in item["locus"][1] else 0
735
+ list_couplings.append([qb1 - 1, qb2 - 1])
730
736
  list_fids.append(float(item["value"]))
731
737
  calibrated_qubits = set(np.array(list_couplings).reshape(-1))
732
- qubit_mapping = {qubit: idx for idx, qubit in enumerate(calibrated_qubits)}
738
+ qubit_mapping = {}
739
+ if topology == "star":
740
+ qubit_mapping.update({-1: len(calibrated_qubits)}) # Place resonator qubit as last qubit
741
+ qubit_mapping.update({qubit: idx for idx, qubit in enumerate(calibrated_qubits)})
733
742
  list_couplings = [[qubit_mapping[edge[0]], qubit_mapping[edge[1]]] for edge in list_couplings]
734
743
 
735
744
  return list_couplings, list_fids, topology
736
745
 
737
746
 
738
- def plot_layout_fidelity_graph(
739
- cal_url: str, qubit_layouts: Optional[list[list[int]]] = None, station: Optional[str] = None
740
- ):
747
+ def plot_layout_fidelity_graph(cal_url: str, qubit_layouts: Optional[list[list[int]]] = None):
741
748
  """Plot a graph showing the quantum chip layout with fidelity information.
742
749
 
743
750
  Creates a visualization of the quantum chip topology where nodes represent qubits
@@ -747,8 +754,6 @@ def plot_layout_fidelity_graph(
747
754
  Args:
748
755
  cal_url: URL to retrieve calibration data from
749
756
  qubit_layouts: List of qubit layouts where each layout is a list of qubit indices
750
- station: Name of the quantum computing station to use predefined positions for.
751
- If None, positions will be generated algorithmically.
752
757
 
753
758
  Returns:
754
759
  matplotlib.figure.Figure: The generated figure object containing the graph visualization
@@ -768,6 +773,10 @@ def plot_layout_fidelity_graph(
768
773
  # Add edges
769
774
  graph.add_edges_from(edges_graph)
770
775
 
776
+ # Extract station name from URL
777
+ parts = cal_url.strip("/").split("/")
778
+ station = parts[-2].capitalize()
779
+
771
780
  # Define qubit positions in plot
772
781
  if station in GraphPositions.predefined_stations:
773
782
  pos = GraphPositions.predefined_stations[station]
@@ -780,21 +789,7 @@ def plot_layout_fidelity_graph(
780
789
  for qb in {qb for layout in qubit_layouts for qb in layout}:
781
790
  node_colors[qb] = "orange"
782
791
 
783
- # Ensuring weights are in correct order for the plot
784
- edge_list = graph.edge_list()
785
- weights_dict = {}
786
- edge_pos = set()
787
-
788
- # Create a mapping between edge positions as defined in rustworkx and their weights
789
- for e, w in zip(edge_list, weights):
790
- pos_tuple = (tuple(pos[e[0]]), tuple(pos[e[1]]))
791
- weights_dict[pos_tuple] = w
792
- edge_pos.add(pos_tuple)
793
-
794
- # Get corresponding weights in the same order
795
- weights_ordered = np.array([weights_dict[edge] for edge in list(edge_pos)])
796
-
797
- plt.subplots(figsize=(6, 6))
792
+ plt.subplots(figsize=(1.5 * np.sqrt(len(nodes)), 1.5 * np.sqrt(len(nodes))))
798
793
 
799
794
  # Draw the graph
800
795
  visualization.mpl_draw(
@@ -803,7 +798,7 @@ def plot_layout_fidelity_graph(
803
798
  node_color=node_colors,
804
799
  pos=pos,
805
800
  labels=lambda node: node,
806
- width=7 * weights_ordered / np.max(weights_ordered),
801
+ width=5 * weights / np.max(weights),
807
802
  ) # type: ignore[call-arg]
808
803
 
809
804
  # Add edge labels using matplotlib's annotate
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iqm-benchmarks
3
- Version: 2.26
3
+ Version: 2.27
4
4
  Summary: A package for implementation of Quantum Characterization, Verification and Validation (QCVV) techniques on IQM's hardware at gate level abstraction
5
5
  Author-email: IQM Finland Oy <developers@meetiqm.com>, Adrian Auer <adrian.auer@meetiqm.com>, Raphael Brieger <raphael.brieger@meetiqm.com>, Alessio Calzona <alessio.calzona@meetiqm.com>, Pedro Figueroa Romero <pedro.romero@meetiqm.com>, Amin Hosseinkhani <amin.hosseinkhani@meetiqm.com>, Miikka Koistinen <miikka@meetiqm.com>, Nadia Milazzo <nadia.milazzo@meetiqm.com>, Vicente Pina Canelles <vicente.pina@meetiqm.com>, Aniket Rath <aniket.rath@meetiqm.com>, Jami Rönkkö <jami@meetiqm.com>, Stefan Seegerer <stefan.seegerer@meetiqm.com>
6
6
  Project-URL: Homepage, https://github.com/iqm-finland/iqm-benchmarks
@@ -16,10 +16,11 @@ Requires-Dist: matplotlib<4,>=3.6.3
16
16
  Requires-Dist: more-itertools<11.0.0,>=10.1.0
17
17
  Requires-Dist: mthree<2.7,>=2.6
18
18
  Requires-Dist: networkx<4.0,>=3.3
19
- Requires-Dist: rustworkx>=0.15.1
19
+ Requires-Dist: rustworkx>=0.16.0
20
20
  Requires-Dist: numpy<2.0,>=1.25.2
21
- Requires-Dist: qiskit<2.0,>=1.0
22
- Requires-Dist: qiskit-iqm<16.0,>=15.1
21
+ Requires-Dist: qiskit<2.0,>=1.2.4
22
+ Requires-Dist: qiskit-iqm<18.0,>=17.8
23
+ Requires-Dist: iqm-client>=22.7
23
24
  Requires-Dist: scikit-optimize<0.11.0,>=0.10.2
24
25
  Requires-Dist: tabulate<1.0.0,>=0.9.0
25
26
  Requires-Dist: uncertainties<3.3.0,>=3.2.2
@@ -4,20 +4,20 @@ iqm/benchmarks/benchmark_definition.py,sha256=e4xe0wlWKZqj48_6-zTglMaMeoiA9aGkHr
4
4
  iqm/benchmarks/circuit_containers.py,sha256=anEtZEsodYqOX-34oZRmuKGeEpp_VfgG5045Mz4-4hI,7562
5
5
  iqm/benchmarks/logging_config.py,sha256=U7olP5Kr75AcLJqNODf9VBhJLVqIvA4AYR6J39D5rww,1052
6
6
  iqm/benchmarks/readout_mitigation.py,sha256=Q2SOGWTNgmklOYkNxepAaSaXlxSj0QQyymYY1bOkT8A,11756
7
- iqm/benchmarks/utils.py,sha256=_1iLsc-azCE4ucHlD1LLRPdTryUKaMs8r75q3njRugE,33451
7
+ iqm/benchmarks/utils.py,sha256=4Yd1Qa5v8JKW8wEu8b4a1a30twJUOWlY0K-JlW9h5k4,33328
8
8
  iqm/benchmarks/compressive_gst/__init__.py,sha256=LneifgYXtcwo2jcXo7GdUEHL6_peipukShhkrdaTRCA,929
9
9
  iqm/benchmarks/compressive_gst/compressive_gst.py,sha256=2kiRttog4jR-vtMHu847GTFe5qL_i_uYr_4WMGqt9Ww,25653
10
- iqm/benchmarks/compressive_gst/gst_analysis.py,sha256=SZ4IbRYDTDTc_5DK7wXOeP_QIY48vA63I7JkPdwVbgs,36374
10
+ iqm/benchmarks/compressive_gst/gst_analysis.py,sha256=jA1MaXIyPBwxbN36mTjn_jKaRO5-NdoG0YV-RaujU3s,36450
11
11
  iqm/benchmarks/entanglement/__init__.py,sha256=9T7prOwqMmFWdb4t6ETAHZXKK5o6FvU2DvVb6WhNi-U,682
12
- iqm/benchmarks/entanglement/ghz.py,sha256=jSPcdFf1Xsq09EJXKCVHzNXjQIdAoDg859279wKGjaQ,41075
12
+ iqm/benchmarks/entanglement/ghz.py,sha256=RGA6ynJFsfaCJv0nKccsiIzPk2G-iHHvIeW8LVu30HY,41249
13
13
  iqm/benchmarks/optimization/__init__.py,sha256=_ajW_OibYLCtzU5AUv5c2zuuVYn8ZNeZUcUUSIGt51M,747
14
- iqm/benchmarks/optimization/qscore.py,sha256=ufkIKuh0XtiSVn-3Deca-7Ky1cXZ1CxCXMN-j-Lhevw,38132
14
+ iqm/benchmarks/optimization/qscore.py,sha256=KOw8fjXeMwCjYvKukpX7IiAqRQrVTkrnIgKjNCPVWdw,38130
15
15
  iqm/benchmarks/quantum_volume/__init__.py,sha256=i-Q4SpDWELBw7frXnxm1j4wJRcxbIyrS5uEK_v06YHo,951
16
- iqm/benchmarks/quantum_volume/clops.py,sha256=xlziaxjhJUNyHjBCMzMLeJ9PcFNBtDO7urKvCTBb4sI,31471
16
+ iqm/benchmarks/quantum_volume/clops.py,sha256=fD_eh10qHv_W-_mCA-PjPDIxNJ5sqD7yDkK1UjRsAAo,31474
17
17
  iqm/benchmarks/quantum_volume/quantum_volume.py,sha256=4ll3R8AX-BA599TEaMBzE2rJtAzHLtCkq8CaSkJfA0Y,36626
18
18
  iqm/benchmarks/randomized_benchmarking/__init__.py,sha256=IkKo-7zUChxZZd3my_csQCJfJfZNsV3-JTvdG8uqys4,734
19
- iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl,sha256=vvSd0pRWxtzyirohO9yf_58mjevkc2-pbuWIEb-4gaw,46928
20
- iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl,sha256=ZipqU3crPhz2T35qGFgB4GvMyoi_7pnu8NqW5ZP8NXg,90707258
19
+ iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl,sha256=yrmSJqhv7Lb1yqiqU9-2baqTljJPNmTUPQR-AH6GGfc,7800
20
+ iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl,sha256=mJQLubWPOb-DbmFi4oKYJqAMW_Yyo3eJjRjLGl9Sqmo,10282247
21
21
  iqm/benchmarks/randomized_benchmarking/multi_lmfit.py,sha256=Se1ygR4mXn_2_P82Ch31KBnCmY-g_A9NKzE9Ir8nEvw,3247
22
22
  iqm/benchmarks/randomized_benchmarking/randomized_benchmarking_common.py,sha256=pe9wSFvQ6Vh7rWZNZalIKOeaHoXc8iT4pkvrcLmY75g,42352
23
23
  iqm/benchmarks/randomized_benchmarking/clifford_rb/__init__.py,sha256=bTDA156LAl7OLGcMec--1nzDrV1XpPRVq3CquTmucgE,677
@@ -25,19 +25,19 @@ iqm/benchmarks/randomized_benchmarking/clifford_rb/clifford_rb.py,sha256=IGBrq_a
25
25
  iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py,sha256=sq6MgN_hwlpkOj10vyCU4e6eKSX-oLcF2L9na6W2Gt4,681
26
26
  iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py,sha256=TaR1YFWBhOgm1hmEQzuwLYpp0yl0Xpuo3jAT6YhiXpc,28471
27
27
  iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py,sha256=ZekEqI_89nXzGO1vjM-b5Uwwicy59M4fYHXfA-f0MIg,674
28
- iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py,sha256=QAivrFMV98JELa28tTV4DkW7XKuSU2I5sL6lkg6syUs,34994
29
- iqm_benchmarks-2.26.dist-info/licenses/LICENSE,sha256=2Ncb40-hqkTil78RPv3-YiJfKaJ8te9USJgliKqIdSY,11558
28
+ iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py,sha256=_xdp8XLPcZyuqy7Xz8-K8H7zjgRo9ZxFiDgCXE72gaE,34997
29
+ iqm_benchmarks-2.27.dist-info/licenses/LICENSE,sha256=2Ncb40-hqkTil78RPv3-YiJfKaJ8te9USJgliKqIdSY,11558
30
30
  mGST/LICENSE,sha256=TtHNq55cUcbglb7uhVudeBLUh_qPdUoAEvU0BBwFz-k,1098
31
31
  mGST/README.md,sha256=v_5kw253csHF4-RfE-44KqFmBXIsSMRmOtN0AUPrRxE,5050
32
32
  mGST/additional_fns.py,sha256=_SEJ10FRNM7_CroysT8hCLZTfpm6ZhEIDCY5zPTnhjo,31390
33
- mGST/algorithm.py,sha256=SRwC1sVFShRVxQDfH1bhUvnquvgwJFLSiZ70qo5SwxE,26314
33
+ mGST/algorithm.py,sha256=QnxLJtxZysggLUtbZE-c2MWaFclZB2XUVJhvrmUvjVs,26315
34
34
  mGST/compatibility.py,sha256=00DsPnNfOtrQcDTvxBDs-0aMhmuXmOIIxl_Ohy-Emkg,8920
35
35
  mGST/low_level_jit.py,sha256=uE1D3v01FbPpsbP92C4220OQalzOfxgL1Ku89BNkxLY,27377
36
36
  mGST/optimization.py,sha256=YHwkzIkYvsZOPjclR-BCQWh24jeqjuXp0BB0WX5Lwow,10559
37
37
  mGST/qiskit_interface.py,sha256=ajx6Zn5FnrX_T7tMP8xnBLyG4c2ddFRm0Fu2_3r1t30,10118
38
38
  mGST/reporting/figure_gen.py,sha256=6Xd8vwfy09hLY1YbJY6TRevuMsQSU4MsWqemly3ZO0I,12970
39
39
  mGST/reporting/reporting.py,sha256=B8NWfpZrrSmyH7lwZxd0EbZMYLsAGK1YsHRB4D5qXH4,26002
40
- iqm_benchmarks-2.26.dist-info/METADATA,sha256=yrczoXmgJh34bMhbo-XTomCKT9XowiP6hw61tpxacUQ,10555
41
- iqm_benchmarks-2.26.dist-info/WHEEL,sha256=tTnHoFhvKQHCh4jz3yCn0WPTYIy7wXx3CJtJ7SJGV7c,91
42
- iqm_benchmarks-2.26.dist-info/top_level.txt,sha256=3G23Z-1LGf-IOzTCUl6QwWqiQ3USz25Zt90Ihq192to,9
43
- iqm_benchmarks-2.26.dist-info/RECORD,,
40
+ iqm_benchmarks-2.27.dist-info/METADATA,sha256=Kk7NahsiPhEhEGtiR8CWkDNuUZCtysZTwu1QBRHlK2U,10589
41
+ iqm_benchmarks-2.27.dist-info/WHEEL,sha256=L0N565qmK-3nM2eBoMNFszYJ_MTx03_tQ0CQu1bHLYo,91
42
+ iqm_benchmarks-2.27.dist-info/top_level.txt,sha256=3G23Z-1LGf-IOzTCUl6QwWqiQ3USz25Zt90Ihq192to,9
43
+ iqm_benchmarks-2.27.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (77.0.1)
2
+ Generator: setuptools (78.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
mGST/algorithm.py CHANGED
@@ -727,7 +727,7 @@ def run_mGST(
727
727
  qcvv_logger.info(f"Convergence criterion satisfied")
728
728
  else:
729
729
  qcvv_logger.info(
730
- f"Convergence criterion not satisfied,inspect results and consider increasing max_iter or using new initializations.",
730
+ f"Convergence criterion not satisfied, inspect results and consider increasing max_iter or using new initializations.",
731
731
  )
732
732
  qcvv_logger.info(
733
733
  f"Final objective {Decimal(res_list[-1]):.2e} in time {(time.time() - t0):.2f}s",