40 const std::vector<std::pair<Simulators::SimulatorType, Simulators::SimulationType>> &simulatorTypes, std::shared_ptr<
Circuits::Circuit<Time>> &dcirc,
42 std::vector<bool> &executed,
const long long int maxBondDim,
const double singularValueThreshold,
const std::string &truncationMode,
43 const std::string &mpsSample,
size_t maxSimulators,
const std::vector<std::string> *paulis,
bool multithreading =
false)
const = 0;
46 const std::shared_ptr<Simulators::ISimulator> &sim, std::vector<bool> &executed,
size_t *curMaxBondDim =
nullptr)
51 const bool hasMeasurementsOnlyAtEnd = !dcirc->HasOpsAfterMeasurements();
53 executed = dcirc->ExecuteNonMeasurements(sim, state, curMaxBondDim);
55 if (!hasMeasurementsOnlyAtEnd)
61 auto suffixMask = executed;
62 if (suffixMask.empty())
63 sim->SetUpcomingGates({});
65 sim->SetUpcomingGates(dcirc->RemoveExecutedOperations(suffixMask)->GetOperations());
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