Skip to content

Commit b616186

Browse files
committed
Handle cases with generators
1 parent ca29b0a commit b616186

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

oqpy/program.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -348,25 +348,28 @@ def delay(
348348
qubits_or_frames: AstConvertible | Iterable[AstConvertible] | None = None,
349349
) -> Program:
350350
"""Apply a delay to a set of qubits or frames."""
351-
if isinstance(qubits_or_frames, Iterable) and not any(True for _ in qubits_or_frames):
352-
return self
353-
elif qubits_or_frames is None:
351+
if qubits_or_frames is None:
354352
ast_qubits_or_frames = []
355353
else:
356354
if not isinstance(qubits_or_frames, Iterable):
357355
qubits_or_frames = [qubits_or_frames]
356+
else:
357+
qubits_or_frames = list(qubits_or_frames)
358+
if len(qubits_or_frames) == 0:
359+
return self
358360
ast_qubits_or_frames = map_to_ast(self, qubits_or_frames)
359361
ast_duration = to_ast(self, make_duration(time))
360362
self._add_statement(ast.DelayInstruction(ast_duration, ast_qubits_or_frames))
361363
return self
362364

363365
def barrier(self, qubits_or_frames: Iterable[AstConvertible] | None = None) -> Program:
364366
"""Apply a barrier to a set of qubits or frames."""
365-
if isinstance(qubits_or_frames, Iterable) and not any(True for _ in qubits_or_frames):
366-
return self
367-
elif qubits_or_frames is None:
367+
if qubits_or_frames is None:
368368
ast_qubits_or_frames = []
369369
else:
370+
qubits_or_frames = list(qubits_or_frames)
371+
if len(qubits_or_frames) == 0:
372+
return self
370373
ast_qubits_or_frames = map_to_ast(self, qubits_or_frames)
371374
self._add_statement(ast.QuantumBarrier(ast_qubits_or_frames))
372375
return self

tests/test_directives.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,13 @@ def test_barrier_delay_arguments():
442442
prog.delay(3e-7, frame1)
443443
prog.delay(4e-7, [frame, frame1])
444444

445+
def frame_generator(frames):
446+
for frame in frames:
447+
yield frame
448+
449+
prog.barrier(frame_generator([frame, frame1]))
450+
prog.delay(5e-7, frame_generator([frame, frame1]))
451+
445452
expected = textwrap.dedent(
446453
"""
447454
OPENQASM 3.0;
@@ -453,6 +460,8 @@ def test_barrier_delay_arguments():
453460
barrier frame0, frame1;
454461
delay[300.0ns] frame1;
455462
delay[400.0ns] frame0, frame1;
463+
barrier frame0, frame1;
464+
delay[500.0ns] frame0, frame1;
456465
"""
457466
).strip()
458467

0 commit comments

Comments
 (0)