netqasm.backend.executor

NetQASM execution interface for simulators.

This module provides the Executor class which can be used by simulators as a base class for executing NetQASM instructions.

class netqasm.backend.executor.EprCmdData(subroutine_id, ent_results_array_address, q_array_address, request, tot_pairs, pairs_left)

Bases: object

Container for info about EPR pending requests.

Parameters
  • subroutine_id (int) –

  • ent_results_array_address (int) –

  • q_array_address (Optional[int]) –

  • request (Optional[LinkLayerCreate]) –

  • tot_pairs (int) –

  • pairs_left (int) –

subroutine_id: int
ent_results_array_address: int
q_array_address: Optional[int]
request: Optional[netqasm.qlink_compat.LinkLayerCreate]
tot_pairs: int
pairs_left: int
netqasm.backend.executor.inc_program_counter(method)

Decorator that automatically increases the current program counter.

Should be used on functions that interpret a single NetQASM instruction.

class netqasm.backend.executor.Executor(name=None, instr_log_dir=None, **kwargs)

Bases: object

Base class for entities that execute NetQASM applications.

An Executor represents the component in a quantum node controller that handles the registration and execution of NetQASM applications. It can execute NetQASM subroutines by interpreting their instructions.

This base class provides handlers for classical NetQASM instructions. These are methods with names _instr_XXX. Methods that handle quantum instructions are a no-op and should be overridden by subclasses. Entanglement instructions are handled and forwarded to the network stack.

Parameters
  • name (Optional[str]) –

  • instr_log_dir (Optional[str]) –

instr_logger_class

alias of netqasm.logging.output.InstrLogger

__init__(name=None, instr_log_dir=None, **kwargs)

Executor constructor.

Parameters
  • name (Optional[str]) – name of the executor for logging purposes, defaults to None

  • instr_log_dir (Optional[str]) – directory to log instructions to, defaults to None

property name

Get the name of this executor.

Return type

str

Returns

name

property node_id

Get the ID of the node this Executor runs on

Raises

NotImplementedError – This should be overridden by a subclass

Return type

int

Returns

ID of the node

set_instr_logger(instr_log_dir)

Let the executor use an instruction logger that logs to instr_log_dir

Parameters

instr_log_dir (str) – path to the log directory

Return type

None

classmethod get_instr_logger(node_name, instr_log_dir, executor, force_override=False)
Parameters
  • node_name (str) –

  • instr_log_dir (str) –

  • executor (Executor) –

  • force_override (bool) –

Return type

InstrLogger

property network_stack

Get the network stack (if any) connected to this Executor.

Return type

Optional[BaseNetworkStack]

Returns

the network stack

init_new_application(app_id, max_qubits)

Register a new application.

Parameters
  • app_id (int) – App ID of the application.

  • max_qubits (int) – Maximum number of qubits the application is allowed to allocate at the same time.

Return type

None

setup_epr_socket(epr_socket_id, remote_node_id, remote_epr_socket_id)

Instruct the Executor to open an EPR Socket.

The Executor forwards this instruction to the Network Stack.

Parameters
  • epr_socket_id (int) – ID of local EPR socket

  • remote_node_id (int) – ID of remote node

  • remote_epr_socket_id (int) – ID of remote EPR socket

Yield

[description]

Return type

Generator[Any, None, None]

stop_application(app_id)

Stop an application and clear all qubits and classical memories.

Parameters

app_id (int) – ID of the application to stop

Yield

[description]

Return type

Generator[Any, None, None]

consume_execute_subroutine(subroutine)

Consume the generator returned by execute_subroutine.

Parameters

subroutine (subrt_module.Subroutine) – subroutine to execute

Return type

None

execute_subroutine(subroutine)

Execute a NetQASM subroutine.

This is a generator to allow simulators to yield at certain points during execution, e.g. to yield control to a asynchronous runtime.

Parameters

subroutine (subrt_module.Subroutine) – subroutine to execute

Yield

[description]

Return type

Generator[Any, None, None]

allocate_new_qubit_unit_module(app_id, num_qubits)
Parameters
  • app_id (int) –

  • num_qubits (int) –

Return type

None