Skip to main content

NetSquid simulator for quantum networks running NetQASM applications

Project description

.github/banner.jpg

Installation

SquidASM uses the NetSquid Python package. To install and use NetSquid, you need to first create an account for the netsquid forum. The username and password for this account are needed to install SquidASM.

Because NetSquid only supports Linux and MacOS, SquidASM also requires a Linux or MacOS system. For Windows users it is recommended to either use a virtual machine or use Windows Subsystem for Linux (WSL).

Next the SquidASM repository needs to be cloned using git. If git is not installed, instructions on installing it can be found on this website. Afterward, go to your desired directory and execute:

git clone https://github.com/QuTech-Delft/squidasm.git

This will create a new folder with the name squidasm and download the squidasm package to that folder.

The SquidASM install script requires the NetSquid user name and password to be set into environment variables. This can be done by executing the following code, but with your own user name and password:

export NETSQUIDPYPI_USER=user1234
export NETSQUIDPYPI_PWD=password1234

It’s also possible to write your password to a text file instead, and set the path to that file with another environment variable:

export NETSQUIDPYPI_USER=user1234
export NETSQUIDPYPI_PWD_FILEPATH=password.txt

For a more permanent solution, if SquidASM is installed more than once, these lines can be added to ~\.bashrc.

Then, to install squidasm execute the following command inside the newly created squidasm folder:

make install

To verify the installation, do:

make verify

If this commands completes without errors, it means that SquidASM has been successfully installed and should work properly.

Getting started

A tutorial introducing SquidASM and API documentation can be found on https://squidasm.readthedocs.io/en/latest/index.html.

Simulator variants

SquidASM currently has 3 ways of simulating applications: multithread, singlethread and stack. Each of these can run applications written using the NetQASM SDK, but the way they must be written, and what kind of results they can give, is slightly different.

Multithread

Multithreaded simulation uses multiple threads: one thread for each application layer of each node, plus one thread for the NetSquid simulation of all quantum memories and links of all nodes combined.

Since application layer code is in a separate thread, it can do blocking operations, e.g. waiting for user input or receiving a message over TCP, without blocking the reset of the simulation. The way applications are written for the multithread simulator is hence closest to how they would be written when running on real hardware.

Since the quantum simulator (i.e. NetSquid) uses simulated time and does not work well with real-time interaction (like waiting for events outside the simulator process), the multithreaded simulator uses busy loops in some cases, which slows down overall execution.

Singlethread

Singlethreaded simulation uses a single thread that runs all application layer code of all nodes as well as all quantum simulation. All communication and classical events are also simulated in NetSquid, in contrast to the multithread simulator. This leads to faster simulation but poses some constraints to how applications are written.

The singlethread simulator is being deprecated in favor of the stack simulator.

Stack

The stack simulator is also singlethreaded, but does more accurate simulation of the components of the software stack that is intended to be run on physical quantum networks.

Usage

Multithread simulator

The multithread simulator is used as one of the backends of the netqasm package. See the netqasm package for more documentation on how to write NetQASM applications and run them using SquidASM.

Stack simulator

The main interface for the stack simulator is the run function in squidasm.run.stack.run. See examples/stack for examples of using the stack simulator.

Implementation

The code is divided into the following modules:

  • nqasm: implementations of interfaces defined in the netqasm package

  • run: code for setting up and starting simulations

  • sim: internal simulation code

  • util: various utility functions

License and patent

A patent application (NL 2029673) has been filed which covers parts of the software in this repository. We allow for non-commercial and academic use but if you want to explore a commercial market, please contact us for a license agreement.

Development

For code formatting, black and isort are used. Type hints should be added as much as possible.

Before code is pushed, make sure that the make lint command succeeds, which runs black, isort and flake8.

Contributors

In alphabetical order:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

squidasm-0.13.3.tar.gz (489.6 kB view details)

Uploaded Source

Built Distribution

squidasm-0.13.3-py3-none-any.whl (152.1 kB view details)

Uploaded Python 3

File details

Details for the file squidasm-0.13.3.tar.gz.

File metadata

  • Download URL: squidasm-0.13.3.tar.gz
  • Upload date:
  • Size: 489.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for squidasm-0.13.3.tar.gz
Algorithm Hash digest
SHA256 2fd0be5c8f3ba31f8ad0bcf53fcf74664caaca8c9bbb6dfd78cecfef61122972
MD5 738564bc03261a0afcbd5978f3a6c346
BLAKE2b-256 ec02e95cb506569c9c9dc28eef7bfecb0d74b4f46d5c44dc616ef244dc7574aa

See more details on using hashes here.

File details

Details for the file squidasm-0.13.3-py3-none-any.whl.

File metadata

  • Download URL: squidasm-0.13.3-py3-none-any.whl
  • Upload date:
  • Size: 152.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for squidasm-0.13.3-py3-none-any.whl
Algorithm Hash digest
SHA256 513818654541f41b6091337775c527f7c480ace25617ed6d60b43f69fc59b7ad
MD5 68480cd24ba2384d535d6f781b66febc
BLAKE2b-256 72e6edeebec784ab92b6c7f9f9391838d5fd5ff8f69fa7e33e87504ecbd63ab2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page