16#define _CRT_SECURE_NO_WARNINGS 1
23#pragma warning(disable : 4789)
24#include "simulators/statevector/qv_avx2.cpp"
32#define INCLUDED_BY_FACTORY
43std::shared_ptr<GpuLibrary> SimulatorsFactory::gpuLibrary =
nullptr;
44std::atomic_bool SimulatorsFactory::firstTime =
true;
48 gpuLibrary = std::make_shared<GpuLibrary>();
49 if (!firstTime.exchange(
false)) gpuLibrary->SetMute(
true);
51 if (gpuLibrary->Init(
"libcomposer_gpu_simulators.so"))
60bool SimulatorsFactory::InitGpuLibraryWithMute() {
62 gpuLibrary = std::make_shared<GpuLibrary>();
64 gpuLibrary->SetMute(
true);
66 if (gpuLibrary->Init(
"libcomposer_gpu_simulators.so"))
81 auto sim = std::make_shared<Private::QCSimSimulator>();
83 sim->Configure(
"method",
"matrix_product_state");
85 sim->Configure(
"method",
"stabilizer");
87 sim->Configure(
"method",
"tensor_network");
89 sim->Configure(
"method",
"pauli_propagator");
95 auto sim = std::make_shared<Private::AerSimulator>();
97 sim->Configure(
"method",
"matrix_product_state");
99 sim->Configure(
"method",
"stabilizer");
101 sim->Configure(
"method",
"tensor_network");
103 sim->Configure(
"method",
"extended_stabilizer");
105 sim->Configure(
"method",
"statevector");
110 return std::make_shared<Private::CompositeSimulator>(
114 return std::make_shared<Private::CompositeSimulator>(
118 if (gpuLibrary && gpuLibrary->IsValid() &&
123 auto sim = std::make_shared<Private::GpuSimulator>();
125 sim->Configure(
"method",
"matrix_product_state");
127 sim->Configure(
"method",
"tensor_network");
129 sim->Configure(
"method",
"pauli_propagator");
140 throw std::invalid_argument(
"Simulator Type not supported");
149 auto sim = std::make_unique<Private::QCSimSimulator>();
151 sim->Configure(
"method",
"matrix_product_state");
153 sim->Configure(
"method",
"stabilizer");
155 sim->Configure(
"method",
"tensor_network");
157 sim->Configure(
"method",
"pauli_propagator");
163 auto sim = std::make_unique<Private::AerSimulator>();
165 sim->Configure(
"method",
"matrix_product_state");
167 sim->Configure(
"method",
"stabilizer");
169 sim->Configure(
"method",
"tensor_network");
171 sim->Configure(
"method",
"extended_stabilizer");
173 sim->Configure(
"method",
"statevector");
178 return std::make_unique<Private::CompositeSimulator>(
182 return std::make_unique<Private::CompositeSimulator>(
186 if (gpuLibrary && gpuLibrary->IsValid() &&
191 auto sim = std::make_unique<Private::GpuSimulator>();
193 sim->Configure(
"method",
"matrix_product_state");
195 sim->Configure(
"method",
"tensor_network");
197 sim->Configure(
"method",
"pauli_propagator");
208 throw std::invalid_argument(
"Simulator Type not supported");
static std::shared_ptr< ISimulator > CreateSimulator(SimulatorType t=SimulatorType::kQCSim, SimulationType method=SimulationType::kMatrixProductState)
Create a quantum computing simulator.
static std::unique_ptr< ISimulator > CreateSimulatorUnique(SimulatorType t=SimulatorType::kQCSim, SimulationType method=SimulationType::kMatrixProductState)
Create a quantum computing simulator.
static bool InitGpuLibrary()
SimulationType
The type of simulation.
@ kExtendedStabilizer
Extended stabilizer simulation type.
@ kStatevector
statevector simulation type
@ kMatrixProductState
matrix product state simulation type
@ kStabilizer
Clifford gates simulation type.
@ kPauliPropagator
Pauli propagator simulation type.
@ kTensorNetwork
Tensor network simulation type.
SimulatorType
The type of simulator.
@ kCompositeQCSim
composite qcsim simulator type
@ kQCSim
qcsim simulator type
@ kQiskitAer
qiskit aer simulator type
@ kCompositeQiskitAer
composite qiskit aer simulator type
@ kGpuSim
gpu simulator type