This repository was archived by the owner on Jun 15, 2023. It is now read-only.
Tags: cda-tum/dd_package
Tags
Pipe-through template parameters for `Package` (#50) * ♻️ pass-through template parameters of DD package * ♻️ extract `Node` classes from `Package` and refactor table getters * 🚚 move `createInitialMatrix` from QFR to DDPackage * ♻️ provide a configuration struct for DD packages that can be derived from * 🔖 v2.1.0 * 🎨 fix file header links
Hybrid Schrödinger-Feynman Simulation (#12) ✨ state generation, matrix generation, and multiplication receive an additional parameter start (default 0) that indicates the bottom-most qubit the DD is built from 💥 removed the makeGateDD constructor taking two Qubit arguments for control and target, as it is ambiguous with the new start parameter ✨ method for deleting a specific edge of a DD node ✨ kronecker receives an additional parameter indicating whether to increase the indices of the top DD ✨ method for tranfering a DD Edge from one package to another ✨ methods for (recursively) exporting and adding amplitudes ✨ ComplexValue addition 🏁 fix binary serialization issues under Windows ♻️ runtime exceptions instead of assertions 📝 fix readme example 📄 updated license Co-authored-by: HartwigB <[email protected]>
Bugfix Update 2.0.1 (#10) ⚡/🍎 all hash functions are refactored so that hashing is platform and standard library independent again (fixing slow performance on macOS) ⚡ improve memory handling by reverting from using stack and forward_list to dedicated next pointers that are pre-allocated with the entries ⚡ only clear compute tables if anything has been collected by the garbage collection ⚡ adjust garbage collection limit depending on the number of remaining entries ⚡ reduce initial garbage collection limits ⚡ introduce additional 1/sqrt(2) static member in complex table ⚡ always check 0, 1/sqrt(2), and 1 first upon accessing the respective buckets in the complex table 🐛 add nullptr checks in reference counting methods ♻️ moved generation of special DDs (e.g., SWAP) from QFR to DD Package 🐛 fix bug in colorFromPhase when a negative phase was encountered 🐛 fix misaligned access on ComplexTable::Entry 🔥 remove unused GC_INCREMENT ✅ allow for some up and downs in code coverage ⚡ complex table hash now rounds instead of truncates the calculated value 🎨 number printing code moved from Complex to ComplexValue 🐧 disable LTO in case clang is used under linux as some versions of the linker under Ubuntu do not work with Clang's ThinLTO
JKQ DD Package 2.0 (#8) - 🏗️ Library is now header-only. All code from `.cpp` files has been moved to corresponding `.hpp` files - 🚌 moved all header to `include/dd` so that users of the library include it as, e.g. `#include dd/Package.hpp` - 💥 Node and Edge Structs - separate Node classes for vectors (`vNode`) and matrices (`mNode`) - separate Edge classes for vectors (`vEdge`) and matrices (`mEdge`) - Node and Edge structs become more than mere containers, e.g., `<Edge>.isTerminal()` is used instead of `dd::Package::isTerminal(<Edge>)` - `vNode::terminal` and `mNode::terminal` as terminal nodes - `vEdge::zero`, `vEdge::one`, `mEdge::zero`, `mEdge::one` as zero and one terminals - `isZeroTerminal()` and `isOneTerminal` routines for `Edge` struct - 💥 Compute Table - (Templated) class for compute tables - Separate compute tables for all operations supported by the package - Compute table for (conjugate) transpose are now unary to conserve space - Hash for compute tables is refactored and now uses `std::hash` specializations for `Complex`, `ComplexValue`, `Edge` and `CachedEdge`. - 💥 operations - (Templated) class for noise operation table - `operations` is renamed to `noiseOperationTable` to better convey its intent - removed controls, i.e., only the kind of operation and the target qubit are used as hash - 💥 Unique Table and Memory Management - (Templated) class for unique tables - `next` is dropped from the `Node` classes - Buckets are now single-linked lists - Available space chain is a vector of vectors and represents a collection of chunks - Chunks grow geometrically with a default factor of 2 - In addition there is a stack<Node*> that handles nodes returned to the available space chain - 💥 Complex Table, Complex Cache and Memory Management - Separate both concepts into separate (templated) classes - `next` is dropped from the complex table entry class - Complex table buckets are now single-linked lists - Available space chain is a vector of vectors and represents a collection of chunks - Chunks grow geometrically with a default factor of 2 - In addition there is a stack<Entry*> that handles numbers returned to the available space chain - 💥 Data Types for Qubits - Instead of sprinkling `(unsigned) short` throughout the code for indexing qubits and controls, typedefs are introduced - `Qubit` thereby represents the index of a qubit, i.e. [0, max). Currently defaults to a signed 8bit integer type which allows to address up to 128 qubits. - `QubitCount` is the corresponding unsigned type to `Qubit` and is used for specifying the number of qubits in various routines. Since it is unsigned, it can also represent `max`. - `RefCount` is used as datatype for reference counting in the complex numbers' table as well as the unique tables. The default (`uint_fast32_t`) allows for a maximum reference count of ~4 billion. - 💥 `printDD` routine dropped - 🎨 use C++17 inline variables/methods - 📈 add benchmarks for obtaining nodes from unique table - ♻️ use smallest 32-bit integer type for reference counting to better ensure alignment - ♻️ transition from Graphviz RGB to HLV color definitions - 👌 replace `SQRT_2` with `SQRT2_2` for better clarity - 🔥 remove redundant declaration of `SQRT_2` in `DDcomplex.hpp` - ♻️ moved `PI` constant from `DDcomplex.hpp` to `Definitions.hpp` - 💚 removed dd_package_example from coverage build as it provides a false sense of coverage - 🏗️ exclude the benchmark target from the `all` build