Skip to content

Commit

Permalink
Resolve review comments.
Browse files Browse the repository at this point in the history
  • Loading branch information
elenbaasc committed Dec 13, 2024
1 parent 4cc918b commit 30ff3b1
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 23 deletions.
20 changes: 8 additions & 12 deletions opensquirrel/passes/exporter/cqasmv1_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@ class _CQASMv1Creator(IRVisitor):
def __init__(self, register_manager: RegisterManager, barrier_links: list[list[Statement]]) -> None:
self.register_manager = register_manager
qubit_register_size = self.register_manager.get_qubit_register_size()
self.output = "version 1.0\n\n{}\n\n".format(
f"qubits {qubit_register_size}" if qubit_register_size > 0 else ""
)
self.output = "version 1.0\n\n{}\n\n".format(f"qubits {qubit_register_size}" if qubit_register_size > 0 else "")
self.barrier_links = barrier_links

def visit_qubit(self, qubit: Qubit) -> str:
Expand All @@ -37,27 +35,27 @@ def visit_float(self, f: SupportsFloat) -> str:

def visit_measure(self, measure: Measure) -> None:
qubit_argument = measure.arguments[0].accept(self) # type: ignore[index]
self.cqasm_v1_string += f"{measure.name}_z {qubit_argument}\n"
self.output += f"{measure.name}_z {qubit_argument}\n"

def visit_init(self, init: Init) -> None:
qubit_argument = init.arguments[0].accept(self) # type: ignore[index]
self.cqasm_v1_string += f"prep_z {qubit_argument}\n"
self.output += f"prep_z {qubit_argument}\n"

def visit_reset(self, reset: Reset) -> None:
qubit_argument = reset.arguments[0].accept(self) # type: ignore[index]
self.cqasm_v1_string += f"prep_z {qubit_argument}\n"
self.output += f"prep_z {qubit_argument}\n"

def visit_barrier(self, barrier: Barrier) -> None:
if self.barrier_links and barrier == self.barrier_links[0][-1]:
qubit_register_name = self.register_manager.get_qubit_register_name()
qubit_indices = [str(barrier.arguments[0].index) for barrier in self.barrier_links[0]] # type: ignore
self.cqasm_v1_string += f"barrier {qubit_register_name}[{', '.join(qubit_indices)}]\n"
self.output += f"barrier {qubit_register_name}[{', '.join(qubit_indices)}]\n"
del self.barrier_links[0]

def visit_wait(self, wait: Wait) -> None:
qubit_argument = wait.arguments[0].accept(self) # type: ignore[index]
parameter = wait.arguments[1].accept(self) # type: ignore[index]
self.cqasm_v1_string += f"wait {qubit_argument}, {parameter}\n"
self.output += f"wait {qubit_argument}, {parameter}\n"

def visit_gate(self, gate: Gate) -> None:
gate_name = gate.name.lower()
Expand All @@ -67,9 +65,7 @@ def visit_gate(self, gate: Gate) -> None:
if any(not isinstance(arg, Qubit) for arg in gate.arguments): # type: ignore[union-attr]
params = [arg.accept(self) for arg in gate.arguments if not isinstance(arg, Qubit)] # type: ignore[union-attr]
qubit_args = (arg.accept(self) for arg in gate.arguments if isinstance(arg, Qubit)) # type: ignore[union-attr]
self.cqasm_v1_string += "{} {}{}\n".format(
gate_name, ", ".join(qubit_args), ", " + ", ".join(params) if params else ""
)
self.output += "{} {}{}\n".format(gate_name, ", ".join(qubit_args), ", " + ", ".join(params) if params else "")


def export(circuit: Circuit) -> str:
Expand All @@ -82,4 +78,4 @@ def export(circuit: Circuit) -> str:
circuit.ir.accept(cqasmv1_creator)

# Remove all trailing lines and leave only one
return cqasmv1_creator.cqasm_v1_string.rstrip() + "\n"
return cqasmv1_creator.output.rstrip() + "\n"
22 changes: 11 additions & 11 deletions test/exporter/test_cqasmv1_exporter.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,9 @@ def test_anonymous_gates(gate: Gate) -> None:
("v3_input", "v3_output", "v1_output"),
[
(
"""version 3.0; qubit[1] q; barrier q[0]",
"""version 3.0\n\nqubit[1] q\n\nbarrier q[0]\n",
"""version 1.0\n\nqubits 1\n\nbarrier q[0]\n",
"version 3.0; qubit[1] q; barrier q[0]",
"version 3.0\n\nqubit[1] q\n\nbarrier q[0]\n",
"version 1.0\n\nqubits 1\n\nbarrier q[0]\n",
),
(
"version 3.0; qubit[3] q; barrier q[0:2]",
Expand All @@ -258,17 +258,17 @@ def test_anonymous_gates(gate: Gate) -> None:
),
(
"version 3.0; qubit[6] q; barrier q[0:2, 5, 3, 4, 1]",
"version 3.0\n\nqubit[6] q\n\nbarrier q[0]\nbarrier q[1]\nbarrier q[2]\nbarrier q[5]\nbarrier q[3]
barrier q[4]\nbarrier q[1]\n",
"version 3.0\n\nqubit[6] q\n\nbarrier q[0]\nbarrier q[1]\nbarrier q[2]\nbarrier q[5]\nbarrier q[3]\n"
"barrier q[4]\nbarrier q[1]\n",
"version 1.0\n\nqubits 6\n\nbarrier q[0, 1, 2, 5, 3, 4, 1]\n",
),
(
"version 3.0; qubit[5] q; barrier q[0]; H q[1]; barrier q[1:2]; X q[2]; barrier q[3:4, 1]; Y q[3];
barrier q[0]",
"version 3.0\n\nqubit[5] q\n\nbarrier q[0]\nH q[1]\nbarrier q[1]\nbarrier q[2]\nX q[2]
barrier q[3]\nbarrier q[4]\nbarrier q[1]\nY q[3]\nbarrier q[0]\n",
"version 1.0\n\nqubits 5\n\nbarrier q[0]\nh q[1]\nbarrier q[1, 2]\nx q[2]\nbarrier q[3, 4, 1]\ny q[3]
barrier q[0]\n",
"version 3.0; qubit[5] q; barrier q[0]; H q[1]; barrier q[1:2]; X q[2]; barrier q[3:4, 1]; Y q[3];"
"barrier q[0]",
"version 3.0\n\nqubit[5] q\n\nbarrier q[0]\nH q[1]\nbarrier q[1]\nbarrier q[2]\nX q[2]\n"
"barrier q[3]\nbarrier q[4]\nbarrier q[1]\nY q[3]\nbarrier q[0]\n",
"version 1.0\n\nqubits 5\n\nbarrier q[0]\nh q[1]\nbarrier q[1, 2]\nx q[2]\nbarrier q[3, 4, 1]\ny q[3]\n"
"barrier q[0]\n",
),
(
"version 3.0; qubit[3] q; barrier q[0]; barrier q[1]; X q[2]; barrier q[1]",
Expand Down

0 comments on commit 30ff3b1

Please sign in to comment.