@@ -45,60 +45,60 @@ def generate_near_clifford_circuit(num_qubits=2, depth=3, seed=None):
4545
4646 qc = QuantumCircuit (num_qubits , name = f"near_clifford_{ num_qubits } q_d{ depth } " )
4747
48- clifford_gates = ['h' , 's' , ' sdg' , 'x' , 'y' , 'z' , 'cx' , 'cz' , ' swap' ]
48+ clifford_gates = ["h" , "s" , " sdg" , "x" , "y" , "z" , "cx" , "cz" , " swap" ]
4949
5050 # Random initial state (to get varied expectation values)
5151 for qubit in range (num_qubits ):
52- init_choice = np .random .choice ([' |0⟩' , ' |1⟩' , ' |+⟩' , ' |-⟩' ])
53- if init_choice == ' |1⟩' :
52+ init_choice = np .random .choice ([" |0⟩" , " |1⟩" , " |+⟩" , " |-⟩" ])
53+ if init_choice == " |1⟩" :
5454 qc .x (qubit )
55- elif init_choice == ' |+⟩' :
55+ elif init_choice == " |+⟩" :
5656 qc .h (qubit )
57- elif init_choice == ' |-⟩' :
57+ elif init_choice == " |-⟩" :
5858 qc .x (qubit )
5959 qc .h (qubit )
6060
6161 for layer in range (depth ):
6262 # Ensure qubit 0 gets operations
6363 gate = np .random .choice (clifford_gates [:- 3 ]) # Single-qubit gates
64- if gate == 'h' :
64+ if gate == "h" :
6565 qc .h (0 )
66- elif gate == 's' :
66+ elif gate == "s" :
6767 qc .s (0 )
68- elif gate == ' sdg' :
68+ elif gate == " sdg" :
6969 qc .sdg (0 )
70- elif gate == 'x' :
70+ elif gate == "x" :
7171 qc .x (0 )
72- elif gate == 'y' :
72+ elif gate == "y" :
7373 qc .y (0 )
74- elif gate == 'z' :
74+ elif gate == "z" :
7575 qc .z (0 )
7676
7777 for qubit in range (1 , num_qubits ):
7878 # Random Clifford gate on other qubits
7979 gate = np .random .choice (clifford_gates [:- 3 ]) # Single-qubit gates
80- if gate == 'h' :
80+ if gate == "h" :
8181 qc .h (qubit )
82- elif gate == 's' :
82+ elif gate == "s" :
8383 qc .s (qubit )
84- elif gate == ' sdg' :
84+ elif gate == " sdg" :
8585 qc .sdg (qubit )
86- elif gate == 'x' :
86+ elif gate == "x" :
8787 qc .x (qubit )
88- elif gate == 'y' :
88+ elif gate == "y" :
8989 qc .y (qubit )
90- elif gate == 'z' :
90+ elif gate == "z" :
9191 qc .z (qubit )
9292
9393 # Random 2-qubit Clifford gates
9494 for qubit in range (num_qubits - 1 ):
9595 if np .random .random () < 0.5 : # 50% chance
9696 gate = np .random .choice (clifford_gates [- 3 :]) # 2-qubit gates
97- if gate == 'cx' :
97+ if gate == "cx" :
9898 qc .cx (qubit , qubit + 1 )
99- elif gate == 'cz' :
99+ elif gate == "cz" :
100100 qc .cz (qubit , qubit + 1 )
101- elif gate == ' swap' :
101+ elif gate == " swap" :
102102 qc .swap (qubit , qubit + 1 )
103103
104104 return qc
@@ -126,7 +126,7 @@ def generate_training_set(num_circuits=50, num_qubits=2, max_depth=5):
126126 return training_circuits
127127
128128
129- def simulate_circuit_expectation (circuit , simulator , shots = 2048 , observable = 'Z0' ):
129+ def simulate_circuit_expectation (circuit , simulator , shots = 2048 , observable = "Z0" ):
130130 """
131131 Simulate a circuit and compute expectation value of an observable.
132132
@@ -143,10 +143,10 @@ def simulate_circuit_expectation(circuit, simulator, shots=2048, observable='Z0'
143143 qc = circuit .remove_final_measurements (inplace = False )
144144
145145 # Add measurement for the observable
146- if observable .startswith ('Z' ):
146+ if observable .startswith ("Z" ):
147147 qubit_idx = int (observable [1 :])
148148 if qc .num_clbits == 0 :
149- qc .add_register (ClassicalRegister (qc .num_qubits , 'c' ))
149+ qc .add_register (ClassicalRegister (qc .num_qubits , "c" ))
150150 qc .measure (qubit_idx , qubit_idx )
151151
152152 # Run simulation
@@ -157,12 +157,12 @@ def simulate_circuit_expectation(circuit, simulator, shots=2048, observable='Z0'
157157 total_shots = sum (counts .values ())
158158 # Note: Qiskit bit ordering - bits[0] is highest qubit, bits[-1] is lowest
159159 qubit_bit_idx = - (qubit_idx + 1 ) # qubit 0 -> bits[-1], qubit 1 -> bits[-2]
160- prob_0 = sum (
161- cnt for bits , cnt in counts .items () if bits [qubit_bit_idx ] == '0'
162- ) / total_shots
163- prob_1 = sum (
164- cnt for bits , cnt in counts .items () if bits [qubit_bit_idx ] == '1'
165- ) / total_shots
160+ prob_0 = (
161+ sum ( cnt for bits , cnt in counts .items () if bits [qubit_bit_idx ] == "0" ) / total_shots
162+ )
163+ prob_1 = (
164+ sum ( cnt for bits , cnt in counts .items () if bits [qubit_bit_idx ] == "1" ) / total_shots
165+ )
166166
167167 expectation = prob_0 - prob_1
168168 return expectation
0 commit comments