All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added support for the Stabilizer formalism by introducing
StabilizerStateandQuantumManagerStabilizer- A new class
QuantumManagerDenseQubitis added. It is the child class ofQuantumManagerand parent class ofQuantumManagerKetandQuantumManagerDensity - Attributes
truncationanddimare moved from the parent classQuantumManagerto the child classQuantumManagerDensityFock; theTimeline.__init__()signature update: argumenttruncationis replaced withmanager_kwargs
- A new class
- Add a module to convert an arbitrary graph object to sequence configurations for QuantumRouter with MIM BSM
- Add FatTree topology and BCube topology
- Added the
routingmodule: a new parent classRoutingProtocolfor the subclassesStaticRoutingProtocolandDistributedRoutingProtocol. The register decorator is used to make it easy to plug in new routing protocols in the future. - Add empty init() to Protocol to satisfy class hierarchy.
- Created project scripts for each config generator.
- Added the
swappingmodule that has the following classes. The subclasses use the registry decorator (factory pattern).- Base class:
EntanglementSwappingA&EntanglementSwappingB - Subclass for ket vector and density matrix:
EntanglementSwappingA_Circuit&EntanglementSwappingB_Circuit - Subclass for Bell diagonal state:
EntanglementSwappingA_BDS&EntanglementSwappingB_BDS
- Base class:
- Update the tutorial to catch up on the recent updates. Add notes saying refer to chapter 6 Application module for standard usage
- Introducing
EARLY_EXPIREmessage type. A request has astart_timeandend_time. When a request is finished before theend_time, then the reservation (and the associated rules) should expire early. If not, the quantum network will keep generating entanglement pairs because the rules still exist. - Added three minute tutorial (tutorial file, md, json file). Also reorganized nav bar to have about section, tutorial section, and moduale refrence
- Using typer for CLI, creates a unified interface for topology generation. Allow for custom graph objects in CLI.
- Moved all old topologies to NetworkX graph objects
- Docstring, documentation, comment, logging, and various cosmetic updates.
- Moved routing_protocol init() to network manager.
- Trigger empty inits for resource and network manager to enable future bootstrapping.
- Migrated
utils/json_config_generators/tosequence/config_generators/. - Add a
sender_delayargument to theNode.send_message()to account for processing delay, queueing delay, transmission delay, etc. - Break down the
quantum_manager.pyinto a module consisting of multiple files where each file has a quantum manager class - Break down the
quantum_state.pyinto a module consisting of multiple files where each file has a quantum state class
- Old configuration generators
- The old
swapping.pyis removed - The old
quantum_manager.pyis removed - The old
quantum_state.pyis removed - Removed support for Python 3.11
- Removed
qlansubmodule
- Some minor bugs in quantum states
- Fixed a bug in
Node.send_qubit()where if there are no quantum channels available for the qubit to travel, aKeyErrorcrash would occur.
NetworkManagerABC with a factory pattern for selection and future implementation of new network managers.- File
action_condition_set.pyis added. This contains the action, condition, and request functions for entanglement generation, swapping, and purification. - Class
DistributedRoutingProtocolis added, among many other supporting classes inrouting_distributed. This module does distributed entanglement routing. - Class
NetworkManagerhas two new attributes:forwarding_tableandrouting_protocol. - Add a cutoff flag to memory to allow disable the expiration of memories.
- Add a template in config json for network manager to select routing protocols (distributed vs. static)
- Add seven new unit tests to cover the newly added
routing_distributedmodule - Added
generate_reference_rst.pyto generate the .rst files for the Read the Doc.
RSVPProtocolis now decoupled from theDistributedNetworkManager.- Moved
ResourceReservationProtocoltoRSVPProtocolinrsvp.py. - Moved
MemoryTimecardtomemory_timecard.pyand are instantiated by theNetworkManagerRSVPProtocoldoes not instantiateMemoryTimecardanymore. Thetimecardsattribute inRSVPProtocolbecomes a reference to theMemoryTimecardinNetworkManager
- NetworkManager is now
DistributedNetworkManager - Extend and refactor the tests in
test_reservation.py - Minor refactors pertaining to typing errors in
memory.py,resource_manager.py,rule_manager.py,network_manager.pyandreservation.py - The
create_rules()andload_rules()functions of theResourceReservationProtocolwere consolidated and moved to theResourceManagergenerate_load_rules() - The
purification_modeclass attribute is now part of aReservation, and is contained within the message. - Fixing typing issues with
ResourceManagment,NetworkManager,ResourceReservationProtocol, and related functions throughout the codebase. - Update the LICENSE.md copyright year
- The previous
StaticRoutingProtocolclass is split into two classes:StaticRoutingProtocolandForwardingProtocol. This can be viewed as the separation of control-plane and the data plane for the entanglement routing module. The control plane does the routing, the data plane does the forwarding. The Routing Protocols write to theforwarding_table, while the Forwarding Protocol reads from theforwarding_table. - Minor refactors in
router_net_topo.pyandnetwork_manager.py. - Memory.cutoff_ratio is allowed to be greater than 1.
- Suppress linear algebra-related warning (doing
sqrtmon singular matrix) - Tutorial Chapter 5 on Network Manager. A new figure for network manager is introduced.
- Read the Docs is updated. The remote Read the Docs can now pre-build the .rst files.
- Attribute
protocol_typeis moved from classEntanglementProtocolto classProtocol.
- Temporarily disabled setting the
es_succ_probandes_deg_ratefrom the RSVP protocol. routing.pymodule is removed, replaced byrouting_distributed.py,routing_static.py, andforwarding.py.
- A minor bug in tutorial
two_node_eg.ipynb - A minor bug in
timeline.py
- Add support for Python 3.14
- A new function
read_version_from_pyproject(). Don't need to update the version number 0.x.x at multiple locations anymore
- Moves the build-backend from legacy python to uv. More speed, more verbose useful errors, no more specifying modules in pyproject, dependency locks
- A minor bug in
gui.py
- A new state
PURIFIEDinMemoryInfois introduced to enable the new purify strategyonce, i.e. only purify one time. The previous existing stragety is renamed tountil_target, i.e., keep purifing until reaching the target fidelity. QuantumManagerKet.get_ascending_keys(): callreorder_qubits_ascending_keys()before getting the stateQuantumManagerKet.reorder_qubits_ascending_keys(): reorder the quantum state such that the corresponding keys are in ascending order.QuantumManagerDensity.get_ascending_keys()andQuantumManagerDensity.reorder_qubits_ascending_keys(): same reording qubits for density matrix formalism.quantum_utils.pretty_ket(): return a pretty-looking state vector stringNetworkManager.get_reservation_protocol(): Method to get the resource reservation protocol in the network manager's protocol stack.
- Updated workflows
development.yml,publish.yml,validation.yml. Only run on the main repository (sequence-toolbox/SeQUeNCe), preventing unintended builds and publishes from forks. - Standardized
gmpy2context precision to 80 bits in timing-related modules (detector.py,optical_channel.py) for computation efficiency and sufficient accuracy. quantum_utils.measure_entangled_state_with_cache_ket(): make code more mathematically sound.- A lot of minor refactoring (spacing, indentation, f-string, comments, docstring, etc.)
- Updated related
pytest
- Improved time calculations in
Detector.record_detectionto use high-precisiongmpy2
- Remove all parallel module related stuff under
utils/json_config_gnerators/*,config_generator.pyandrouter_net_topo.py. - Removing and reorganizing examples in the
examplefolder.
- Migrate code to fit PEP requirements for py3.11
- Fixed the Tutorial so it is compatible with SeQUeNCe version 0.8
- Add
decoherence_errorand validation for var inMemory.__init__
- Removed support for Python version 3.10
- Class factory support for generation, purification
- Implements BDS formalism
- Implements single heralded entanglement generation protocol. See
entanglement_management.generation.single_heralded
- Modified related code to account for the new factory pattern.
- The generation-related modules are under
entanglement_management.generation - The purification-related modules are under
entanglement_management.purification
- The generation-related modules are under
- Modified
constants.pyto include the new purification and generation protocols - Change
QuantumManagerto use the internal factory pattern- The previous instance-level attribute
formalismis changed into a class-level attribute_global_formalism - Class-level attribute
_registryis used to register the subclasses ofQuantumManager
- The previous instance-level attribute
- Removed the old generation and purification protocol classes
- Remove standalone factory class for quantum manager
- Most stuff introduced in v0.7.6 has been temporarily removed
- Adds a configuration system to load plugins from external modules
- Implements dynamic import of
EntanglementGenerationclasses from specified plugins (Trajectree as the first example) - Introduces a new
ShellBSMcomponent and truncation parameter support
- Added method
Node.get_component_by_name(),ResourceManager.expire_rules_by_reservation(), andkernel.quantum_utils.verify_same_state_vector() - Added a new badge for monthly downloads from pepy.tech
- Added Caitao, Ansh, and Robert to the SeQUeNCe author list
- New
pytestfor the teleportation module.
- Fixed
TeleportAppandTeleportProtocol, a lot of redesigns, the major ones are:- Each
TeleportApphas a list ofTeleportProtocolinstances, and each instances owns quantum memories - Fix timing issues in the
TeleportApp: Let Bob first executeEntanglementGenerationA._entanglement_succeed(), then let Alice do the Bell measurement - Optimize the
TeleportAppby expiring the rules and setting the comm memory to RAW right after the teleportation is done. Removeteleport_protocolfromTeleportApp.teleport_protocolsafter its lifecycle is complete
- Each
- Rename
QuantumNodeNetTopotoDQCNetTopo - Updates to class
DQCNodeandTeleportMessage random_state()is moved fromutils.random_statetokernel.quantum_utils- Cosmetic updates, including doc strings
- New class
QuantumFactorythat uses the Factory Method design pattern to manage creating various quantum state managers. - New method
NetworkManager.update_forwarding_table()to update the forwarding table in a quantum router.
- Fixed a floating point issue in QuantumChannel.schedule_transmit() and QuantumChannel.transmit() caused by the
float's precision limitations in Python. Packagegmpy2is used for high precision computation.- Version 0.7.3 attempted to fix this issue, but the fix was unsuccessful.
- In
EntanglementGenerationA.received_message(), explicitly set the priority of the events for future start or update_memory to schedule_counter. It fixes an issue for the edge case when the BSM node is at the end nodes, i.e., distance to one end node is zero.
- Changed the delay in EntanglementGenerationA.received_message() to make it more efficient when the BSM node is not exactly at the middle of two end quantum routers.
- Rename
QuantumNodetoDQCNode, a node designed for distributed quantum computing. - Some constants in module
constantsare changed fromfloattoint. - Several cosmetic updates.
- Some constants in module
constantsare moved back to moduletimeline.
- The badge for sequence monthly downloads is removed, because the website pypistats.org is down.
- new class
QuantumNodeunder topology.node. Adds QuantumNode class extending QuantumRouter with data memory and teleportation capabilities - new class
TeleportAppunder app.teleport_app. Implements TeleportApp for managing quantum teleportation between nodes. - new class
Teleportationunder entanglement_management.teleporation. Core teleportation protocol with Bell measurement and correction handling - new class
QuantumNodeTopounder topology.quantum_node_net_topo. Network topology class for quantum node networks - new class
Noiseunder utils.noise. Noise utilities for depolarizing and measurement error simulation - The pytest for the above.
- Fix a floating point issue in OpticalChannel.schedule_transmit().
- Minor update to README.md
- New shields.io badges at for monthly downloads and python versions
- Updated requirements.txt
- Updated demo codes
New Component Modules from this paper: https://arxiv.org/pdf/2411.11031.
qlan.graph_genqlan.correctionqlan.measurementtopology.qlan.clienttopology.qlan.orchestrator- The unit tests in the folder
tests/qlan - Examples in the folder
example/qlan.
New classes for classical nodes (no quantum attributes)
kernel.entity.ClassicalEntitytopology.node.ClassicalNode
- Updated the code and examples related to the quantum transducer introduced in version 0.7.0
- Minor bug fixes and cosmetic updates
- Add new publications to README.md
New Component Modules from this paper: https://arxiv.org/pdf/2411.11377.
TransducerTransmonFockDetectorFockBeamSplitter2- The unit tests in the folder
tests - Examples in the folder
example/quantum_transduction.
- Reorganized the
absorptive_memoryrelated files - Update the
requirements.txt - Update
constantsmodule - Update comments here and there
- Add support for Python 3.13
- Add support for the latest Numpy (2.2), SciPy (1.14), and QuTiP (5.0)
- Updated the demos of the tutorial for easy of understanding.
- Updated some comments, typing, arguments, and some other minor changes.
- Changelog updates:
- Reversed the changelog, now the latest version update is at the top of the changelog, instead of previously at the bottom.
- Added the timestamp for the version updates.
- Removed support for Python 3.9
- Add new class BellDiagonalState for Bell Diagonal State.
- Add new Quantum Manager for Bell Diagonal State, i.e., QuantumManagerBellDiagonal.
- Add new class SingleHeralded BSM to support single heralded entanglement generation.
- Add support for time-dependent decoherence for the Bell Diagonal State in Memory class.
- Remove existing handlers in logging before setting the new handler
- Use
Read the Docsfor documentation. Update documentation. Old documentation website becomes obsolete. - Update comments and README.md
- Fix a bug in reservation protocol and routing protocol that may lead to route for src->dst being different than dst->src when the network has same length edges.
- We have an Icon for SeQUeNCe!
pip install sequenceis now available!srcfolder is renamed tosequence- Add
sequence/constants.pyto organize the common constants - Add support for Python 3.12
- Add
pyproject.toml
- Various refactoring, include but not limited to updating variable/method names, moving/deleting code, adding/rewriting comments, and making the code more succinct, etc.
- In README.md, installation with option
--editableis encouraged. logginglooks better- In
class Reservation, added attributeentanglement_numberandid - Update
ResourceReservationProtocol.load_rules() - Move
utils/json_config_generators/generator_utils.pytosequence/utils/config_generator.py
- Removed support for Python 3.8
- Removed
setup.py - Removed
MANIFEST.in
- Moved around and added a few files in the
examplesfolder- These are primarily for the IEEE QCE 2023 conference
- Modified the topology output of the GUI to be compatible with new topology upgrades
- Several bug fixes in the GUI
- Added some groundwork for future topology upgrades
- made numerous bug fixes:
- BSM and optical channel components received fixes
- Some residual bugs with GUI usage have been fixed
- Error with typing in Fock quantum manager has been fixed
- Removed support for scipy version 1.11. This is currently causing some issues with qutip.
- Fock state density matrix encoding
- Quantum manager to use fock state density matrix
- Add truncation attribute to quantum managers; Hilbert space dimension is truncation + 1
- Supports error channels based on kraus operators and direct operator action on state
- Hardware models to use fock state density matrix
- Absorptive quantum memory built on AFC
- Interference and direct detection for state tomography
- Moved around and updated some error checking
- Temporarily removed mpich testing for python 3.8 and 3.9 (broken)
- Added some additional error checking to individual quantum states
- This includes additional error checking in the
Photonclass
- This includes additional error checking in the
- The
entanglemethod for thePhotonandFreeQuantumStateclasses has been changed tocombine_state - Updated chapter 1 tutorial in the documentation to match code example
- residual
json5references in examples
- Bug fixes to the GUI and QKD tests
- Added more scripts for the QCE 2022 conference
- Fixed some bugs in the GUI code for classical communication delay
- Removed
mpi4pyfrom install instructions on the README
- Moved all parallel execution code to the parallel directory
- Now installed as separate package
psequence - New setup.py file and makefile specified in parallel folder
- Minimum sequence requirement 0.5.1
- Now installed as separate package
- Parallel scripts are temporarily broken, will need to be rewritten for new structure
- Removed
mpi4pyandpytest-mpirequirements for main package
- Tutorial materials for IEEE Quantum Week 2022 tutorial session
- Reworked interface for nodes and hardware elements
- New Entity interface for receiving/passing photons
- New method for nodes to handle incoming and outgoing qubits
- Polished observer functionality
- Reworked some protocols to utilize new interface
- Some bug fixes for GUI
- GUI for ease of simulation setup
- Framework for future GUI usage to run simulations
- This feature is currently unimplemented and will not work
- Package dependencies for GUI (dash and plotly)
- Updated version requirement for numpy
- This removes support for Python 3.7 and below
- Bug fixes to tutorial chapter 3
- Typo fixes to docstrings in reservation.py
- Corrected units in jupyter notebook example files
- Corrected units for the optical channel class
- Bug fixes for tutorial scripts
Mirrorclass for simple reflection of photons- Sends photon to another node with quantum channel connection to the local node
- Quantum++ package acknowledgement to README
- parallel execution for the kernel module
paralleldirectory with useful tools- Python and C++ servers for managing parallel kernel executions
- Many examples for parallel execution
- updated documentation with parallel code
- utility files for generating network config JSON files
Topologyclass has been made into a simplified base classRouterNetTopoandQKDTopoclasses added for specific network types
- tweaked library dependencies
- added
mpi4pyandmpi-pytestrequirements for parallel execution - removed
json5requirement
- added
- serialization of messages, circuits
- base classes for applications and quantum manager states
- photon loss method
Photon.add_loss()
- moved all random number generation to network nodes
- includes all components and quantum manager functions
- utilizes
Entity.get_generator()method
- reworked timeline events to handle cross-process events
- most protocols and components now use strings instead of explicit instances for classes
- tweaked process of entangelement and reservation protocols
EventListstructure and interface withTimelineTimelinetiming display
- quantum state manager for quantum memories
- quantum circuit class (for use with quantum memories)
qutiplibrary dependency
- rewrite of quantum entanglement class
- change all optical channels to one-way
- logging functionality with
logmodule - cached quantum state measurement
- changed all quantum state representations from list to tuple
- event removal system
- example scripts now use
Timeline.seed()method Timelineevent removal method
- observer functionality for entities
- README file for documentation
- some method-level docstrings
- convert all component constructors from keyword to positional arguments
- change documentation directory from
sphinxtodocs
- push/pop functions for entities and non-stack protocols
- some unnecessary entity attributes