File NoiseFunctionality.hpp

Stochastic and deterministic noise functionality.

Self-contained copy of the MQT Core dd::NoiseFunctionality that was removed alongside the density-matrix support. The stochastic noise operation cache is now owned by StochasticNoiseFunctionality (instead of the DD package), and the removed noise qc::OpTypes (ATrue/AFalse/MultiATrue/MultiAFalse) are replaced by a local enumeration used only for cache keys and noise-operation selection.

namespace dd
namespace ddsim

Typedefs

using NrEdges = std::tuple_size<decltype(dNode::e)>
using ArrayOfEdges = std::array<dCachedEdge, NrEdges::value>

Enums

enum NoiseOperations

Values:

enumerator AmplitudeDamping
enumerator PhaseFlip
enumerator Depolarization
enumerator Identity

Functions

void sanityCheckOfNoiseProbabilities(double noiseProbability, double amplitudeDampingProb, double multiQubitGateFactor)
class DeterministicNoiseFunctionality

Public Functions

DeterministicNoiseFunctionality(DensityDDPackage &dd, std::size_t nq, double noiseProbabilitySingleQubit, double noiseProbabilityMultiQubit, double ampDampProbSingleQubit, double ampDampProbMultiQubit, const std::string &cNoiseEffects)
void applyNoiseEffects(dEdge &originalEdge, const std::unique_ptr<qc::Operation> &qcOperation)

Protected Functions

inline std::size_t getNumberOfQubits() const

Protected Attributes

DensityDDPackage *package
std::size_t nQubits
double noiseProbSingleQubit
double noiseProbMultiQubit
double ampDampingProbSingleQubit
double ampDampingProbMultiQubit
std::vector<NoiseOperations> noiseEffects

Private Functions

dCachedEdge applyNoiseEffects(dEdge &originalEdge, const std::set<qc::Qubit> &usedQubits, bool firstPathEdge, dd::Qubit level)
void applyAmplitudeDampingToEdges(ArrayOfEdges &e, double probability) const
void applyDepolarisationToEdges(ArrayOfEdges &e, double probability) const

Private Static Functions

static void applyPhaseFlipToEdges(ArrayOfEdges &e, double probability)
class StochasticNoiseFunctionality

Public Functions

StochasticNoiseFunctionality(dd::Package &dd, std::size_t nq, double gateNoiseProbability, double amplitudeDampingProb, double multiQubitGateFactor, const std::string &cNoiseEffects)
inline ~StochasticNoiseFunctionality()
void applyNoiseOperation(const std::set<qc::Qubit> &targets, dd::mEdge operation, dd::vEdge &state, std::mt19937_64 &generator)

Protected Types

enum StochasticNoiseKind

Local identifiers for cached stochastic noise operations, replacing the removed noise qc::OpTypes.

Values:

enumerator StochX
enumerator StochY
enumerator StochZ
enumerator StochATrue
enumerator StochAFalse
enumerator StochMultiATrue
enumerator StochMultiAFalse
enumerator StochIdentity
enumerator StochasticNoiseKindEnd

Protected Functions

inline std::size_t getNumberOfQubits() const
double getNoiseProbability(bool multiQubitNoiseFlag) const
dd::GateMatrix getAmplitudeDampingOperationMatrix(bool multiQubitNoiseFlag, bool amplitudeDampingFlag) const
dd::mEdge stackOperation(const dd::mEdge &operation, qc::Qubit target, StochasticNoiseKind noiseOperation, const dd::GateMatrix &matrix)
dd::mEdge generateNoiseOperation(dd::mEdge operation, qc::Qubit target, std::mt19937_64 &generator, bool amplitudeDamping, bool multiQubitOperation)
StochasticNoiseKind returnNoiseOperation(NoiseOperations noiseOperation, double prob, bool multiQubitNoiseFlag) const

Protected Attributes

dd::Package *package
std::size_t nQubits
std::uniform_real_distribution<dd::fp> dist
double noiseProbability
double noiseProbabilityMulti
dd::fp sqrtAmplitudeDampingProbability
dd::fp oneMinusSqrtAmplitudeDampingProbability
dd::fp sqrtAmplitudeDampingProbabilityMulti
dd::fp oneMinusSqrtAmplitudeDampingProbabilityMulti
dd::GateMatrix ampDampingTrue = {}
dd::GateMatrix ampDampingTrueMulti = {}
dd::GateMatrix ampDampingFalse = {}
dd::GateMatrix ampDampingFalseMulti = {}
std::vector<NoiseOperations> noiseEffects
dd::mEdge identityDD
StochasticNoiseOperationTable<dd::mEdge> stochasticNoiseOperationCache

Protected Static Functions

static StochasticNoiseKind getAmplitudeDampingOperationType(bool multiQubitNoiseFlag, bool amplitudeDampingFlag)