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.
- iqm/benchmarks/compressive_gst/gst_analysis.py +6 -2
- iqm/benchmarks/entanglement/ghz.py +10 -10
- iqm/benchmarks/optimization/qscore.py +1 -1
- iqm/benchmarks/quantum_volume/clops.py +1 -1
- iqm/benchmarks/randomized_benchmarking/clifford_1q.pkl +0 -0
- iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl +0 -0
- iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py +1 -1
- iqm/benchmarks/utils.py +55 -60
- {iqm_benchmarks-2.26.dist-info → iqm_benchmarks-2.27.dist-info}/METADATA +5 -4
- {iqm_benchmarks-2.26.dist-info → iqm_benchmarks-2.27.dist-info}/RECORD +14 -14
- {iqm_benchmarks-2.26.dist-info → iqm_benchmarks-2.27.dist-info}/WHEEL +1 -1
- mGST/algorithm.py +1 -1
- {iqm_benchmarks-2.26.dist-info → iqm_benchmarks-2.27.dist-info}/licenses/LICENSE +0 -0
- {iqm_benchmarks-2.26.dist-info → iqm_benchmarks-2.27.dist-info}/top_level.txt +0 -0
|
@@ -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(
|
|
241
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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(
|
|
626
|
+
graph = get_edges(self.backend.coupling_map, qubit_layout, edges_cal, fidelities_cal)
|
|
629
627
|
else:
|
|
630
|
-
graph = get_edges(
|
|
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(
|
|
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
|
|
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.
|
|
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(
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|
|
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
|
|
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.
|
|
312
|
-
if
|
|
311
|
+
if "move" in backend.architecture.gates:
|
|
312
|
+
if backend.num_qubits in qubits:
|
|
313
313
|
raise ValueError(
|
|
314
|
-
"Label
|
|
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
|
-
|
|
317
|
-
transpiled = reduce_to_active_qubits(transpiled,
|
|
318
|
-
transpiled = aux_qc.compose(
|
|
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{'
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
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(
|
|
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.
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
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
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
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
|
-
|
|
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
|
|
669
|
-
pos = {
|
|
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
|
|
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=
|
|
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]
|
|
725
|
-
qb2 = int(item["locus"][1][2:]) if item["locus"][1]
|
|
726
|
-
|
|
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 = {
|
|
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
|
-
|
|
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=
|
|
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.
|
|
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.
|
|
19
|
+
Requires-Dist: rustworkx>=0.16.0
|
|
20
20
|
Requires-Dist: numpy<2.0,>=1.25.2
|
|
21
|
-
Requires-Dist: qiskit<2.0,>=1.
|
|
22
|
-
Requires-Dist: qiskit-iqm<
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
20
|
-
iqm/benchmarks/randomized_benchmarking/clifford_2q.pkl,sha256=
|
|
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=
|
|
29
|
-
iqm_benchmarks-2.
|
|
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=
|
|
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.
|
|
41
|
-
iqm_benchmarks-2.
|
|
42
|
-
iqm_benchmarks-2.
|
|
43
|
-
iqm_benchmarks-2.
|
|
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,,
|
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",
|
|
File without changes
|
|
File without changes
|