diff --git a/README.rst b/README.rst index 578ba337..4dcb57be 100644 --- a/README.rst +++ b/README.rst @@ -145,6 +145,7 @@ Contributors =============== In alphabetical order: +* Alessandro Da Ros * Axel Dahlberg * Bart van der Vecht (b.vandervecht[at]tudelft.nl) * Michaɫ van Hooft (M.K.vanHooft@tudelft.nl) diff --git a/examples/advanced/link_layer/example_link_layer_ck.py b/examples/advanced/link_layer/example_link_layer_ck.py index 2940092d..e97c75fb 100644 --- a/examples/advanced/link_layer/example_link_layer_ck.py +++ b/examples/advanced/link_layer/example_link_layer_ck.py @@ -21,7 +21,7 @@ def meta(self) -> ProgramMeta: name="client_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( @@ -67,7 +67,7 @@ def meta(self) -> ProgramMeta: name="server_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( diff --git a/examples/advanced/link_layer/example_link_layer_md.py b/examples/advanced/link_layer/example_link_layer_md.py index 0c22156b..28b62da2 100644 --- a/examples/advanced/link_layer/example_link_layer_md.py +++ b/examples/advanced/link_layer/example_link_layer_md.py @@ -23,7 +23,7 @@ def meta(self) -> ProgramMeta: name="client_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( @@ -54,7 +54,7 @@ def meta(self) -> ProgramMeta: name="server_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( diff --git a/examples/advanced/link_layer_custom_subrt/example_ll_custom_subrt.py b/examples/advanced/link_layer_custom_subrt/example_ll_custom_subrt.py index d59b50cf..1904fcce 100644 --- a/examples/advanced/link_layer_custom_subrt/example_ll_custom_subrt.py +++ b/examples/advanced/link_layer_custom_subrt/example_ll_custom_subrt.py @@ -101,7 +101,7 @@ def meta(self) -> ProgramMeta: name="client_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( @@ -147,7 +147,7 @@ def meta(self) -> ProgramMeta: name="server_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run( diff --git a/examples/advanced/single_node/example_single_node.py b/examples/advanced/single_node/example_single_node.py index c7460f04..c827e4ea 100644 --- a/examples/advanced/single_node/example_single_node.py +++ b/examples/advanced/single_node/example_single_node.py @@ -31,7 +31,7 @@ def meta(self) -> ProgramMeta: name="client_program", csockets=[], epr_sockets=[], - max_qubits=1, + max_qubits=2, ) def run( diff --git a/examples/tutorial/1_Basics/application.py b/examples/tutorial/1_Basics/application.py index 00effd86..b15a6db0 100644 --- a/examples/tutorial/1_Basics/application.py +++ b/examples/tutorial/1_Basics/application.py @@ -15,7 +15,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): @@ -65,7 +65,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): diff --git a/examples/tutorial/2.1_NetQASM-language/application.py b/examples/tutorial/2.1_NetQASM-language/application.py index 45d8a976..2de9a93e 100644 --- a/examples/tutorial/2.1_NetQASM-language/application.py +++ b/examples/tutorial/2.1_NetQASM-language/application.py @@ -13,7 +13,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): @@ -43,7 +43,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): diff --git a/examples/tutorial/2.2_Future-objects/application.py b/examples/tutorial/2.2_Future-objects/application.py index dd3ff587..35910098 100644 --- a/examples/tutorial/2.2_Future-objects/application.py +++ b/examples/tutorial/2.2_Future-objects/application.py @@ -13,7 +13,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): @@ -55,7 +55,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER_NAME], epr_sockets=[self.PEER_NAME], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): diff --git a/examples/tutorial/4.3_multi-node/application.py b/examples/tutorial/4.3_multi-node/application.py index 0d5ed400..a50116f2 100644 --- a/examples/tutorial/4.3_multi-node/application.py +++ b/examples/tutorial/4.3_multi-node/application.py @@ -64,7 +64,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): @@ -96,7 +96,7 @@ def meta(self) -> ProgramMeta: name="tutorial_program", csockets=[self.PEER], epr_sockets=[self.PEER], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): diff --git a/setup.cfg b/setup.cfg index 2cd386ee..01bc488f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,7 +23,7 @@ install_requires = netsquid >=1.1.8, <2.0 netsquid-magic >= 16.0.0, <17.0.0 bitarray >=2.8.0, <3.0.0 - netqasm >=1.0.0, <=2.0.0 + netqasm >=2.2.1 pytest >=7.1, <8.0 [options.extras_require] diff --git a/squidasm/nqasm/executor/nv.py b/squidasm/nqasm/executor/nv.py index 666912ab..6cb59be4 100644 --- a/squidasm/nqasm/executor/nv.py +++ b/squidasm/nqasm/executor/nv.py @@ -12,6 +12,7 @@ INSTR_ROT_X, INSTR_ROT_Y, INSTR_ROT_Z, + INSTR_SWAP, ) from netsquid.nodes.node import Node as NetSquidNode @@ -27,6 +28,7 @@ nv.RotZInstruction: INSTR_ROT_Z, nv.ControlledRotXInstruction: INSTR_CXDIR, nv.ControlledRotYInstruction: INSTR_CYDIR, + nv.MovInstruction: INSTR_SWAP, } diff --git a/squidasm/sim/network/network.py b/squidasm/sim/network/network.py index 61f1197c..535dc7f6 100644 --- a/squidasm/sim/network/network.py +++ b/squidasm/sim/network/network.py @@ -551,6 +551,7 @@ def __init__( PhysicalInstruction(ns_instructions.INSTR_ROT_Z, duration=2), PhysicalInstruction(ns_instructions.INSTR_CXDIR, duration=5), PhysicalInstruction(ns_instructions.INSTR_CYDIR, duration=5), + PhysicalInstruction(ns_instructions.INSTR_SWAP, duration=5), ] super().__init__( diff --git a/squidasm/sim/stack/processor.py b/squidasm/sim/stack/processor.py index 3180b596..1895c9d3 100644 --- a/squidasm/sim/stack/processor.py +++ b/squidasm/sim/stack/processor.py @@ -173,6 +173,7 @@ def execute_subroutine( self, subroutine: Subroutine ) -> Generator[EventExpression, None, None]: """Execute a NetQASM subroutine on this processor.""" + self._logger.info(f"Executing subroutine {subroutine}") app_id = subroutine.app_id assert app_id in self.app_memories app_mem = self.app_memories[app_id] @@ -230,6 +231,10 @@ def _interpret_instruction( pass elif isinstance(instr, core.SingleQubitInstruction): return self._interpret_single_qubit_instr(app_id, instr) + elif isinstance(instr, vanilla.MovInstruction) or isinstance( + instr, nv.MovInstruction + ): + return self._interpret_mov(app_id, instr) elif isinstance(instr, core.TwoQubitInstruction): return self._interpret_two_qubit_instr(app_id, instr) elif isinstance(instr, core.RotationInstruction): @@ -288,6 +293,12 @@ def _interpret_set(self, app_id: int, instr: core.SetInstruction) -> None: self._logger.debug(f"Set register {instr.reg} to {instr.imm}") self.app_memories[app_id].set_reg_value(instr.reg, instr.imm.value) + def _interpret_mov(self, app_id: int, instr: vanilla.MovInstruction) -> None: + self._logger.debug(f"Moving value from {instr.reg1} to {instr.reg0}") + app_mem = self.app_memories[app_id] + val = app_mem.get_reg_value(instr.reg1) + app_mem.set_reg_value(instr.reg0, val) + def _interpret_qalloc(self, app_id: int, instr: core.QAllocInstruction) -> None: app_mem = self.app_memories[app_id] @@ -543,8 +554,7 @@ def _interpret_create_epr( result_array_addr, ) self._send_netstack_msg(msg) - # result = yield from self._receive_netstack_msg() - # self._logger.debug(f"result from netstack: {result}") + yield from self._receive_netstack_msg() def _interpret_recv_epr(self, app_id: int, instr: core.RecvEPRInstruction) -> None: app_mem = self.app_memories[app_id] @@ -572,8 +582,7 @@ def _interpret_recv_epr(self, app_id: int, instr: core.RecvEPRInstruction) -> No result_array_addr, ) self._send_netstack_msg(msg) - # result = yield from self._receive_netstack_msg() - # self._logger.debug(f"result from netstack: {result}") + yield from self._receive_netstack_msg() def _interpret_wait_all( self, app_id: int, instr: core.WaitAllInstruction diff --git a/tests/system_tests/test_classical_communication.py b/tests/system_tests/test_classical_communication.py index c919ea31..e562f86e 100644 --- a/tests/system_tests/test_classical_communication.py +++ b/tests/system_tests/test_classical_communication.py @@ -36,7 +36,7 @@ def meta(self) -> ProgramMeta: name="test_program", csockets=list(self.per_peer_messages.keys()), epr_sockets=[], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): @@ -65,7 +65,7 @@ def meta(self) -> ProgramMeta: name="test_program", csockets=list(self.per_peer_expect_num_messages.keys()), epr_sockets=[], - max_qubits=1, + max_qubits=2, ) def run(self, context: ProgramContext): diff --git a/tests/test_qnodeos.py b/tests/test_qnodeos.py index 4682bf06..a9561e88 100644 --- a/tests/test_qnodeos.py +++ b/tests/test_qnodeos.py @@ -44,7 +44,7 @@ def test(): bytes( InitNewAppMessage( app_id=app_id, - max_qubits=1, + max_qubits=2, ) ), )