def test_jumps(): parse_equals("LABEL @test_1", JumpTarget(Label("test_1"))) parse_equals("JUMP @test_1", Jump(Label("test_1"))) parse_equals("JUMP-WHEN @test_1 ro[0]", JumpWhen(Label("test_1"), MemoryReference("ro", 0))) parse_equals("JUMP-UNLESS @test_1 ro[1]", JumpUnless(Label("test_1"), MemoryReference("ro", 1)))
def if_then( self, classical_reg: MemoryReferenceDesignator, if_program: "Program", else_program: Optional["Program"] = None, ) -> "Program": """ If the classical register at index classical reg is 1, run if_program, else run else_program. Equivalent to the following construction: .. code:: IF [c]: instrA... ELSE: instrB... => JUMP-WHEN @THEN [c] instrB... JUMP @END LABEL @THEN instrA... LABEL @END :param classical_reg: The classical register to check as the condition :param if_program: A Quil program to execute if classical_reg is 1 :param else_program: A Quil program to execute if classical_reg is 0. This argument is optional and defaults to an empty Program. :returns: The Quil Program with the branching instructions added. """ else_program = else_program if else_program is not None else Program() label_then = LabelPlaceholder("THEN") label_end = LabelPlaceholder("END") self.inst( JumpWhen(target=label_then, condition=unpack_classical_reg(classical_reg))) self.inst(else_program) self.inst(Jump(label_end)) self.inst(JumpTarget(label_then)) self.inst(if_program) self.inst(JumpTarget(label_end)) return self
def jump_when(self, label, address): return JumpWhen(label, address)
def test_jumps(): parse_equals("LABEL @test_1", JumpTarget(Label("test_1"))) parse_equals("JUMP @test_1", Jump(Label("test_1"))) parse_equals("JUMP-WHEN @test_1 ro[0]", JumpWhen(Label("test_1"), Addr(0))) parse_equals("JUMP-UNLESS @test_1 ro[1]", JumpUnless(Label("test_1"), Addr(1)))
def exitJumpWhen(self, ctx): # type: (QuilParser.JumpWhenContext) -> None self.result.append(JumpWhen(_label(ctx.label()), _addr(ctx.addr())))
def test_jumps(): _test("LABEL @test_1", JumpTarget(Label("test_1"))) _test("JUMP @test_1", Jump(Label("test_1"))) _test("JUMP-WHEN @test_1 [0]", JumpWhen(Label("test_1"), Addr(0))) _test("JUMP-UNLESS @test_1 [1]", JumpUnless(Label("test_1"), Addr(1)))