Skip to content

Commit d51a431

Browse files
committed
Fix a bug in add_1q_gates (#251)
1 parent be0a004 commit d51a431

File tree

2 files changed

+18
-38
lines changed

2 files changed

+18
-38
lines changed

src/qutip_qip/circuit/circuit.py

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,7 @@ def add_1q_gate(
273273
start=0,
274274
end=None,
275275
qubits=None,
276-
arg_value=None,
277-
arg_label=None,
278-
classical_controls=None,
279-
control_value=None,
280-
classical_control_value=None,
276+
**kwargs,
281277
):
282278
"""
283279
Adds a single qubit gate with specified parameters on a variable
@@ -287,45 +283,21 @@ def add_1q_gate(
287283
Parameters
288284
----------
289285
name : string
290-
Gate name.
286+
Gate name or the :class:`~.operations.Gate` object.
291287
start : int
292288
Starting location of qubits.
293289
end : int
294290
Last qubit for the gate.
295291
qubits : list
296292
Specific qubits for applying gates.
297-
arg_value : float
298-
Argument value(phi).
299-
arg_label : string
300-
Label for gate representation.
293+
kwargs : dict
294+
Keyword arguments for the gate, except for `targets`.
295+
See :class:`~.QubitCircuit.add_gate`.
301296
"""
302-
if qubits is not None:
303-
for _, i in enumerate(qubits):
304-
gate = GATE_CLASS_MAP[name](
305-
targets=qubits[i],
306-
controls=None,
307-
arg_value=arg_value,
308-
arg_label=arg_label,
309-
classical_controls=classical_controls,
310-
control_value=control_value,
311-
classical_control_value=classical_control_value,
312-
)
313-
self.gates.append(gate)
314-
315-
else:
316-
if end is None:
317-
end = self.N - 1
318-
for i in range(start, end + 1):
319-
gate = GATE_CLASS_MAP[name](
320-
targets=i,
321-
controls=None,
322-
arg_value=arg_value,
323-
arg_label=arg_label,
324-
classical_controls=classical_controls,
325-
control_value=control_value,
326-
classical_control_value=classical_control_value,
327-
)
328-
self.gates.append(gate)
297+
if qubits is None:
298+
qubits = range(start, end + 1)
299+
for q in qubits:
300+
self.add_gate(name, targets=q, **kwargs)
329301

330302
def add_circuit(self, qc, start=0, overwrite_user_gates=False):
331303
"""

tests/test_circuit.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ def test_add_gate(self):
156156
qc.add_gate("SNOT", targets=[3])
157157
qc.add_gate(test_gate, index=[3])
158158
qc.add_1q_gate("RY", start=4, end=5, arg_value=1.570796)
159+
qc.add_1q_gate("RX", qubits=[3], arg_value=-1.570796)
159160

160161
# Test explicit gate addition
161162
assert qc.gates[0].name == "CNOT"
@@ -176,7 +177,12 @@ def test_add_gate(self):
176177
assert qc.gates[5].arg_value == 1.570796
177178
assert qc.gates[6].name == "RY"
178179
assert qc.gates[6].targets == [5]
179-
assert qc.gates[5].arg_value == 1.570796
180+
assert qc.gates[6].arg_value == 1.570796
181+
182+
# Test adding 1 qubit gate on qubits [3]
183+
assert qc.gates[7].name == "RX"
184+
assert qc.gates[7].targets == [3]
185+
assert qc.gates[7].arg_value == -1.570796
180186

181187
dummy_gate1 = Gate("DUMMY1")
182188
inds = [1, 3, 4, 6]
@@ -197,6 +203,7 @@ def test_add_gate(self):
197203
'RY', # 8
198204
'DUMMY1', # 9
199205
'RY', # 10
206+
'RX', # 11
200207
]
201208
actual_gate_names = [gate.name for gate in qc.gates]
202209
assert actual_gate_names == expected_gate_names
@@ -220,6 +227,7 @@ def test_add_gate(self):
220227
'DUMMY1', # 10
221228
'RY', # 11
222229
'DUMMY2', # 12
230+
'RX', # 13
223231
]
224232
actual_gate_names = [gate.name for gate in qc.gates]
225233
assert actual_gate_names == expected_gate_names

0 commit comments

Comments
 (0)