Maestro 0.2.11
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
SimulatorsEstimatorInterface.h
Go to the documentation of this file.
1
9
10#pragma once
11
12#ifndef __SIMULATORS_ESTIMATOR_INTERFACE_H_
13#define __SIMULATORS_ESTIMATOR_INTERFACE_H_
14
15#include "../Circuit/Circuit.h"
17
18namespace Estimators {
19
31template <typename Time = Types::time_type>
33 public:
34 virtual ~SimulatorsEstimatorInterface() = default;
35
36 virtual bool IsInitialized() const = 0;
37
38 virtual std::shared_ptr<Simulators::ISimulator> ChooseBestSimulator(
39 const std::vector<std::pair<Simulators::SimulatorType,
40 Simulators::SimulationType>> &simulatorTypes,
41 std::shared_ptr<Circuits::Circuit<Time>> &dcirc, size_t &counts,
42 size_t nrQubits, size_t nrCbits, size_t nrResultCbits,
44 std::vector<bool> &executed, const std::string &maxBondDim,
45 const std::string &singularValueThreshold, const std::string &mpsSample,
46 size_t maxSimulators, const std::vector<std::string> *paulis, bool multithreading = false) const = 0;
47
49 const std::shared_ptr<Circuits::Circuit<Time>> &dcirc, size_t nrQubits,
50 size_t nrCbits, size_t nrResultCbits,
51 const std::shared_ptr<Simulators::ISimulator> &sim,
52 std::vector<bool> &executed) {
54 state.AllocateBits(nrCbits);
55
56 const bool hasMeasurementsOnlyAtEnd = !dcirc->HasOpsAfterMeasurements();
57 const bool specialOptimizationForStatevector =
58 sim->GetSimulationType() == Simulators::SimulationType::kStatevector &&
59 hasMeasurementsOnlyAtEnd;
60 const bool specialOptimizationForMPS =
61 sim->GetSimulationType() ==
63 hasMeasurementsOnlyAtEnd;
64
65 executed = dcirc->ExecuteNonMeasurements(sim, state);
66
67 if (!specialOptimizationForStatevector && !specialOptimizationForMPS)
68 sim->SaveState();
69 }
70};
71
72} // namespace Estimators
73
74#endif // !__SIMULATORS_ESTIMATOR_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:46
The state class that stores the classical state of a quantum circuit execution.
Definition Operations.h:63
void AllocateBits(size_t numBits)
Allocate more bits.
Definition Operations.h:160
static void ExecuteUpToMeasurements(const std::shared_ptr< Circuits::Circuit< Time > > &dcirc, size_t nrQubits, size_t nrCbits, size_t nrResultCbits, const std::shared_ptr< Simulators::ISimulator > &sim, std::vector< bool > &executed)
virtual std::shared_ptr< Simulators::ISimulator > ChooseBestSimulator(const std::vector< std::pair< Simulators::SimulatorType, Simulators::SimulationType > > &simulatorTypes, std::shared_ptr< Circuits::Circuit< Time > > &dcirc, size_t &counts, size_t nrQubits, size_t nrCbits, size_t nrResultCbits, Simulators::SimulatorType &simType, Simulators::SimulationType &method, std::vector< bool > &executed, const std::string &maxBondDim, const std::string &singularValueThreshold, const std::string &mpsSample, size_t maxSimulators, const std::vector< std::string > *paulis, bool multithreading=false) const =0
virtual bool IsInitialized() const =0
SimulationType
The type of simulation.
Definition State.h:85
@ kStatevector
statevector simulation type
Definition State.h:86
@ kMatrixProductState
matrix product state simulation type
Definition State.h:87
SimulatorType
The type of simulator.
Definition State.h:68