Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
281 commits
Select commit Hold shift + click to select a range
3bab954
Add logic to deserialize real and imaginary parts of the requested qu…
dieriver Sep 8, 2025
691d991
Correctly return the qubit value to the application layer
dieriver Sep 8, 2025
7f128cd
Add test cases for peeking basic and unflushed qubits
dieriver Sep 8, 2025
027b503
Add propagation of error messages from inner layers
dieriver Sep 9, 2025
8c95a71
Add test case for error message checking
dieriver Sep 9, 2025
4dd9cbc
Fix delayed execution of callbacks when handling a response message
dieriver Sep 10, 2025
c1bcf2f
Use twisted asyncio reactor to avoid deadlocks
dieriver Sep 12, 2025
076372b
Use multiprocess "SpawnProcess" class to use the correct strategy for…
dieriver Sep 12, 2025
d77a934
Update test for get_qubit_state
dieriver Sep 12, 2025
18e2a6d
Linter changes
dieriver Sep 12, 2025
8bc36be
Centralize the way to access the twisted reactor to avoid installing …
dieriver Sep 12, 2025
85016bb
Fix test for qubit teleportation
dieriver Sep 15, 2025
d5315ef
Add test for comparing the state of local qubits
dieriver Sep 15, 2025
a3b18cc
Add test for trying to get the state of an unflushed qubit
dieriver Sep 15, 2025
c4d9e86
Move get_qubit_state test to the netqasm folder
dieriver Sep 16, 2025
33f341f
Add tests for qfree operations
dieriver Sep 22, 2025
a8c6df8
Fix to forward ValueError exceptions from the SimulaQron executioner …
dieriver Sep 22, 2025
b0da2ec
Update netqasm dependency to use version including qfree patch
dieriver Sep 22, 2025
292c82b
Fix destructor of classical socket class. Add test for classical comm…
dieriver Sep 23, 2025
3327894
Forward error messages by default instead of reporting generic errors
dieriver Sep 25, 2025
f48461d
Adapt internals to return the density matrox as the qubit state
dieriver Sep 26, 2025
17fb48c
Adapt transport message class to support square matrices
dieriver Sep 26, 2025
8ae47c3
Improve reraise of remote exceptions
dieriver Sep 29, 2025
b87b497
Add declaration of the get_density_matrix function in the virtual qub…
dieriver Sep 29, 2025
cdcd059
Fix some test cases to assert the density matrix of a qubit
dieriver Sep 29, 2025
a580be5
Fix the test assertion when teleporting a qubit
dieriver Sep 29, 2025
5e675b5
Linter changes
dieriver Sep 29, 2025
97cd766
Use SpawnContext class to use the correct method to create new child …
dieriver Oct 3, 2025
4521335
Change to use epoll-based reactor in twisted
dieriver Oct 8, 2025
9106eab
Fix reference to reraise_remote_error
dieriver Oct 8, 2025
9938e9b
Fallback to forking new processes to avoid dataraces
dieriver Oct 8, 2025
52e2e55
Implement a more robust way to terminate all the spawned processes wh…
dieriver Oct 9, 2025
437d0d6
Add functionality to gracefully stop vnodes when receiving a message …
dieriver Oct 13, 2025
2ff493d
Factorized settings to avoid saving static state through successive e…
dieriver Oct 13, 2025
f8513c8
Allow having a local SimulaQron config file in the CWD
dieriver Oct 14, 2025
37ee3a1
Store PID files in a hidden folder in the home (~) rather than in the…
dieriver Oct 14, 2025
e20328c
Change unittest package in favor of more modern pytest
dieriver Oct 14, 2025
7dab1c0
Dynamically load the qubit simulation engine to reflect changes on si…
dieriver Oct 14, 2025
439158d
Fix setup of some test cases
dieriver Oct 14, 2025
e9764f2
Fix deprecation warnings in test cases
dieriver Oct 14, 2025
28a4fc0
Fallback to forking when creating new processes
dieriver Oct 14, 2025
759b53c
Test cases now use a temporal configuration to avoid leaving residues…
dieriver Oct 15, 2025
06f5520
NetworkConfigBuilder does not eagerly load nor save values unnecessarily
dieriver Oct 15, 2025
189fbb3
Use temporary files in tests to avoid overwriting default configurati…
dieriver Oct 17, 2025
74695da
Fix import order in the two qubits test
dieriver Oct 17, 2025
73f8074
Fix usage of the network fixture in two qubits tests
dieriver Oct 20, 2025
09cdc2e
Move simulaqron and network settings into their own package
dieriver Oct 20, 2025
83a384d
Heavily simplify SimulaqronSettings class to use dataclass serialization
dieriver Oct 23, 2025
59a8df6
Move serialization methods to its own private module
dieriver Oct 23, 2025
d72e9a6
Add (de)serialization methods for SimulaqronConfig objects
dieriver Oct 27, 2025
1aaa817
Improve logging when setting up SimulaQron locally
dieriver Oct 29, 2025
39c8a19
Allow logging subprocesses stdout and stderr to files
dieriver Oct 29, 2025
bffc42a
Improve logging in test_merges.py
dieriver Oct 29, 2025
e355e40
Use temporal files for configurations in test_merges.py
dieriver Oct 29, 2025
c4cbf1c
Correctly unpack values comming from projectq in test_merges.py
dieriver Oct 29, 2025
d375c20
Implement a max retries when connecting a socket to avoid deadlocks
dieriver Oct 29, 2025
a58df91
Set environment variable to use a single thread in OMP library and av…
dieriver Oct 29, 2025
3c66799
Fix serialization of network config files and simulaqron settings
dieriver Oct 30, 2025
dd32635
Minimize creation of NetworkBuilder objects and reuse automatically l…
dieriver Oct 30, 2025
d520f6a
Add indent when serializing simulaqron settings
dieriver Oct 30, 2025
15cfd9e
Fix test for settings
dieriver Oct 30, 2025
0b08d71
Improve way to finalize all set of applications.
dieriver Oct 30, 2025
5c83436
Do not block to wait a result of a node when using run_applications
dieriver Oct 31, 2025
b553e7d
Use relative paths in the SimulaqronConfig class to point the network…
dieriver Oct 31, 2025
aa5da3c
Fix tiemout usage when connecting sockets
dieriver Oct 31, 2025
c0a1bb4
Add small sleep between checking if a node is ready of not
dieriver Nov 3, 2025
3d1a00d
Implement a configurable max waiting time for nodes to try avoiding d…
dieriver Nov 3, 2025
a0678c7
Linter changes
dieriver Nov 3, 2025
b6f3ddb
Fix creation of config files and their parent folders when they don't…
dieriver Nov 11, 2025
37b8729
Update netqasm dependency to include bugfix of meas_basis/mov instruc…
dieriver Nov 12, 2025
d6f8d8c
Fix bug when loading new simulaqron configs from a file
dieriver Nov 21, 2025
f71604a
Mayor refactoring in the network_config classes
dieriver Nov 23, 2025
4386fea
Add test case to check the default network configuration
dieriver Nov 25, 2025
85796ba
Add serialization methods for network config objects
dieriver Nov 25, 2025
3dd5086
Update network configuration files to match the new format
dieriver Nov 25, 2025
bfd56d7
Add logic to deserialize the network configuration classes
dieriver Nov 25, 2025
a80975d
Add more tests for new network configuration structure
dieriver Nov 25, 2025
8f8f136
Fix bugs when adding new nodes to a network
dieriver Nov 25, 2025
b529ae7
Update test for remove node from network
dieriver Nov 25, 2025
a1917ed
Implement correct deletion of nodes from a network
dieriver Nov 25, 2025
23423e1
Add test for adding network
dieriver Nov 25, 2025
b294eae
Add extra assertions in the network config tests
dieriver Nov 25, 2025
06f37bb
Fix bug to also remove sockets tuples when removing full networks fro…
dieriver Nov 25, 2025
d04fa2d
Add test for remove network
dieriver Nov 25, 2025
6dbc78b
Add test for serializing network config
dieriver Nov 26, 2025
b502166
Declare network config classes as serializable
dieriver Nov 26, 2025
8682f79
Fix return types of network config serializer functions
dieriver Nov 26, 2025
877051e
Fix expected results from network config serialization test
dieriver Nov 26, 2025
c1b6bf5
Fix network config serialization methods
dieriver Nov 26, 2025
f7a76e6
Add test for deserializing network configs
dieriver Nov 26, 2025
ac02d5d
Fix implementation for "read_from_file" for network config classes
dieriver Nov 26, 2025
494e733
Fix simulaqron settings tests
dieriver Nov 26, 2025
1d2b1c4
Remove unnecessary simulaqron settings serializer function and dead code
dieriver Nov 26, 2025
222235d
Simplify the SocketsConfig class to use the already loaded in-memory …
dieriver Nov 26, 2025
cf9ebaa
Delete some unused code. Update documentation of SocketsConfig class
dieriver Dec 2, 2025
3230d30
Update the tests of the Network class to use the new network_config g…
dieriver Dec 2, 2025
de86133
Make the "run" entry point to use the given network config or use the…
dieriver Dec 2, 2025
a4647c1
Adapt host_config tests for the new usage
dieriver Dec 2, 2025
0466309
Fix bug in the "run_applications" main entry point
dieriver Dec 2, 2025
dec927b
Make tests for free and get_qubit_state to rely on default configurat…
dieriver Dec 2, 2025
59dfeb2
Fix bug in connection to use a non-None value for default network name
dieriver Dec 2, 2025
d29ef1d
Correctly reset configurations between tests in free and get_qubit_st…
dieriver Dec 2, 2025
78a073d
Fix failed tests
dieriver Dec 2, 2025
e1915f0
Fix bug when resetting network config to the default value
dieriver Dec 2, 2025
ae5798e
Use the loaded network config when creating SocketsConfig objects
dieriver Dec 2, 2025
503e78b
Small code changes
dieriver Dec 2, 2025
c4439f7
Adapt simulaqron CLI code to use the new configurations
dieriver Dec 2, 2025
70b40a9
Allow to specify a network config file when starting a simulaqron net…
dieriver Dec 2, 2025
4a45741
Correctly load and save files to cwd when using CLI
dieriver Dec 2, 2025
4cf43ee
Add descriptive messages to the simulaqron CLI commands
dieriver Dec 3, 2025
ac5c0a7
Small changes in pydoc
dieriver Dec 3, 2025
8085cfc
Fix small bug on the simulaqron "stop" command
dieriver Dec 3, 2025
b7445ac
Define local and home config file paths in a single place
dieriver Dec 3, 2025
0e16726
Make the native teleport example work
dieriver Dec 3, 2025
b7b291e
Small fixes in the simulaqron cli entry point code
dieriver Dec 3, 2025
d27aa31
Added to this branch
StephanieWehner Dec 3, 2025
5f5fb05
Add missing JSON configuration files for teleport example
dieriver Dec 3, 2025
89972b3
Update teleport README file
dieriver Dec 3, 2025
b2d9300
Linter changes
dieriver Dec 3, 2025
c2a6df9
Merge branch 'Rework_network_config' into release4.0.0-preview
dieriver Dec 3, 2025
ef8527c
Changes on the corrRNG example
dieriver Dec 3, 2025
9ed311d
Linter changes
dieriver Dec 3, 2025
14e7b8f
Move settings tests to its onw folder
dieriver Dec 4, 2025
b2c0d83
Add test case for reading (and correcting) an old json format network…
dieriver Dec 4, 2025
1016eea
Adapt test for olf json format to use a temporal file that will be re…
dieriver Dec 4, 2025
3e681a4
First version of the format conversion code
dieriver Dec 4, 2025
58edecc
Fix code to correct old json network format
dieriver Dec 4, 2025
8d1a4c2
Fix test case for correcting old json network format
dieriver Dec 4, 2025
6b6f399
Add a way to filter out loaded SocketsConfigs
dieriver Dec 4, 2025
0ac2262
Fix flushing and closing files when not needed in signal handlers
dieriver Dec 4, 2025
03a8ef6
Fix merges test to use the new unified network configuration
dieriver Dec 4, 2025
a7c8994
Fix sdk qubits tests
dieriver Dec 4, 2025
1c70717
Changed how SimulaQron does logging: we no longer use the logging fro…
StephanieWehner Dec 5, 2025
68ad1c2
Update nativeMode template file
dieriver Dec 5, 2025
f5da50d
Rename method for loading configuration from files to harmonize termi…
dieriver Dec 5, 2025
43b53d2
Add documentation for the new configuration system
dieriver Dec 5, 2025
0cd905f
Rename cli module
dieriver Dec 5, 2025
5b94bcd
Some code refacto in the cli code
dieriver Dec 5, 2025
c5398e3
Add option to specify simulaqron setting when starting the network fr…
dieriver Dec 5, 2025
827f34b
Check network and node names before starting simulaqron network from CLI
dieriver Dec 5, 2025
6692ed8
Fixed async model mismatch between NetQASM and SimulaQron, make tests
StephanieWehner Dec 6, 2025
145ef74
3 things were fixed:
StephanieWehner Dec 6, 2025
62a645a
Fixed config file issues in which one could not pass a file using sim…
StephanieWehner Dec 7, 2025
9d8b53a
Added a message one can use simulaqron COMMAND -h to get more options…
StephanieWehner Dec 7, 2025
bbd5b4d
Discovered NOONE had run make tests_all for years (probably not since…
StephanieWehner Dec 7, 2025
097d12f
Delete "nrnodes" option in simulaqron cli
dieriver Dec 8, 2025
2764417
First changes in the documentation for configuring nodes
dieriver Dec 8, 2025
0806501
Merge branch 'release4.0.0-preview' into release4.0.0-documentation
dieriver Dec 8, 2025
26606fc
Linter changes
dieriver Dec 8, 2025
bd4c4a6
Finalize the documentation about how to start and configure SimulaQron
dieriver Jan 12, 2026
ad2928f
Finalize the documentation about how to start and configure SimulaQron
dieriver Jan 12, 2026
11611d9
Small update on the "getting started" documentation
dieriver Jan 12, 2026
408b674
Add documentation for the simulaqron settings
dieriver Jan 13, 2026
600026a
Add documentation for the specific settings on the simulaqron_setting…
dieriver Jan 13, 2026
f3303ca
Update "examples" documentation. Format changes to avoid super long l…
dieriver Jan 13, 2026
fc4e98d
Update and reformat documentation on overview.rst
dieriver Jan 13, 2026
46a549e
Update all "TODO" notes to a warning in the final rendering
dieriver Jan 13, 2026
0d0f7c1
Fix warning when rendering documentation
dieriver Jan 13, 2026
407c29a
Update documentation of th native mode examples
dieriver Jan 13, 2026
9f7cef7
Move native mode examples documentation to its own folder
dieriver Jan 13, 2026
5d8e772
Update broken references in native mode examples documentation
dieriver Jan 13, 2026
1c74dc7
Update documentation building script
dieriver Jan 13, 2026
eea7cdf
Update documentation building script
dieriver Jan 13, 2026
47f41aa
Update documentation of the simulaqron.general package
dieriver Jan 13, 2026
00d84dc
Update documentation of the simulaqron.local package
dieriver Jan 13, 2026
617fa62
Update documentation of the simulaqron package
dieriver Jan 14, 2026
4a7d8ac
Update documentation of the simulaqron.netqasm_backend package
dieriver Jan 14, 2026
f29cc80
Update documentation of the simulaqron.run package
dieriver Jan 15, 2026
f66fafa
Update documentation of the simulaqron.sdk package
dieriver Jan 15, 2026
1265111
Update documentation of the simulaqron.start package
dieriver Jan 15, 2026
ab1f263
Update documentation of the simulaqron.settings package
dieriver Jan 15, 2026
86966af
Update documentation of the simulaqron.virtual_node package
dieriver Jan 15, 2026
b92c2fc
Fix warnings when compiling python docs
dieriver Jan 15, 2026
3cad396
Fix and re-enable test_merges
dieriver Jan 16, 2026
f421fe1
Add a note about moving the merge tests to NetQASM API
dieriver Jan 16, 2026
8a47166
Fix entry point declaration for CLI tool
dieriver Jan 16, 2026
0b14c31
Linter changes
dieriver Jan 16, 2026
09250a1
Add projectq and qutip as test deps
dieriver Jan 16, 2026
28f1861
Fix bugs in the CLI entry module.
dieriver Feb 2, 2026
9126731
Small linter changes
dieriver Feb 2, 2026
3523f11
Allow classical socket to be configured ot act as a server or client,…
dieriver Feb 3, 2026
0d03e86
Add first early version of the new SDK protocol definition
dieriver Feb 3, 2026
512f496
Add classical communication example using the new SDK.
dieriver Feb 4, 2026
05bd58d
Update the specification of the new SDK to create clients and servers
dieriver Feb 4, 2026
844acb6
Update documentation on the new SDK for simulaqron.
dieriver Feb 4, 2026
379a126
Add documentation for the simple client-server example using the new SDK
dieriver Feb 4, 2026
39d4d57
Adapt the "distributed" version of the teleport to use the new SDK to…
dieriver Feb 4, 2026
93089c3
Linter changes
dieriver Feb 4, 2026
c2ad9ff
Move other native mode examples to the new network configuration format
dieriver Feb 5, 2026
3ad36d4
Update the template for native mode applications
dieriver Feb 5, 2026
7fca7b4
Update the new SDK teleport example
dieriver Feb 5, 2026
c89b723
Add template for creating client-server applications using the new SDK
dieriver Feb 5, 2026
ab8a0dd
Add template for creating quantum local applications using the new SDK
dieriver Feb 5, 2026
27fc33a
Linter changes
dieriver Feb 5, 2026
b703014
Small update on the new SDK application templates
dieriver Feb 6, 2026
4190426
Add corrRNG example using new SDK
dieriver Feb 6, 2026
c92e704
Add first version of the "extended GHZ" example using the new SDK
dieriver Feb 6, 2026
c0700b0
Switch examples to explicit flush(); add eventBased examples and docs
Mar 8, 2026
e828af3
Ensure all new-sdk examples are consistent
Mar 8, 2026
bef1651
Fix all linter errors (make lint now exits 0)
Mar 8, 2026
04450e7
Fix SyntaxWarning in stabilizer_states.py docstring
Mar 8, 2026
d721c96
Fix CI: add make examples target, replace netqasm.yaml with slow tests
Mar 8, 2026
05f3493
Fix missing sleep between node launches in nativeMode examples
Mar 8, 2026
080bffc
Fix virtRoot race condition in nativeMode server nodes
Mar 8, 2026
28b9bcc
Changed examples to not include all (e.g. not NativeMode)
Mar 8, 2026
946f86e
Fix nativeMode race conditions: add PB retry logic to setup_local and…
Mar 8, 2026
feeb218
Remove slow tests workflow from push CI
Mar 8, 2026
c9cf55b
Switch default backend to qutip, remove projectq dependency from CI
Mar 8, 2026
c55f88f
Add make ci requirement to CLAUDE.md commit policy
Mar 8, 2026
efb6477
docs: overhaul Sphinx documentation, remove all CQC references, updat…
Mar 11, 2026
e5ee468
docs: rewrite ConfNodes for single vs multi-machine, fix Examples lin…
Mar 11, 2026
d346740
docs: fix broken :ref: syntax in GettingStarted.rst
Mar 11, 2026
bfb8e45
Replace Sphinx-specific directives with standard RST links for GitHub
Mar 11, 2026
1479adf
Upgrade minimal supported python verison to 3.10. Update dependencies…
dieriver Mar 12, 2026
fd0728e
Small changes to make the code compàtible with python 3.10
dieriver Mar 12, 2026
4cb542c
Update changelog in preparation for release
dieriver Mar 12, 2026
ee7f1ba
Update readme file to update installation instructions directly from …
dieriver Mar 18, 2026
096c084
Update "getting started" documentation and fix bugs in CLI client to …
dieriver Mar 18, 2026
4eec441
Update "configure nodes" documentation and fix bugs in CLI client to …
dieriver Mar 18, 2026
6cecaaa
Update "index" "Overview" and "NetQASM" documentation
dieriver Mar 18, 2026
389dd2e
Update documentation of "native" examples
dieriver Mar 18, 2026
ce0f0b3
Update documentation for native examples
dieriver Mar 18, 2026
b70bcab
update polite ping pong with new protocol
spoukke Mar 23, 2026
adc9478
use explicit utf-8
spoukke Mar 23, 2026
c575bc1
move Alice's handlers and dispatch table to module scope in politeAli…
spoukke Mar 23, 2026
dd8c23f
Merge pull request #285 from spoukke/chore/spoukke/update-polite-ping…
dieriver Mar 23, 2026
8bd1fff
Fix a bug to correctly cleanup after sending "Stop App" message. This…
dieriver Mar 24, 2026
27f0fd6
make ping pong state machine more explicit
spoukke Mar 26, 2026
6ecc6cf
make polite ping pong an extension to ping pong's state machines
spoukke Mar 26, 2026
d2116b3
Merge pull request #286 from spoukke/fix/spoukke/ping-pong-state-mach…
StephanieWehner Mar 29, 2026
b018d94
Update documentation. Fix broken internal links when building the doc…
dieriver Mar 31, 2026
d97a8dc
Address small linter fixes
dieriver Mar 31, 2026
66bfe35
Add github action for publishing docs
dieriver Apr 10, 2026
537dff9
Update doc building requirements
dieriver Apr 10, 2026
4856484
Fix usage of upload-pages-artifact action
dieriver Apr 10, 2026
da0f15d
Fix location of docs artifact
dieriver Apr 10, 2026
c47e062
Fix new dependency version that breaks a test
dieriver Apr 14, 2026
9692eae
Add Dockerfile to create a docker image with simulaqron software
dieriver Apr 14, 2026
50b73d6
Fix permissions on example bash scripts
dieriver Apr 15, 2026
b2a13be
Improve docs readme and makefile
dieriver Apr 15, 2026
6e95b67
Harmonize LF line ending char for all relevant files
dieriver Apr 15, 2026
475df15
Apply first batch of documentation fixes after review
dieriver Apr 15, 2026
075da7f
Enable "docs" github action only when a tag is pushed
dieriver Apr 15, 2026
adadf89
Add publish github action spec
dieriver Apr 15, 2026
ad71748
Fix publish github wokflow spec. Linter changes
dieriver Apr 15, 2026
e2f554a
Run publish workflow only when pushing git tags
dieriver Apr 15, 2026
ddf00a4
Update new-sdk teleport example after comments
dieriver Apr 16, 2026
c996ece
Allow SimulaQronClassicalClient class to also pass arguments to the h…
dieriver Apr 16, 2026
54489a2
Fix code and documentation of the extended GHZ example
dieriver Apr 16, 2026
d697397
Update corrRNG example code and documentation after comments
dieriver Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions .bumpversion.cfg

This file was deleted.

4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* text=auto eol=lf
*.png binary
*.jpg binary
*.gif binary
7 changes: 4 additions & 3 deletions .github/workflows/actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
- uses: actions/checkout@master
- uses: actions/setup-python@master
with:
python-version: 3.8
python-version: "3.12"
- run: |
make install
make lint
Expand All @@ -22,9 +22,10 @@ jobs:
- uses: actions/checkout@master
- uses: actions/setup-python@master
with:
python-version: 3.8
python-version: "3.12"
- run: |
make install
make test-deps
make tests

examples:
Expand All @@ -34,7 +35,7 @@ jobs:
- uses: actions/checkout@master
- uses: actions/setup-python@master
with:
python-version: 3.8
python-version: "3.12"
- run: |
make install
make examples
46 changes: 46 additions & 0 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Build docs

on: push

jobs:
build:
name: Build Docs
runs-on: ubuntu-latest
# We only execute this step if the commit is tagged, i.e., this is a release
if: startsWith(github.ref, 'refs/tags')
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Build docs
uses: actions/setup-python@master
with:
python-version: "3.12"
# We *need* to install projectq to generate documentation
# This is needed because sphinx analyzes SimulaQron's code to generate the HTML;
# this implies that the modules are imported (but not executed), which therefore
# imports projectq classes.
- name: Install simulaqron and build docs
run: |
make install-optional
cd docs
make install-deps
make build
- name: Upload static files as artifact
id: deployment
uses: actions/upload-pages-artifact@v4
with:
path: docs/build/html/

deploy:
name: Deploy docs
needs: build
runs-on: ubuntu-latest
# We only execute this step if the commit is tagged, i.e., this is a release
if: startsWith(github.ref, 'refs/tags')
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
27 changes: 0 additions & 27 deletions .github/workflows/netqasm.yaml

This file was deleted.

46 changes: 46 additions & 0 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Publish Python distributions to PyPI

on: push
jobs:
build-n-publish:
name: Build and publish Python distributions to PyPI
runs-on: ubuntu-latest
# We only execute this step if the commit is tagged, i.e., this is a release
if: startsWith(github.ref, 'refs/tags')
# Use the following for PyPI deployments
environment:
name: pypi
url: https://pypi.org/p/simulaqron
# Use the following for TestPyPI deployments
# environment:
# name: testpypi
# url: https://test.pypi.org/p/simulaqron
permissions:
id-token: write
steps:
- name: Checkout code
uses: actions/checkout@master
- name: Set up Python 3.12
uses: actions/setup-python@master
with:
python-version: "3.12"
- name: Install pypa/build
run: >-
python3.12 -m
pip install
build
--user
- name: Build a binary wheel and a source tarball
run: >-
python3.12 -m
build
--sdist
--wheel
--outdir dist/
.
# - name: Publish distribution to Test PyPI
# uses: pypa/gh-action-pypi-publish@release/v1.14
# with:
# repository_url: https://test.pypi.org/legacy/
- name: Publish distribution to PyPI
uses: pypa/gh-action-pypi-publish@release/v1.14
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
*.pyc
.*.sw?
*.DS_Store
*.whl
/docs/build/*
/build/*
/dist/*
Expand All @@ -9,6 +10,9 @@

.idea/*
.vscode/*
.claude/*

cqc/backend/logFile*
examples/**/log/*

*.out.txt
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ For more details refer to the [documentation](https://softwarequtech.github.io/S

Upcoming
--------
2026-03-13 (v4.0.1)
-------------------
- Migrated project specification to use modern TOML approach.
- Tested working with Python versions 3.10, 3.11 and 3.12.
- Added new SDK for easily creating SimulaQron applications. This new SDK allows to also create
client-server applications using event-based programming paradigm.
- Updated the SimulaQron network configuration file format. This is done to align the network
configuration file with the data required by SimulaQron "native" mode and the "NetQASM" mode.
- Updated documentation of most of the undocumented functions and to match the new developments.

2021-11-18 (v4.0.0)
-------------------
Expand Down
30 changes: 30 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# SimulaQron Development Conventions

## Hard Requirements

### Examples
- Examples MUST always use separate files per node (e.g. `nodeTest-client.py`, `nodeTest-server.py`), never single-file programs. Students must be able to run each node on a separate machine.
- Follow the `new-sdk/template-client-server` structure: two node scripts + `run.sh` + `terminate.sh` + config JSONs.
- All nodes should print their own output (not rely on return values visible only to the test harness).

### Connection Pattern
- Prefer creating a `NetQASMConnection` once and reusing it with `flush()` for multi-round quantum programs, rather than opening/closing with `with` each round.
- `conn.flush()` is the sync point that makes measurement results readable via `int(m)`.

### Backends
- Use `stabilizer` backend by default in examples and tests unless non-Clifford gates are needed.
- `projectq` is deprecated / hard to install. Prefer `qutip` when full state simulation is needed.

## File Conventions
- **Examples:** `examples/new-sdk/` — all new examples use the new SDK
- **Tests:** `tests/slow/sdk/` — SDK-level integration tests
- **Core code:** `simulaqron/` — simulator source
- **Docs:** `docs/` — Sphinx documentation (currently outdated, being rewritten)

## Git / Commit Policy
- **Always run `make ci` before committing.** All linting, tests, and examples must pass before any commit is created.
- Never commit or push without explicit user approval.

## Virtual Environment
- The project venv is at `.venv/` — activate with `source .venv/bin/activate`
- Install with `pip install -e .` (skip `[test]` if projectq build fails)
145 changes: 88 additions & 57 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,57 +1,88 @@
## Dockerfile
# This container provides a complete run-time environment for SimulaQron.
#
## Build:
# From inside the top-level SimulaQron directory run
#
# docker build -t <image_name> .
#
# where you should replace <image_name> with the name you want to give to the
# docker image.
#
## Run:
# To start the container and enter the shell prompt inside, run
#
# docker run -it <image_name>
#
# This will start a docker container with SimulaQron inside the
# /workspace/SimulaQron directory (this default can be changed, by changing the
# WORKSPACE variable in this file). Note that this is only a COPY of the
# SimulaQron directory that was made during the build step so if you make any
# changes on the host system, they will not be reflected in the container until
# you rebuild the image.
#
# However, if you wish, you can mount the host's SimulaQron directory into the
# container rather than using a copy made during the build step, you need to
# explicitly mount it when starting the container, e.g.
#
# docker run -it -v /path/to/SimulaQron:/workspace/SimulaQron <image_name>
#
# This will mount /path/to/SimulaQron inside the container in
# /workspace/SimulaQron. Note that on Linux systems with SELinux present, the
# mount option has to be `-v /path/to/SimulaQron:/workspace/SimulaQron:z`.
#
## Multiple shells:
# To attach to a running container with a new shell run
#
# docker exec -it <container_name> bash
#
# where <container_name> is the name of the running container (this is in
# general not the same as the image name). To find what name your container
# has, run `docker ps`.

FROM ubuntu:18.04
LABEL author="Wojciech Kozlowski <w.kozlowski@tudelft.nl>"

# Update docker image
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get upgrade -y

# Install Python 3
RUN apt-get install -y python3 python3-pip python3-tk

# Set a UTF-8 locale - this is needed for some python packages to play nice
RUN apt-get -y install language-pack-en
ENV LANG="en_US.UTF-8"

RUN pip3 install simulaqron
# If you need a slim version, use "alpine" base instead of trixie (Debian)
#FROM python:3.12-alpine AS base-image
FROM ubuntu:24.04 AS base-image

# Install packages

#RUN apk add --no-cache bash vim nano libstdc++ libgomp
RUN apt-get update
RUN apt-get dist-upgrade -y
RUN apt-get install -y bash vim nano libgomp1 adduser git openssl make software-properties-common

RUN add-apt-repository ppa:deadsnakes/ppa
RUN apt-get update

# Install Python 3.12
RUN apt-get install -y python3.12-full python3.12-dev

# Switch to Bash
SHELL ["/bin/bash", "-c"]

# Delete the build-in user - not needed in alpine images
RUN userdel -r ubuntu

# Create student user
ARG GNAME=student
ARG GID=1000
ARG UNAME=student
ARG UID=1000
ARG UHOME=/home/student
ENV HOME=${UHOME}
RUN set -o errexit -o nounset
RUN addgroup --gid ${GID} "${GNAME}"
RUN adduser --home "${UHOME}" --disabled-password --uid ${UID} --ingroup "${GNAME}" "${UNAME}"
WORKDIR ${UHOME}

# Remove unnecessary software
RUN apt-get purge -y adduser software-properties-common
RUN apt-get autoremove -y

FROM base-image AS venv-image

# Install build essentials, to correctly build python deps
# We install it only for this stage, so we create a lighter docker image for executing
#RUN apk add --no-cache alpine-sdk
RUN apt-get update
RUN apt-get install -y build-essential cmake linux-headers-generic

# Create python virtual environment
WORKDIR ${UHOME}
RUN python3.12 -m venv simulaqron-venv
# We have to "manually" activate the virtual environment
ENV PATH="${UHOME}/simulaqron-venv/bin:$PATH"

# Install SimulaQron
# Option 1: Install from the wheel file
# Copy the simulaqron wheel into the container
COPY dist/*.whl ${UHOME}
RUN pip install *.whl
RUN rm *.whl

# Install extra packages that need build-essential
RUN pip install "qutip<5.0.0"
RUN pip install "setuptools<81" pybind11
RUN pip install "git+https://github.com/ProjectQ-Framework/ProjectQ.git@v0.8.0" --no-build-isolation

# Option 2: (Recommended for release) Install from PyPI
#RUN pip install "simulaqron[opt]>=4.0.1"

FROM base-image AS run-image

# Copy installed python packages from previous image
COPY --from=venv-image --chown=${UNAME} ${UHOME}/simulaqron-venv "${UHOME}/.local"
# Since these files come from a python virtual environment
# we need to fix some absolute paths
WORKDIR ${UHOME}/.local/bin
RUN sed -i "s|${UHOME}/simulaqron-venv/|${UHOME}/.local/|g" *
# Activate the "virtual environment" we just copied
ENV PATH="${UHOME}/.local/bin:${UHOME}/.local:$PATH"

# Configure libgomp to use a single thread to avoid deadlocks in simulaqron
ENV OMP_NUM_THREADS=1

# Switch to user student
USER student
WORKDIR ${UHOME}
RUN echo 'export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ "' >> ~/.bashrc

CMD bash
Loading