Maestro 0.3.1
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 long long int maxBondDim,
45 const double singularValueThreshold, const std::string &truncationMode,
46 const std::string &mpsSample,
47 size_t maxSimulators, const std::vector<std::string> *paulis, bool multithreading = false) const = 0;
48
50 const std::shared_ptr<Circuits::Circuit<Time>> &dcirc, size_t nrQubits,
51 size_t nrCbits, size_t nrResultCbits,
52 const std::shared_ptr<Simulators::ISimulator> &sim,
53 std::vector<bool> &executed, size_t *curMaxBondDim = nullptr) {
55 state.AllocateBits(nrCbits);
56
57 const bool hasMeasurementsOnlyAtEnd = !dcirc->HasOpsAfterMeasurements();
58 const bool specialOptimizationForStatevector =
59 sim->GetSimulationType() == Simulators::SimulationType::kStatevector &&
60 hasMeasurementsOnlyAtEnd;
61 const bool specialOptimizationForMPS =
62 sim->GetSimulationType() ==
64 hasMeasurementsOnlyAtEnd;
65
66 executed = dcirc->ExecuteNonMeasurements(sim, state, curMaxBondDim);
67
68 if (!specialOptimizationForStatevector && !specialOptimizationForMPS)
69 sim->SaveState();
70 }
71};
72
73} // namespace Estimators
74
75#endif // !__SIMULATORS_ESTIMATOR_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:48
The state class that stores the classical state of a quantum circuit execution.
Definition Operations.h:65
void AllocateBits(size_t numBits)
Allocate more bits.
Definition Operations.h:162
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, size_t *curMaxBondDim=nullptr)
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 long long int maxBondDim, const double singularValueThreshold, const std::string &truncationMode, 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:98
@ kStatevector
statevector simulation type
Definition State.h:99
@ kMatrixProductState
matrix product state simulation type
Definition State.h:100
SimulatorType
The type of simulator.
Definition State.h:72