@@ -77,6 +77,10 @@ def noise_amplified_variances(self) -> ndarray:
77
77
def shots (self ) -> ndarray :
78
78
return asarray ([result .shots for result in self .noise_amplified_results ])
79
79
80
+ @property
81
+ def total_shots (self ) -> float :
82
+ return sum (result .shots for result in self .noise_amplified_results )
83
+
80
84
@property
81
85
def depths (self ) -> ndarray :
82
86
return asarray ([result .qc .depth () for result in self .noise_amplified_results ])
@@ -414,7 +418,7 @@ def write_to_file(self, filename: str, data):
414
418
# Functions for processing and executing the quantum circuits
415
419
416
420
def noise_amplify_and_pauli_twirl_cnots (self , qc : QuantumCircuit , amp_factor : int ,
417
- pauli_twirl : bool ) -> QuantumCircuit :
421
+ pauli_twirl : bool = False ) -> QuantumCircuit :
418
422
"""
419
423
Amplify CNOT-noise by extending each CNOT-gate as CNOT^amp_factor and possibly Pauli-twirl all CNOT-gates
420
424
@@ -1066,69 +1070,3 @@ def noise_amplify_cnots(qc: QuantumCircuit, amp_factor: int):
1066
1070
1067
1071
return new_qc
1068
1072
1069
- if __name__ == "__main__" :
1070
- def swaptest_exp_val_func (results , myfilter = None ):
1071
- exp_vals , variances = zeros (shape (results )), zeros (shape (results ))
1072
- for i , experiment_result in enumerate (results ):
1073
- shots = experiment_result .shots
1074
- counts = experiment_result .data .counts
1075
- eigenval = 0
1076
- esquared = 0
1077
- for key in counts .keys ():
1078
- if key == "0x0" :
1079
- eigenval = + 1
1080
- elif key == "0x1" :
1081
- eigenval = - 1
1082
- exp_vals [i ] += eigenval * counts [key ] / shots
1083
- esquared += counts [key ] / shots
1084
- variances [i ] = 1 - exp_vals [i ]** 2
1085
- return exp_vals , variances
1086
-
1087
- def add_swaptest_gate (qc , probe , q1 , q2 , barrier = False ):
1088
- qc .toffoli (probe , q1 , q2 )
1089
-
1090
- if barrier :
1091
- qc .barrier ()
1092
-
1093
- qc .toffoli (probe , q2 , q1 )
1094
-
1095
- if barrier :
1096
- qc .barrier ()
1097
-
1098
- qc .toffoli (probe , q1 , q2 )
1099
-
1100
-
1101
- def create_3qswaptest_circuit (barrier = False ):
1102
- qc = QuantumCircuit (3 , 1 )
1103
-
1104
- qc .h (0 )
1105
-
1106
- qc .h (1 )
1107
-
1108
- if barrier :
1109
- qc .barrier ()
1110
-
1111
- add_swaptest_gate (qc , 0 , 1 , 2 , barrier = barrier )
1112
-
1113
- if barrier :
1114
- qc .barrier ()
1115
-
1116
- qc .h (0 )
1117
-
1118
- qc .measure (0 , 0 )
1119
-
1120
- return qc
1121
-
1122
- qc = create_3qswaptest_circuit ()
1123
-
1124
- from qiskit .test .mock import FakeAthens
1125
-
1126
- mock = FakeAthens ()
1127
-
1128
- zne = ZeroNoiseExtrapolation (qc = qc , exp_val_func = swaptest_exp_val_func , backend = mock ,
1129
- n_amp_factors = 3 , shots = 10 * 8192 ,
1130
- error_controlled_sampling = True , error_tol = 0.01 , max_shots = 100 * 8192 )
1131
-
1132
- print (zne .mitigate (verbose = True ))
1133
-
1134
- #print(zne.result)
0 commit comments