Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions src/braket/program_sets/program_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,23 @@
class ProgramSet:
def __init__(
self,
programs: list[CircuitBinding | Circuit | Program | str] | CircuitBinding | Program,
programs: (
list[CircuitBinding | Circuit | Program | str]
| CircuitBinding
| Circuit
| Program
| str
),
shots_per_executable: int | None = None,
):
"""
A set of programs to be run together on a device.

Args:
programs (list[CircuitBinding | Circuit | Program | str] | CircuitBinding | Program):
A list of circuit bindings, circuits, OpenQASM programs, or OpenQASM strings to
execute. It is also possible to provide a single circuit binding or OpenQASM
program. OpenQASM program input values must be equal-length lists. Note: circuits
programs (list[CircuitBinding | Circuit | Program | str] | CircuitBinding | Circuit |
Program | str): A list of circuit bindings, circuits, OpenQASM programs, or
OpenQASM strings to execute. It is also possible to provide any one of these on
its own. OpenQASM program input values must be equal-length lists. Note: circuits
cannot have result types.
shots_per_executable (int | None): The number of shots to run each executable;
this will be used to enforce the total shots on task creation. If not provided,
Expand All @@ -51,7 +57,11 @@ def __init__(
ValueError: If a circuit has result types, or if an OpenQASM program's inputs are not
equal-length lists.
"""
self._programs = [programs] if isinstance(programs, CircuitBinding | Program) else programs
self._programs = (
[programs]
if isinstance(programs, CircuitBinding | Circuit | Program | str)
else programs
)
if any(isinstance(circuit, Circuit) and circuit.result_types for circuit in self._programs):
raise ValueError("Circuit cannot have result types")
for program in self._programs:
Expand Down
26 changes: 26 additions & 0 deletions test/unit_tests/braket/program_sets/test_program_set.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,32 @@ def test_standalone_openqasm_program():
]


def test_standalone_openqasm_string():
source = "OPENQASM 3.0;\nbit[1] b;\nqubit[1] q;\nh q[0];\nb[0] = measure q[0];"
program_set = ProgramSet(source, shots_per_executable=100)

assert program_set.entries == [source]
assert program_set.total_executables == 1
assert program_set.total_shots == 100
assert program_set.to_ir() == IrProgramSet(programs=[Program(source=source, inputs=None)])
assert list(program_set.enumerate_executables()) == [(0, 0, 0)]
assert program_set == ProgramSet([source], shots_per_executable=100)


def test_standalone_circuit():
circuit = Circuit().h(0).cnot(0, 1)
program_set = ProgramSet(circuit, shots_per_executable=100)

assert program_set.entries == [circuit]
assert program_set.total_executables == 1
assert program_set.total_shots == 100
assert program_set.to_ir() == IrProgramSet(
programs=[Program(source=get_circuit_source(circuit), inputs={})]
)
assert list(program_set.enumerate_executables()) == [(0, 0, 0)]
assert program_set == ProgramSet([circuit], shots_per_executable=100)


def test_openqasm_programs_in_list():
programs = [
Program(source="OPENQASM 3.0;\nqubit[1] q;\nh q[0];"),
Expand Down
Loading