Program Listing for File noisesimulator.hpp¶
↰ Return to documentation for file (/home/docs/checkouts/readthedocs.org/user_builds/qulacs-rtd/checkouts/v0.6.7/src/cppsim/noisesimulator.hpp
)
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "circuit.hpp"
#include "gate_factory.hpp"
#include "gate_merge.hpp"
#include "state.hpp"
class DllExport NoiseSimulator {
private:
Random random;
QuantumCircuit* circuit;
QuantumStateBase* initial_state;
struct SamplingRequest {
std::vector<UINT> gate_pos;
UINT num_of_sampling;
SamplingRequest(
std::vector<UINT> init_gate_pos, UINT init_num_of_sampling)
: gate_pos(init_gate_pos), num_of_sampling(init_num_of_sampling) {}
};
void apply_gates(const std::vector<UINT>& chosen_gate,
QuantumState* sampling_state, const int StartPos);
std::vector<SamplingRequest> generate_sampling_request(
const UINT sample_count);
UINT randomly_select_which_gate_pos_to_apply(QuantumGateBase* gate);
std::vector<std::pair<QuantumState*, UINT>> simulate(
std::vector<SamplingRequest> sampling_request_vector);
public:
struct Result {
public:
std::vector<std::pair<QuantumState*, UINT>> result;
Result(const std::vector<std::pair<QuantumState*, UINT>>& result_);
~Result();
std::vector<ITYPE> sampling() const;
};
explicit NoiseSimulator(const QuantumCircuit* init_circuit,
const QuantumState* init_state = NULL);
virtual ~NoiseSimulator();
virtual std::vector<ITYPE> execute(const UINT sample_count);
virtual Result* execute_and_get_result(const UINT execution_count);
};