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.

Parameters:

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

Returns:

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 virtual std::map<std::string, std::size_t> measureAllNonCollapsing(std::size_t shots)#
inline char measureOneCollapsing(const dd::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)#
inline dd::CVec 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

Parameters:

edge – root edge to the decision diagram

Returns:

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

Parameters:
  • 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

Returns:

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)#
std::string exportDDtoGraphvizString(bool colored = true, bool edgeLabels = false, bool classic = false, bool memory = false, bool formatAsPolar = true)#

Get a GraphViz representation of the currently stored DD.

Parameters:
  • colored – Whether to output color-coded edge weights or black and white.

  • edgeLabels – Whether to output edge labels.

  • classic – Whether to use the classic visualization or a more modern representation.

  • memory – An alternative representation for nodes that includes detailed memory information.

  • formatAsPolar – Whether to format the complex numbers as polar or cartesian coordinates.

Returns:

A Graphviz program representing the current DD

void exportDDtoGraphvizFile(const std::string &filename, bool colored = true, bool edgeLabels = false, bool classic = false, bool memory = false, bool formatAsPolar = true)#

Write a GraphViz representation of the currently stored DD to a file.

Parameters:
  • filename – The name of the file to write to.

  • colored – Whether to output color-coded edge weights or black and white.

  • edgeLabels – Whether to output edge labels.

  • classic – Whether to use the classic visualization or a more modern representation.

  • memory – An alternative representation for nodes that includes detailed memory information.

  • formatAsPolar – Whether to format the complex numbers as polar or cartesian coordinates.

Public Members

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

Public Static Functions

static dd::vEdge removeNodes(std::unique_ptr<dd::Package<Config>> &localDD, dd::vEdge edge, std::map<dd::vNode*, dd::vEdge> &dagEdges)#

Protected Functions

virtual void exportDDtoGraphviz(std::ostream &os, bool colored, bool edgeLabels, bool classic, bool memory, bool formatAsPolar)#

Protected Attributes

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