Maestro 0.1.0
Unified interface for quantum circuit simulation
Loading...
Searching...
No Matches
SimulatorsEstimatorInterface.h
Go to the documentation of this file.
1
10#pragma once
11
12#ifndef __SIMULATORS_ESTIMATOR_INTERFACE_H_
13#define __SIMULATORS_ESTIMATOR_INTERFACE_H_
14
15#include "../Circuit/Circuit.h"
16#include "../Simulators/Simulator.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 const 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,
47 bool multithreading = false, bool dontRunCircuitStart = 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, bool multithreading) {
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 sim->AllocateQubits(nrQubits);
67 sim->Initialize();
68
69 executed = dcirc->ExecuteNonMeasurements(sim, state);
70
71 if (!specialOptimizationForStatevector && !specialOptimizationForMPS)
72 sim->SaveState();
73 }
74};
75
76} // namespace Estimators
77
78#endif // !__SIMULATORS_ESTIMATOR_INTERFACE_H_
Circuit class for holding the sequence of operations.
Definition Circuit.h:45
The state class that stores the classical state of a quantum circuit execution.
Definition Operations.h:62
void AllocateBits(size_t numBits)
Allocate more bits.
Definition Operations.h:159
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, bool multithreading)
virtual bool IsInitialized() const =0
virtual std::shared_ptr< Simulators::ISimulator > ChooseBestSimulator(const std::vector< std::pair< Simulators::SimulatorType, Simulators::SimulationType > > &simulatorTypes, const 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, bool dontRunCircuitStart=false) const =0
SimulationType
The type of simulation.
Definition State.h:79
@ kStatevector
statevector simulation type
@ kMatrixProductState
matrix product state simulation type
SimulatorType
The type of simulator.
Definition State.h:63