12#ifdef MAESTRO_ENABLE_COMPOSER
13#include <composer/Network/SimpleFullyConnectedNetwork.h>
33 const std::vector<Types::qubit_t> qubits{
static_cast<Types::qubit_t>(nrQubits)};
34 const std::vector<size_t> cbits{
static_cast<size_t>(nrCbits < 0 ? nrQubits : nrCbits)};
36#ifdef MAESTRO_ENABLE_COMPOSER
37 auto network = std::make_shared<Network::SimpleNetwork<>>(qubits, cbits);
39 auto network = std::make_shared<Network::SimpleDisconnectedNetwork<>>(qubits, cbits);
43 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
45 if (curHandle == std::numeric_limits<unsigned long int>::max())
50 const unsigned long int handle = ++curHandle;
52 simpleSimulators[handle] = network;
59 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
61 simpleSimulators.erase(simHandle);
66 std::lock_guard<std::mutex> lock(simpleSimulatorsMutex);
67 auto it = simpleSimulators.find(simHandle);
68 if (it != simpleSimulators.end())
80 sim->RemoveAllOptimizationSimulatorsAndAdd(simType, simExecType);
90 sim->AddOptimizationSimulator(simType, simExecType);
99 std::lock_guard<std::mutex> lock(simulatorsMutex);
100 if (curSimulatorHandle == std::numeric_limits<unsigned long int>::max())
103 curSimulatorHandle = 0;
105 const unsigned long int handle = ++curSimulatorHandle;
107 simulators[handle] = simulator;
114 std::lock_guard<std::mutex> lock(simulatorsMutex);
115 auto it = simulators.find(simHandle);
116 if (it != simulators.end())
117 return it->second.get();
124 std::lock_guard<std::mutex> lock(simulatorsMutex);
125 simulators.erase(simHandle);
130 std::mutex simpleSimulatorsMutex;
131 std::mutex simulatorsMutex;
133 std::unordered_map<unsigned long int, std::shared_ptr<Network::INetwork<>>> simpleSimulators;
134 std::unordered_map<unsigned long int, std::shared_ptr<Simulators::ISimulator>> simulators;
136 unsigned long int curHandle = 0;
137 unsigned long int curSimulatorHandle = 0;
int RemoveAllOptimizationSimulatorsAndAdd(unsigned long int simHandle, Simulators::SimulatorType simType, Simulators::SimulationType simExecType)
unsigned long int CreateSimulator(Simulators::SimulatorType simType=Simulators::SimulatorType::kQCSim, Simulators::SimulationType simExecType=Simulators::SimulationType::kMatrixProductState)
void DestroySimulator(unsigned long int simHandle)
unsigned long int CreateSimpleSimulator(int nrQubits, int nrCbits=-1)
int AddOptimizationSimulator(unsigned long int simHandle, Simulators::SimulatorType simType, Simulators::SimulationType simExecType)
void DestroySimpleSimulator(unsigned long int simHandle)
std::shared_ptr< Network::INetwork<> > GetSimpleSimulator(unsigned long int simHandle)
void * GetSimulator(unsigned long int simHandle)
static MAESTRO_FACTORY_EXPORT std::shared_ptr< ISimulator > CreateSimulator(SimulatorType t=SimulatorType::kQCSim, SimulationType method=SimulationType::kMatrixProductState)
Create a quantum computing simulator.
SimulationType
The type of simulation.
@ kMatrixProductState
matrix product state simulation type
SimulatorType
The type of simulator.
@ kQCSim
qcsim simulator type
uint_fast64_t qubit_t
The type of a qubit.