File HybridSchrodingerFeynmanSimulator.hpp

class HybridSchrodingerFeynmanSimulator : public CircuitSimulator

Public Types

enum class Mode : std::uint8_t

Values:

enumerator DD
enumerator Amplitude

Public Functions

inline HybridSchrodingerFeynmanSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const ApproximationInfo &approxInfo_, Mode mode_ = Mode::Amplitude, const std::size_t nthreads_ = 2)
inline explicit HybridSchrodingerFeynmanSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, Mode mode_ = Mode::Amplitude, const std::size_t nthreads_ = 2)
inline HybridSchrodingerFeynmanSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const ApproximationInfo &approxInfo_, const std::uint64_t seed_, Mode mode_ = Mode::Amplitude, const std::size_t nthreads_ = 2)
virtual std::map<std::string, std::size_t> simulate(std::size_t shots) override

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 dd::CVec getVectorFromHybridSimulation() const
std::size_t getNDecisions(qc::Qubit splitQubit)
inline Mode getMode() const

Public Members

Mode mode = Mode::Amplitude

Private Functions

void simulateHybridTaskflow(qc::Qubit splitQubit)
void simulateHybridAmplitudes(qc::Qubit splitQubit)
dd::VectorDD simulateSlicing(std::unique_ptr<dd::Package> &sliceDD, qc::Qubit splitQubit, std::size_t controls)

Private Members

std::size_t nthreads = 2
dd::CVec finalAmplitudes
class Slice

Public Functions

inline explicit Slice(std::unique_ptr<dd::Package> &dd, const qc::Qubit start_, const qc::Qubit end_, const std::size_t controls_)
inline explicit Slice(std::unique_ptr<dd::Package> &dd, dd::VectorDD edge_, const qc::Qubit start_, const qc::Qubit end_, const std::size_t controls_)
bool apply(std::unique_ptr<dd::Package> &sliceDD, const std::unique_ptr<qc::Operation> &op)

Public Members

qc::Qubit start
qc::Qubit end
std::size_t controls
qc::Qubit nqubits
std::size_t nDecisionsExecuted = 0
dd::VectorDD edge = {}

Protected Functions

inline std::size_t getNextControl()

Protected Attributes

qc::Qubit nextControlIdx = 0