Thanks to visit codestin.com
Credit goes to github.com

Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Tags: cda-tum/dd_package

Tags

v2.2.0

Toggle v2.2.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
Merge pull request #144 from cda-tum/gate-extensions

✨ Two-Qubit Gate Extensions

v2.1.0

Toggle v2.1.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
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

v2.0.2

Toggle v2.0.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
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]>

v2.0.1

Toggle v2.0.1's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
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

2.0.0

Toggle 2.0.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
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

v1.3.0

Toggle v1.3.0's commit message

Verified

This commit was signed with the committer’s verified signature.
burgholzer Lukas Burgholzer
📈 avoid measuring line setting during state/gate generation

📈 avoid measuring state/gate generation during multiplication benchmarks

Signed-off-by: Lukas Burgholzer <[email protected]>