iqm-benchmarks 2.51__py3-none-any.whl → 2.53__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.
- iqm/benchmarks/entanglement/ghz.py +129 -21
- iqm/benchmarks/optimization/qscore.py +42 -32
- {iqm_benchmarks-2.51.dist-info → iqm_benchmarks-2.53.dist-info}/METADATA +1 -1
- {iqm_benchmarks-2.51.dist-info → iqm_benchmarks-2.53.dist-info}/RECORD +7 -7
- {iqm_benchmarks-2.51.dist-info → iqm_benchmarks-2.53.dist-info}/WHEEL +0 -0
- {iqm_benchmarks-2.51.dist-info → iqm_benchmarks-2.53.dist-info}/licenses/LICENSE +0 -0
- {iqm_benchmarks-2.51.dist-info → iqm_benchmarks-2.53.dist-info}/top_level.txt +0 -0
|
@@ -25,7 +25,7 @@ import matplotlib.pyplot as plt
|
|
|
25
25
|
import networkx
|
|
26
26
|
from networkx import Graph, all_pairs_shortest_path, is_connected, minimum_spanning_tree
|
|
27
27
|
import numpy as np
|
|
28
|
-
from qiskit import QuantumRegister
|
|
28
|
+
from qiskit import ClassicalRegister, QuantumRegister
|
|
29
29
|
from qiskit.quantum_info import random_clifford
|
|
30
30
|
from qiskit.transpiler import CouplingMap
|
|
31
31
|
from qiskit_aer import Aer
|
|
@@ -55,6 +55,7 @@ from iqm.benchmarks.utils import (
|
|
|
55
55
|
xrvariable_to_counts,
|
|
56
56
|
)
|
|
57
57
|
from iqm.qiskit_iqm import IQMCircuit as QuantumCircuit
|
|
58
|
+
from iqm.qiskit_iqm import transpile_to_IQM
|
|
58
59
|
from iqm.qiskit_iqm.iqm_backend import IQMBackendBase
|
|
59
60
|
|
|
60
61
|
|
|
@@ -304,6 +305,74 @@ def generate_ghz_log_cruz(num_qubits: int) -> QuantumCircuit:
|
|
|
304
305
|
return qc
|
|
305
306
|
|
|
306
307
|
|
|
308
|
+
## can introduce another fucntion to time order here CZ and pick the best MOVE qubit.
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def generate_ghz_star_optimal(
|
|
312
|
+
qubit_layout: List[int], cal_url: str, backend: IQMBackendBase, inv: bool = False
|
|
313
|
+
) -> QuantumCircuit:
|
|
314
|
+
"""
|
|
315
|
+
Generates the circuit for creating a GHZ state by maximizing the number of CZ gates between a pair of MOVE gates.
|
|
316
|
+
|
|
317
|
+
Args:
|
|
318
|
+
qubit_layout: List[int]
|
|
319
|
+
The layout of qubits for the GHZ state.
|
|
320
|
+
cal_url: str
|
|
321
|
+
The calibration URL for extracting fidelities.
|
|
322
|
+
backend: IQMBackendBase
|
|
323
|
+
The backend to be used for the quantum circuit.
|
|
324
|
+
inv: bool
|
|
325
|
+
Whether to generate the inverse circuit.
|
|
326
|
+
|
|
327
|
+
Returns:
|
|
328
|
+
QuantumCircuit: A quantum circuit generating a GHZ state on a given number of qubits.
|
|
329
|
+
"""
|
|
330
|
+
num_qubits = len(qubit_layout)
|
|
331
|
+
|
|
332
|
+
# Initialize quantum and classical registers
|
|
333
|
+
comp_r = QuantumRegister(1, "comp_r") # Computational resonator
|
|
334
|
+
q = QuantumRegister(backend.num_qubits, "q") # Qubits
|
|
335
|
+
c = ClassicalRegister(num_qubits, "c")
|
|
336
|
+
qc = QuantumCircuit(comp_r, q, c, name="GHZ_star_optimal")
|
|
337
|
+
|
|
338
|
+
cal_data = extract_fidelities(cal_url, all_metrics=True)
|
|
339
|
+
# Determine the best move qubit
|
|
340
|
+
move_dict = {q + 1: cal_data[1][q] for q in qubit_layout} ## +1 to match qubit indexing in cal data
|
|
341
|
+
best_move = max(move_dict, key=move_dict.get)
|
|
342
|
+
|
|
343
|
+
T2 = cal_data[-1]["t2_echo_time"]
|
|
344
|
+
t2_dict = {qubit + 1: T2[qubit + 1] for qubit in qubit_layout} ## +1 to match qubit indexing in cal data
|
|
345
|
+
cz_order = dict(sorted(t2_dict.items(), key=lambda item: item[1], reverse=True))
|
|
346
|
+
qubits_to_measure = list(cz_order.keys())
|
|
347
|
+
cz_order.pop(best_move)
|
|
348
|
+
|
|
349
|
+
# Construct the quantum circuit
|
|
350
|
+
qc.h(best_move)
|
|
351
|
+
qc.move(best_move, 0)
|
|
352
|
+
for qubit in cz_order.keys():
|
|
353
|
+
qc.cx(0, qubit)
|
|
354
|
+
qc.barrier()
|
|
355
|
+
qc.move(best_move, 0)
|
|
356
|
+
qc.barrier()
|
|
357
|
+
qc.measure(sorted(qubits_to_measure), list(range(num_qubits)))
|
|
358
|
+
|
|
359
|
+
if inv:
|
|
360
|
+
comp_r = QuantumRegister(1, "comp_r") # Computational resonator
|
|
361
|
+
q = QuantumRegister(backend.num_qubits, "q") # Qubits
|
|
362
|
+
c = ClassicalRegister(num_qubits, "c")
|
|
363
|
+
qc = QuantumCircuit(comp_r, q, c, name="GHZ_star_optimal_inv")
|
|
364
|
+
|
|
365
|
+
qc.move(best_move, 0)
|
|
366
|
+
for qubit in reversed(cz_order.keys()):
|
|
367
|
+
qc.cx(0, qubit)
|
|
368
|
+
qc.barrier()
|
|
369
|
+
qc.move(best_move, 0)
|
|
370
|
+
qc.h(best_move)
|
|
371
|
+
qc.barrier()
|
|
372
|
+
|
|
373
|
+
return qc
|
|
374
|
+
|
|
375
|
+
|
|
307
376
|
def generate_ghz_star(num_qubits: int) -> QuantumCircuit:
|
|
308
377
|
"""
|
|
309
378
|
Generates the circuit for creating a GHZ state by maximizing the number of CZ gates between a pair of MOVE gates.
|
|
@@ -648,7 +717,20 @@ class GHZBenchmark(Benchmark):
|
|
|
648
717
|
optimize_sqg=self.optimize_sqg,
|
|
649
718
|
)
|
|
650
719
|
final_ghz = ghz_native_transpiled
|
|
651
|
-
|
|
720
|
+
elif routine == "star_optimal":
|
|
721
|
+
if self.cal_url is None:
|
|
722
|
+
raise ValueError("Calibration URL must be provided for 'star_optimal' routine.")
|
|
723
|
+
ghz = generate_ghz_star_optimal(qubit_layout, self.cal_url, self.backend)
|
|
724
|
+
circuit_group.add_circuit(ghz)
|
|
725
|
+
ghz_native_transpiled = transpile_to_IQM(
|
|
726
|
+
ghz,
|
|
727
|
+
self.backend,
|
|
728
|
+
existing_moves_handling=True,
|
|
729
|
+
perform_move_routing=False,
|
|
730
|
+
optimize_single_qubits=self.optimize_sqg,
|
|
731
|
+
optimization_level=self.qiskit_optim_level,
|
|
732
|
+
)
|
|
733
|
+
final_ghz = [ghz_native_transpiled]
|
|
652
734
|
else:
|
|
653
735
|
ghz_log = [generate_ghz_log_cruz(qubit_count), generate_ghz_log_mooney(qubit_count)]
|
|
654
736
|
ghz_native_transpiled, _ = perform_backend_transpilation(
|
|
@@ -691,27 +773,54 @@ class GHZBenchmark(Benchmark):
|
|
|
691
773
|
|
|
692
774
|
qc = qc_list[0].copy()
|
|
693
775
|
qc.remove_final_measurements()
|
|
694
|
-
qc_inv = qc.inverse()
|
|
695
776
|
phases = [np.pi * i / (qubit_count + 1) for i in range(2 * qubit_count + 2)]
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
qc_phase.
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
777
|
+
if self.state_generation_routine == "star_optimal":
|
|
778
|
+
qc_inv = generate_ghz_star_optimal(qubit_layout, self.cal_url, self.backend, inv=True)
|
|
779
|
+
for phase in phases:
|
|
780
|
+
qc_phase = qc.copy()
|
|
781
|
+
qc_phase.barrier()
|
|
782
|
+
for _, qubit in enumerate(qubit_layout):
|
|
783
|
+
qc_phase.p(phase, qubit + 1)
|
|
784
|
+
qc_phase.barrier()
|
|
785
|
+
qc_phase.compose(qc_inv, inplace=True)
|
|
786
|
+
qc_phase.measure([q + 1 for q in qubit_layout], list(range(qubit_count)))
|
|
787
|
+
qc_list.append(qc_phase)
|
|
788
|
+
else:
|
|
789
|
+
qc_inv = qc.inverse()
|
|
790
|
+
for phase in phases:
|
|
791
|
+
qc_phase = qc.copy()
|
|
792
|
+
qc_phase.barrier()
|
|
793
|
+
for qubit, _ in enumerate(qubit_layout):
|
|
794
|
+
qc_phase.p(phase, qubit)
|
|
795
|
+
qc_phase.barrier()
|
|
796
|
+
qc_phase.compose(qc_inv, inplace=True)
|
|
797
|
+
qc_phase.measure_active()
|
|
798
|
+
qc_list.append(qc_phase)
|
|
705
799
|
|
|
706
800
|
fixed_coupling_map = set_coupling_map(qubit_layout, self.backend, "fixed")
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
801
|
+
|
|
802
|
+
if self.state_generation_routine == "star_optimal":
|
|
803
|
+
qc_list_transpiled = [
|
|
804
|
+
transpile_to_IQM(
|
|
805
|
+
ghz,
|
|
806
|
+
self.backend,
|
|
807
|
+
existing_moves_handling=True,
|
|
808
|
+
perform_move_routing=False,
|
|
809
|
+
optimize_single_qubits=self.optimize_sqg,
|
|
810
|
+
optimization_level=self.qiskit_optim_level,
|
|
811
|
+
)
|
|
812
|
+
for ghz in qc_list
|
|
813
|
+
]
|
|
814
|
+
|
|
815
|
+
else:
|
|
816
|
+
qc_list_transpiled, _ = perform_backend_transpilation(
|
|
817
|
+
qc_list,
|
|
818
|
+
self.backend,
|
|
819
|
+
qubit_layout,
|
|
820
|
+
fixed_coupling_map,
|
|
821
|
+
qiskit_optim_level=self.qiskit_optim_level,
|
|
822
|
+
optimize_sqg=self.optimize_sqg,
|
|
823
|
+
)
|
|
715
824
|
circuit_group = CircuitGroup(name=idx, circuits=qc_list)
|
|
716
825
|
self.circuits["untranspiled_circuits"].circuit_groups.append(circuit_group)
|
|
717
826
|
return qc_list_transpiled
|
|
@@ -791,7 +900,6 @@ class GHZBenchmark(Benchmark):
|
|
|
791
900
|
transpiled_ghz_group: CircuitGroup = self.generate_native_ghz(
|
|
792
901
|
qubit_layout, qubit_count, self.state_generation_routine
|
|
793
902
|
)
|
|
794
|
-
|
|
795
903
|
match self.fidelity_routine:
|
|
796
904
|
case "randomized_measurements":
|
|
797
905
|
all_circuits_list, _ = self.append_rms(cast(int, self.num_RMs), qubit_layout)
|
|
@@ -541,12 +541,12 @@ def qscore_analysis(run: BenchmarkRunResult) -> BenchmarkAnalysisResult:
|
|
|
541
541
|
|
|
542
542
|
if success:
|
|
543
543
|
qcvv_logger.info(
|
|
544
|
-
f"Q-Score = {num_nodes} passed with approximation ratio (Beta) {approximation_ratio:.4f}; Avg MaxCut size: {np.mean(cut_sizes_list):.4f}"
|
|
544
|
+
f"Q-Score = {num_nodes} passed with approximation ratio (Beta) {approximation_ratio:.4f} ± {std_of_approximation_ratio:.4f} with uncertainty; Avg MaxCut size: {np.mean(cut_sizes_list):.4f}"
|
|
545
545
|
)
|
|
546
546
|
qscore = num_nodes
|
|
547
547
|
else:
|
|
548
548
|
qcvv_logger.info(
|
|
549
|
-
f"Q-Score = {num_nodes} failed with approximation ratio (Beta) {approximation_ratio:.4f} < 0.2; Avg MaxCut size: {np.mean(cut_sizes_list):.4f}"
|
|
549
|
+
f"Q-Score = {num_nodes} failed with approximation ratio (Beta) {approximation_ratio:.4f} ± {std_of_approximation_ratio:.4f} < 0.2; Avg MaxCut size: {np.mean(cut_sizes_list):.4f}"
|
|
550
550
|
)
|
|
551
551
|
qubit_indices = dataset.attrs[num_nodes]["qubit_set"][0]
|
|
552
552
|
observations.extend(
|
|
@@ -726,31 +726,40 @@ class QScoreBenchmark(Benchmark):
|
|
|
726
726
|
|
|
727
727
|
def generate_maxcut_ansatz_star( # pylint: disable=too-many-branches
|
|
728
728
|
self,
|
|
729
|
-
graph,
|
|
730
|
-
theta,
|
|
729
|
+
graph: Graph,
|
|
730
|
+
theta: list[float],
|
|
731
|
+
qubit_set: Optional[list[int]] = None,
|
|
731
732
|
):
|
|
732
733
|
"""Generate an ansatz circuit for QAOA MaxCut, with measurements at the end.
|
|
733
734
|
|
|
734
735
|
Args:
|
|
735
736
|
graph (networkx graph): the MaxCut problem graph
|
|
736
737
|
theta (list[float]): the variational parameters for QAOA, first gammas then betas
|
|
738
|
+
qubit_set (list[int]): the qubit set to be used for the ansatz
|
|
737
739
|
|
|
738
740
|
Returns:
|
|
739
741
|
QuantumCircuit: the QAOA ansatz quantum circuit.
|
|
740
742
|
"""
|
|
741
|
-
|
|
742
743
|
gamma = theta[: self.num_qaoa_layers]
|
|
743
744
|
beta = theta[self.num_qaoa_layers :]
|
|
744
|
-
|
|
745
|
+
if qubit_set is None:
|
|
746
|
+
qubit_set_resonator = list(range(self.graph_physical.number_of_nodes() + 1))
|
|
747
|
+
qubit_set_resonator = [q + 1 for q in qubit_set_resonator]
|
|
748
|
+
else:
|
|
749
|
+
qubit_set_resonator = [q + 1 for q in qubit_set]
|
|
745
750
|
if self.graph_physical.number_of_nodes() != graph.number_of_nodes():
|
|
746
751
|
num_qubits = self.graph_physical.number_of_nodes()
|
|
747
752
|
# re-label the nodes to be between 0 and _num_qubits
|
|
748
|
-
self.node_to_qubit = {
|
|
753
|
+
self.node_to_qubit = {
|
|
754
|
+
node: qubit_set_resonator[qubit] for qubit, node in enumerate(list(self.graph_physical.nodes))
|
|
755
|
+
}
|
|
749
756
|
self.qubit_to_node = dict(enumerate(list(self.graph_physical.nodes)))
|
|
750
757
|
else:
|
|
751
758
|
num_qubits = graph.number_of_nodes()
|
|
752
|
-
self.node_to_qubit = {
|
|
753
|
-
|
|
759
|
+
self.node_to_qubit = {
|
|
760
|
+
node: qubit_set_resonator[node] for node in list(self.graph_physical.nodes)
|
|
761
|
+
} # no relabeling
|
|
762
|
+
self.qubit_to_node = {node: node for node in list(self.graph_physical.nodes)}
|
|
754
763
|
|
|
755
764
|
covermap = self.greedy_vertex_cover_with_mapping(self.graph_physical)
|
|
756
765
|
new_covermap = {}
|
|
@@ -759,20 +768,22 @@ class QScoreBenchmark(Benchmark):
|
|
|
759
768
|
covermap = new_covermap
|
|
760
769
|
|
|
761
770
|
compr = QuantumRegister(1, "compr")
|
|
762
|
-
q = QuantumRegister(num_qubits, "q")
|
|
771
|
+
q = QuantumRegister(self.backend.num_qubits, "q")
|
|
763
772
|
c = ClassicalRegister(num_qubits, "c")
|
|
764
|
-
qaoa_qc = IQMCircuit(compr, q, c)
|
|
773
|
+
qaoa_qc = IQMCircuit(compr, q, c)
|
|
774
|
+
qubit_list = list(self.node_to_qubit.values())
|
|
775
|
+
|
|
765
776
|
# in case the graph is trivial: return empty circuit
|
|
766
777
|
if num_qubits == 0:
|
|
767
778
|
return QuantumCircuit(1)
|
|
768
|
-
for i in
|
|
779
|
+
for i in qubit_list:
|
|
769
780
|
qaoa_qc.h(i)
|
|
770
781
|
for layer in range(self.num_qaoa_layers):
|
|
771
782
|
for move_qubit, edge_qubits in covermap.items():
|
|
772
|
-
qaoa_qc.move(move_qubit
|
|
783
|
+
qaoa_qc.move(move_qubit, 0)
|
|
773
784
|
for edge_qubit in edge_qubits:
|
|
774
|
-
qaoa_qc.rzz(2 * gamma[layer], 0, edge_qubit
|
|
775
|
-
qaoa_qc.move(move_qubit
|
|
785
|
+
qaoa_qc.rzz(2 * gamma[layer], 0, edge_qubit)
|
|
786
|
+
qaoa_qc.move(move_qubit, 0)
|
|
776
787
|
|
|
777
788
|
# include edges of the virtual node as rz terms
|
|
778
789
|
for vn in self.virtual_nodes:
|
|
@@ -784,13 +795,13 @@ class QScoreBenchmark(Benchmark):
|
|
|
784
795
|
sign = 1.0
|
|
785
796
|
if vn[1] == 1:
|
|
786
797
|
sign = -1.0
|
|
787
|
-
qaoa_qc.rz(sign * 2.0 * gamma[layer], self.node_to_qubit[edge[1]]
|
|
798
|
+
qaoa_qc.rz(sign * 2.0 * gamma[layer], self.node_to_qubit[edge[1]])
|
|
788
799
|
|
|
789
|
-
for i in
|
|
800
|
+
for i in qubit_list:
|
|
790
801
|
qaoa_qc.rx(2 * beta[layer], i)
|
|
791
|
-
qaoa_qc.barrier()
|
|
792
|
-
qaoa_qc.measure(q, c)
|
|
793
802
|
|
|
803
|
+
qaoa_qc.barrier()
|
|
804
|
+
qaoa_qc.measure(qubit_list, list(range(num_qubits)))
|
|
794
805
|
return qaoa_qc
|
|
795
806
|
|
|
796
807
|
def generate_maxcut_ansatz( # pylint: disable=too-many-branches
|
|
@@ -923,8 +934,6 @@ class QScoreBenchmark(Benchmark):
|
|
|
923
934
|
dataset = xr.Dataset()
|
|
924
935
|
self.add_all_meta_to_dataset(dataset)
|
|
925
936
|
|
|
926
|
-
nqubits = self.backend.num_qubits
|
|
927
|
-
|
|
928
937
|
if self.choose_qubits_routine == "custom":
|
|
929
938
|
if self.use_virtual_node:
|
|
930
939
|
node_numbers = [len(qubit_layout) + 1 for qubit_layout in self.custom_qubits_array]
|
|
@@ -932,11 +941,8 @@ class QScoreBenchmark(Benchmark):
|
|
|
932
941
|
node_numbers = [len(qubit_layout) for qubit_layout in self.custom_qubits_array]
|
|
933
942
|
|
|
934
943
|
else:
|
|
935
|
-
if self.
|
|
936
|
-
|
|
937
|
-
max_num_nodes = nqubits + 1
|
|
938
|
-
else:
|
|
939
|
-
max_num_nodes = nqubits
|
|
944
|
+
if self.use_virtual_node: ## if nqubits are used then with virtual node, max_num_nodes is nqubits + 1
|
|
945
|
+
max_num_nodes = self.max_num_nodes + 1
|
|
940
946
|
else:
|
|
941
947
|
max_num_nodes = self.max_num_nodes
|
|
942
948
|
node_numbers = list(range(self.min_num_nodes, max_num_nodes + 1))
|
|
@@ -1031,24 +1037,29 @@ class QScoreBenchmark(Benchmark):
|
|
|
1031
1037
|
else:
|
|
1032
1038
|
theta = get_optimal_angles(self.num_qaoa_layers)
|
|
1033
1039
|
|
|
1034
|
-
theta_list.append(theta)
|
|
1035
|
-
|
|
1036
1040
|
if self.backend.has_resonators():
|
|
1037
|
-
qc_opt = self.generate_maxcut_ansatz_star(graph, theta)
|
|
1041
|
+
qc_opt = self.generate_maxcut_ansatz_star(graph, theta, active_qubit_set)
|
|
1038
1042
|
else:
|
|
1039
1043
|
qc_list_temp = []
|
|
1040
1044
|
cz_count_temp = []
|
|
1045
|
+
theta_temp = []
|
|
1041
1046
|
for _ in range(self.num_trials):
|
|
1042
1047
|
perm = np.random.permutation(num_nodes)
|
|
1043
1048
|
mapping = dict(zip(graph.nodes, perm))
|
|
1044
1049
|
G1_permuted = nx.relabel_nodes(graph, mapping)
|
|
1045
|
-
theta =
|
|
1050
|
+
theta = (
|
|
1051
|
+
calculate_optimal_angles_for_QAOA_p1(G1_permuted)
|
|
1052
|
+
if G1_permuted.number_of_edges() != 0
|
|
1053
|
+
else [1.0, 1.0]
|
|
1054
|
+
)
|
|
1046
1055
|
qc_perm = self.generate_maxcut_ansatz(G1_permuted, theta)
|
|
1047
1056
|
transpiled_qc_temp, _ = perform_backend_transpilation([qc_perm], **transpilation_params)
|
|
1048
1057
|
cz_count_temp.append(transpiled_qc_temp[0].count_ops().get("cz", 0))
|
|
1049
1058
|
qc_list_temp.append(qc_perm)
|
|
1059
|
+
theta_temp.append(theta)
|
|
1050
1060
|
min_cz_index = cz_count_temp.index(min(cz_count_temp))
|
|
1051
1061
|
qc_opt = qc_list_temp[min_cz_index]
|
|
1062
|
+
theta_list.append(theta_temp[min_cz_index])
|
|
1052
1063
|
|
|
1053
1064
|
if len(qc_opt.count_ops()) != 0:
|
|
1054
1065
|
qc_list.append(qc_opt)
|
|
@@ -1144,7 +1155,6 @@ class QScoreConfiguration(BenchmarkConfigurationBase):
|
|
|
1144
1155
|
min_num_nodes (int): The min number of nodes to be taken into account, which should be >= 2.
|
|
1145
1156
|
* Default is 2.
|
|
1146
1157
|
max_num_nodes (int): The max number of nodes to be taken into account, which has to be <= num_qubits + 1.
|
|
1147
|
-
* Default is None
|
|
1148
1158
|
use_virtual_node (bool): Parameter to increase the potential Qscore by +1.
|
|
1149
1159
|
* Default is True.
|
|
1150
1160
|
use_classically_optimized_angles (bool): Use pre-optimised tuned parameters in the QAOA circuit.
|
|
@@ -1174,7 +1184,7 @@ class QScoreConfiguration(BenchmarkConfigurationBase):
|
|
|
1174
1184
|
num_instances: int
|
|
1175
1185
|
num_qaoa_layers: int = 1
|
|
1176
1186
|
min_num_nodes: int = 2
|
|
1177
|
-
max_num_nodes:
|
|
1187
|
+
max_num_nodes: int
|
|
1178
1188
|
use_virtual_node: bool = True
|
|
1179
1189
|
use_classically_optimized_angles: bool = True
|
|
1180
1190
|
choose_qubits_routine: Literal["naive", "custom"] = "naive"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: iqm-benchmarks
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.53
|
|
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
|
|
@@ -13,10 +13,10 @@ iqm/benchmarks/compressive_gst/__init__.py,sha256=LneifgYXtcwo2jcXo7GdUEHL6_peip
|
|
|
13
13
|
iqm/benchmarks/compressive_gst/compressive_gst.py,sha256=_thQfc9qmIJqAcS3Kg4ITEYl8Ofi8xgC_oZotrmyzVk,28484
|
|
14
14
|
iqm/benchmarks/compressive_gst/gst_analysis.py,sha256=H6EQGbpI_sig69Jy6hflg6alMTtjB0t9tHftygzA2YA,41240
|
|
15
15
|
iqm/benchmarks/entanglement/__init__.py,sha256=sHVVToRWRCz0LSntk1rQaoSNNeyZLPoiTjUKWZWrk1E,778
|
|
16
|
-
iqm/benchmarks/entanglement/ghz.py,sha256=
|
|
16
|
+
iqm/benchmarks/entanglement/ghz.py,sha256=drTmV2JQi9ZYr2_Gl28aizFDbV4TQ2NYynsRou-6re0,45946
|
|
17
17
|
iqm/benchmarks/entanglement/graph_states.py,sha256=6qACedd3UXpiowXc9GW4QhSwO-CzHXnBA3dIC6nCIbE,62788
|
|
18
18
|
iqm/benchmarks/optimization/__init__.py,sha256=_ajW_OibYLCtzU5AUv5c2zuuVYn8ZNeZUcUUSIGt51M,747
|
|
19
|
-
iqm/benchmarks/optimization/qscore.py,sha256=
|
|
19
|
+
iqm/benchmarks/optimization/qscore.py,sha256=7JJIVrJvmec77kSdwM4YkwJJoNBCT-LuZ7Ay8JMZ7Nc,46847
|
|
20
20
|
iqm/benchmarks/quantum_volume/__init__.py,sha256=i-Q4SpDWELBw7frXnxm1j4wJRcxbIyrS5uEK_v06YHo,951
|
|
21
21
|
iqm/benchmarks/quantum_volume/clops.py,sha256=EUtO-_OYBYvwqb4xY3aubI2gc2Z6cBokRzt_E0608WA,31242
|
|
22
22
|
iqm/benchmarks/quantum_volume/quantum_volume.py,sha256=af9C4SdEPcYyZgQgtJYy2h_F8QWv1a0hEtN6hr4KeM0,36861
|
|
@@ -35,7 +35,7 @@ iqm/benchmarks/randomized_benchmarking/interleaved_rb/__init__.py,sha256=sq6MgN_
|
|
|
35
35
|
iqm/benchmarks/randomized_benchmarking/interleaved_rb/interleaved_rb.py,sha256=OHoAWajCE48dRDInwQUT8VvtzKad0ExefdqvZFTaYzs,28918
|
|
36
36
|
iqm/benchmarks/randomized_benchmarking/mirror_rb/__init__.py,sha256=jRKbivWCZ3xdO1k0sx-ygC3s5DUkGSModd975PoAtcg,692
|
|
37
37
|
iqm/benchmarks/randomized_benchmarking/mirror_rb/mirror_rb.py,sha256=ijieNymik3BeEUpXS-m64mtgdHz9iAFELuLooHeZY0E,33252
|
|
38
|
-
iqm_benchmarks-2.
|
|
38
|
+
iqm_benchmarks-2.53.dist-info/licenses/LICENSE,sha256=2Ncb40-hqkTil78RPv3-YiJfKaJ8te9USJgliKqIdSY,11558
|
|
39
39
|
mGST/LICENSE,sha256=TtHNq55cUcbglb7uhVudeBLUh_qPdUoAEvU0BBwFz-k,1098
|
|
40
40
|
mGST/README.md,sha256=v_5kw253csHF4-RfE-44KqFmBXIsSMRmOtN0AUPrRxE,5050
|
|
41
41
|
mGST/additional_fns.py,sha256=MV0Pm5ap59IjhT_E3QhsZyM7lXOF1RZ9SD11zoaf43A,31781
|
|
@@ -46,7 +46,7 @@ mGST/optimization.py,sha256=x9tJ9wMQ5aONWpNpBMVtK0rwE6DRcOU33htNgrt0tx4,11015
|
|
|
46
46
|
mGST/qiskit_interface.py,sha256=uCdn-Q9CXI2f4FQSxGUy8GmmzQhr9NhCOFb2VPj0gTs,10061
|
|
47
47
|
mGST/reporting/figure_gen.py,sha256=xFPAHx1Trdqz7swn0kRqwc_jbRaNxhG9Nvx0jeitooo,25847
|
|
48
48
|
mGST/reporting/reporting.py,sha256=Wss1-zFsMEhzrrXKfP-RICau80ezjDIzcN555KhSehc,34160
|
|
49
|
-
iqm_benchmarks-2.
|
|
50
|
-
iqm_benchmarks-2.
|
|
51
|
-
iqm_benchmarks-2.
|
|
52
|
-
iqm_benchmarks-2.
|
|
49
|
+
iqm_benchmarks-2.53.dist-info/METADATA,sha256=xEhFw6S0jM8KgTwQklUI9RvWzw6W3oQypPMpMue4-80,10968
|
|
50
|
+
iqm_benchmarks-2.53.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
51
|
+
iqm_benchmarks-2.53.dist-info/top_level.txt,sha256=3G23Z-1LGf-IOzTCUl6QwWqiQ3USz25Zt90Ihq192to,9
|
|
52
|
+
iqm_benchmarks-2.53.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|