File CircuitSimulator.hpp

struct ApproximationInfo

Public Types

enum ApproximationStrategy

Values:

enumerator FidelityDriven
enumerator MemoryDriven

Public Functions

ApproximationInfo() = default
inline ApproximationInfo(const double stepFidelity_, const std::size_t stepNumber_, const ApproximationStrategy strategy_)

Public Members

double stepFidelity = 1.
std::size_t stepNumber = 1
ApproximationStrategy strategy = FidelityDriven

Public Static Functions

static inline ApproximationStrategy fromString(const std::string &str)

Friends

inline friend std::istream &operator>>(std::istream &in, ApproximationStrategy &strategy_)
class CircuitSimulator : public Simulator

Subclassed by DeterministicNoiseSimulator, HybridSchrodingerFeynmanSimulator, PathSimulator, StochasticNoiseSimulator, UnitarySimulator

Public Functions

inline explicit CircuitSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const dd::DDPackageConfig &config = dd::DDPackageConfig())
inline CircuitSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const std::uint64_t seed_, const dd::DDPackageConfig &config = dd::DDPackageConfig())
inline CircuitSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const ApproximationInfo &approximationInfo_, const dd::DDPackageConfig &config = dd::DDPackageConfig())
inline CircuitSimulator(std::unique_ptr<qc::QuantumComputation> &&qc_, const ApproximationInfo &approximationInfo_, const std::uint64_t seed_, const dd::DDPackageConfig &config = dd::DDPackageConfig())
inline virtual std::map<std::string, std::size_t> measureAllNonCollapsing(std::size_t shots) override
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

virtual dd::fp expectationValue(const qc::QuantumComputation &observable)
inline virtual std::map<std::string, std::string> additionalStatistics() override
inline virtual std::size_t getNumberOfQubits() const override
inline virtual std::size_t getNumberOfOps() const override
inline virtual std::string getName() const override

Protected Functions

CircuitAnalysis analyseCircuit()
virtual std::map<std::size_t, bool> singleShot(bool ignoreNonUnitaries)
virtual void initializeSimulation(std::size_t nQubits)
virtual char measure(dd::Qubit i)
virtual void reset(qc::NonUnitaryOperation *nonUnitaryOp)
virtual void applyOperationToState(std::unique_ptr<qc::Operation> &op)

Protected Attributes

std::unique_ptr<qc::QuantumComputation> qc
std::size_t singleShots = {0}
ApproximationInfo approximationInfo
std::size_t approximationRuns = {0}
long double finalFidelity = {1.0L}
struct CircuitAnalysis

Public Members

bool isDynamic = false
bool hasMeasurements = false
std::map<qc::Qubit, size_t> measurementMap