C++ API Index

The Simulator provides basic functions for the derived simulators to use.

template<class Config = dd::DDPackageConfig>
class Simulator

Public Functions

inline explicit Simulator(const std::uint64_t randomSeed)
inline explicit Simulator()
virtual ~Simulator() = default
virtual std::map<std::string, std::size_t> simulate(std::size_t shots) = 0

Run the simulation in the (derived) class.


shots – number of shots to take from the final quantum state


a map from the strings representing basis states to the number of times they have been measured

inline virtual std::map<std::string, std::string> additionalStatistics()
inline std::string measureAll(bool collapse = false)
inline std::map<std::string, std::size_t> measureAllNonCollapsing(std::size_t shots)
inline char measureOneCollapsing(const qc::Qubit index, const bool assumeProbabilityNormalization = true)
std::map<std::string, std::size_t> sampleFromAmplitudeVectorInPlace(std::vector<std::complex<dd::fp>> &amplitudes, std::size_t shots)
template<class ReturnType = dd::ComplexValue>
inline std::vector<ReturnType> getVector() const
inline virtual std::size_t getActiveNodeCount() const
inline virtual std::size_t getMaxNodeCount() const
inline virtual std::size_t getMaxMatrixNodeCount() const
inline virtual std::size_t getMatrixActiveNodeCount() const
inline virtual std::size_t countNodesFromRoot()
std::pair<dd::ComplexValue, std::string> getPathOfLeastResistance() const
inline std::string getSeed() const
virtual std::size_t getNumberOfQubits() const = 0
virtual std::size_t getNumberOfOps() const = 0
virtual std::string getName() const = 0
inline void setTolerance(const dd::fp tolerance)
inline dd::fp getTolerance() const
std::vector<std::priority_queue<std::pair<double, dd::vNode*>, std::vector<std::pair<double, dd::vNode*>>>> getNodeContributions(const dd::vEdge &edge) const

Calculate the contributions of each node and return as vector of priority queues (each queue corresponds to a level in the decision diagram)

Template Parameters:

Config – Configuration for the underlying DD package


edge – root edge to the decision diagram


vector of priority queues with each queue corresponding to a level of the decision diagram

double approximateByFidelity(std::unique_ptr<dd::Package<Config>> &localDD, dd::vEdge &edge, double targetFidelity, bool allLevels, bool actuallyRemoveNodes, bool verbose = false)

Approximate a quantum state to a given fidelity.

Template Parameters:

Config – Configuration for the underlying DD package

  • localDD – pointer to the DD package where the quantum state lives

  • edge – reference to the root node of the quantum state, will point to the new state afterwards if removeNodes is true

  • targetFidelity – the fidelity that should be achieved

  • allLevels – if true, apply approximation to targetFidely to each level, if false, only apply to the most suitable level

  • actuallyRemoveNodes – if true, actually remove the nodes that are identified as unnecessary for the targetFidelity, if false, don’t remove anything

  • verbose – output information about the process and result


fidelity of the resulting quantum state

inline double approximateByFidelity(double targetFidelity, bool allLevels, bool removeNodes, bool verbose = false)
double approximateBySampling(std::unique_ptr<dd::Package<Config>> &localDD, dd::vEdge &edge, std::size_t nSamples, std::size_t threshold, bool actuallyRemoveNodes, bool verbose = false)
inline double approximateBySampling(std::size_t nSamples, std::size_t threshold, bool removeNodes, bool verbose = false)

Public Members

std::unique_ptr<dd::Package<Config>> dd = std::make_unique<dd::Package<Config>>()
dd::vEdge rootEdge = {}

Public Static Functions

static inline std::string toBinaryString(const std::size_t value, const std::size_t numberOfQubits)
static dd::vEdge removeNodes(std::unique_ptr<dd::Package<Config>> &localDD, dd::vEdge edge, std::map<dd::vNode*, dd::vEdge> &dagEdges)

Protected Attributes

std::mt19937_64 mt
std::uint64_t seed = 0
bool hasFixedSeed
dd::fp epsilon = 0.001

Protected Static Functions

static void nextPath(std::string &s)