Skip to content

Commit f333e44

Browse files
authored
Merge pull request #10 from QoroQuantum/nanobind
Nanobind for Python interface to Maestro
2 parents eaee076 + 58a2271 commit f333e44

446 files changed

Lines changed: 4305 additions & 10453 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,8 @@ install(TARGETS maestroexe DESTINATION bin)
256256

257257
if(OpenMP_CXX_FOUND)
258258
message("Setting OpenMP")
259-
260-
if (QAER AND COMPILE_TESTS)
261-
target_link_libraries(tests PUBLIC OpenMP::OpenMP_CXX)
262-
target_link_libraries(tests PRIVATE ${OpenMP_CXX_FLAGS})
263-
target_compile_options(tests PRIVATE ${OpenMP_CXX_FLAGS})
264-
endif()
265-
259+
260+
266261
if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
267262
find_program(BREW_CMD brew)
268263
if(BREW_CMD)
@@ -271,40 +266,59 @@ if(OpenMP_CXX_FOUND)
271266
endif()
272267

273268
target_compile_options(maestro PUBLIC -Xpreprocessor -fopenmp)
269+
if (QAER AND COMPILE_TESTS)
270+
target_compile_options(tests PUBLIC -Xpreprocessor -fopenmp)
271+
endif()
274272

275273
if(LIBOMP_PREFIX)
276274
target_include_directories(maestro PUBLIC ${OpenMP_CXX_INCLUDE_DIRS} "${LIBOMP_PREFIX}/include")
277275
target_link_directories(maestro PUBLIC "${LIBOMP_PREFIX}/lib")
276+
if (QAER AND COMPILE_TESTS)
277+
target_include_directories(tests PUBLIC ${OpenMP_CXX_INCLUDE_DIRS} "${LIBOMP_PREFIX}/include")
278+
target_link_directories(tests PUBLIC "${LIBOMP_PREFIX}/lib")
279+
endif()
278280
else()
279281
target_include_directories(maestro PUBLIC ${OpenMP_CXX_INCLUDE_DIRS} "$ENV{OpenMP_ROOT}/include")
280282
target_link_directories(maestro PUBLIC "$ENV{OpenMP_ROOT}/lib")
283+
if (QAER AND COMPILE_TESTS)
284+
target_include_directories(tests PUBLIC ${OpenMP_CXX_INCLUDE_DIRS} "$ENV{OpenMP_ROOT}/include")
285+
target_link_directories(tests PUBLIC "$ENV{OpenMP_ROOT}/lib")
286+
endif()
281287
endif()
282288

283289
target_link_libraries(maestro PUBLIC ${OpenMP_CXX_LIBRARIES})
290+
if (QAER AND COMPILE_TESTS)
291+
target_link_libraries(tests PUBLIC ${OpenMP_CXX_LIBRARIES})
292+
endif()
284293
else()
285294
target_link_libraries(maestro PUBLIC OpenMP::OpenMP_CXX)
286295
target_link_libraries(maestro PRIVATE ${OpenMP_CXX_FLAGS})
287296
target_compile_options(maestro PRIVATE ${OpenMP_CXX_FLAGS})
297+
if (QAER AND COMPILE_TESTS)
298+
target_link_libraries(tests PUBLIC OpenMP::OpenMP_CXX)
299+
target_link_libraries(tests PRIVATE ${OpenMP_CXX_FLAGS})
300+
target_compile_options(tests PRIVATE ${OpenMP_CXX_FLAGS})
301+
endif()
288302
endif()
289303
endif()
290304

291305
IF(QAER AND BLAS_FOUND)
292306
message("Setting linking blas")
293-
307+
294308
if (QAER AND COMPILE_TESTS)
295309
target_link_libraries(tests PUBLIC ${BLAS_LIBRARIES})
296310
endif()
297-
311+
298312
target_link_libraries(maestro PUBLIC ${BLAS_LIBRARIES})
299313
ENDIF()
300314

301315
IF(SIMD_FLAGS)
302316
message("Setting SIMD flags")
303-
304-
if (QAER AND COMPILE_TESTS)
317+
318+
if (QAER AND COMPILE_TESTS)
305319
target_compile_options(tests PUBLIC ${SIMD_FLAGS})
306320
endif()
307-
321+
308322
target_compile_options(maestro PUBLIC ${SIMD_FLAGS})
309323
ENDIF()
310324

@@ -318,7 +332,7 @@ endif()
318332

319333
IF(Boost_FOUND)
320334
if (COMPILE_TESTS)
321-
target_link_libraries(tests PRIVATE Boost::serialization)
335+
target_link_libraries(tests PRIVATE Boost::serialization)
322336
endif()
323337
target_link_libraries(maestro PRIVATE Boost::serialization)
324338
target_link_libraries(maestroexe PRIVATE Boost::serialization)

Network/NetworkJob.h

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ class ExecuteJob {
7474
if (optimiseMultipleShots) {
7575
executedGates = dcirc->ExecuteNonMeasurements(optSim, state);
7676

77-
if (!specialOptimizationForStatevector && !specialOptimizationForMPS && curCnt > 1)
77+
if (!specialOptimizationForStatevector && !specialOptimizationForMPS &&
78+
curCnt > 1)
7879
optSim->SaveState();
7980
}
8081
}
@@ -188,27 +189,24 @@ class ExecuteJob {
188189
if (optimiseMultipleShots) {
189190
executedGates = dcirc->ExecuteNonMeasurements(optSim, state);
190191

191-
if (!specialOptimizationForStatevector && !specialOptimizationForMPS && curCnt > 1)
192+
if (!specialOptimizationForStatevector &&
193+
!specialOptimizationForMPS && curCnt > 1)
192194
optSim->SaveState();
193195
}
194-
}
195-
else if (executedGates.size() == dcirc->size())
196-
{
196+
} else if (executedGates.size() == dcirc->size()) {
197197
// special case for when the simulator is passed from the network
198198
// and no gates were executed yet
199199
bool needToExecuteGates = true;
200-
for (const bool val : executedGates)
201-
{
202-
if (val)
203-
{
200+
for (const bool val : executedGates) {
201+
if (val) {
204202
needToExecuteGates = false;
205203
break;
206204
}
207205
}
208-
if (needToExecuteGates && optimiseMultipleShots)
209-
{
206+
if (needToExecuteGates && optimiseMultipleShots) {
210207
executedGates = dcirc->ExecuteNonMeasurements(optSim, state);
211-
if (!specialOptimizationForStatevector && !specialOptimizationForMPS && curCnt > 1)
208+
if (!specialOptimizationForStatevector &&
209+
!specialOptimizationForMPS && curCnt > 1)
212210
optSim->SaveState();
213211
}
214212
}
@@ -233,7 +231,8 @@ class ExecuteJob {
233231
if (optimiseMultipleShots) {
234232
executedGates = dcirc->ExecuteNonMeasurements(optSim, state);
235233

236-
if (!specialOptimizationForStatevector && !specialOptimizationForMPS && curCnt > 1)
234+
if (!specialOptimizationForStatevector && !specialOptimizationForMPS &&
235+
curCnt > 1)
237236
optSim->SaveState();
238237
}
239238
}

Network/SimpleDisconnectedNetwork.h

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,7 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
364364
if (!controller || !circuit) return {};
365365

366366
distCirc = controller->DistributeCircuit(BaseClass::getptr(), circuit);
367-
if (!distCirc)
368-
return {};
367+
if (!distCirc) return {};
369368

370369
#ifdef _DEBUG
371370
for (auto q : distCirc->AffectedQubits()) {
@@ -423,7 +422,8 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
423422

424423
// do that only if the optimization for simulator is on and the estimator is
425424
// available, ortherwise an 'optimal' simulator won't be created
426-
if (optimizeSimulator && simulatorsEstimator && simulatorsEstimator->IsInitialized()) {
425+
if (optimizeSimulator && simulatorsEstimator &&
426+
simulatorsEstimator->IsInitialized()) {
427427
simulator->Clear();
428428
GetState().Clear();
429429
}
@@ -457,8 +457,9 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
457457
// created in the threads if optimization already exists, it will be
458458
// cloned in the threads, otherwise a new one will be created in the
459459
// threads
460-
if (!optimizeSimulator ||
461-
!simulatorsEstimator || !simulatorsEstimator->IsInitialized()) // otherwise it was already cleared
460+
if (!optimizeSimulator || !simulatorsEstimator ||
461+
!simulatorsEstimator
462+
->IsInitialized()) // otherwise it was already cleared
462463
{
463464
simulator->Clear();
464465
GetState().Clear();
@@ -514,7 +515,8 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
514515
// use the already created simulator
515516
optSim = simulator;
516517
job->optSim = optSim;
517-
job->executedGates.resize(distCirc->size(), false); // no gates executed yet
518+
job->executedGates.resize(distCirc->size(),
519+
false); // no gates executed yet
518520
simulator = nullptr;
519521
}
520522
}
@@ -1725,7 +1727,8 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
17251727
bool dontRunCircuitStart = false) const override {
17261728
if (!optimizeSimulator) return nullptr;
17271729

1728-
if ((!simulatorsEstimator || !simulatorsEstimator->IsInitialized()) && simulatorsForOptimizations.size() != 1)
1730+
if ((!simulatorsEstimator || !simulatorsEstimator->IsInitialized()) &&
1731+
simulatorsForOptimizations.size() != 1)
17291732
return nullptr;
17301733

17311734
// when multithreading is set to true it means it needs a multithreaded
@@ -1823,10 +1826,11 @@ class SimpleDisconnectedNetwork : public INetwork<Time> {
18231826
simulatorTypes.emplace_back(
18241827
Simulators::SimulatorType::kGpuSim,
18251828
Simulators::SimulationType::kMatrixProductState);
1826-
if (OptimizationSimulatorExists(Simulators::SimulatorType::kGpuSim,
1829+
if (OptimizationSimulatorExists(
1830+
Simulators::SimulatorType::kGpuSim,
18271831
Simulators::SimulationType::kTensorNetwork))
18281832
simulatorTypes.emplace_back(Simulators::SimulatorType::kGpuSim,
1829-
Simulators::SimulationType::kTensorNetwork);
1833+
Simulators::SimulationType::kTensorNetwork);
18301834
}
18311835
#endif
18321836

Simulators/Factory.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
#include "Factory.h"
3131

3232
#define INCLUDED_BY_FACTORY
33+
#ifndef NO_QISKIT_AER
3334
#include "AerSimulator.h"
35+
#endif
3436
#include "QCSimSimulator.h"
3537
#include "Composite.h"
3638
#include "GpuSimulator.h"
@@ -111,7 +113,8 @@ std::shared_ptr<ISimulator> SimulatorsFactory::CreateSimulator(
111113
case SimulatorType::kGpuSim:
112114
if (gpuLibrary && gpuLibrary->IsValid() &&
113115
(m == SimulationType::kStatevector ||
114-
m == SimulationType::kMatrixProductState || m == SimulationType::kTensorNetwork)) {
116+
m == SimulationType::kMatrixProductState ||
117+
m == SimulationType::kTensorNetwork)) {
115118
auto sim = std::make_shared<Private::GpuSimulator>();
116119
if (m == SimulationType::kMatrixProductState)
117120
sim->Configure("method", "matrix_product_state");
@@ -171,7 +174,8 @@ std::unique_ptr<ISimulator> SimulatorsFactory::CreateSimulatorUnique(
171174
case SimulatorType::kGpuSim:
172175
if (gpuLibrary && gpuLibrary->IsValid() &&
173176
(m == SimulationType::kStatevector ||
174-
m == SimulationType::kMatrixProductState || m == SimulationType::kTensorNetwork)) {
177+
m == SimulationType::kMatrixProductState ||
178+
m == SimulationType::kTensorNetwork)) {
175179
auto sim = std::make_unique<Private::GpuSimulator>();
176180
if (m == SimulationType::kMatrixProductState)
177181
sim->Configure("method", "matrix_product_state");

Simulators/GpuLibTNSim.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ class GpuLibTNSim {
127127
double *imaginary) const {
128128
if (obj)
129129
return lib->TNAmplitude(obj, numFixedValues, fixedValues, real,
130-
imaginary);
130+
imaginary);
131131

132132
return false;
133133
}
@@ -189,15 +189,15 @@ class GpuLibTNSim {
189189
}
190190

191191
std::unique_ptr<GpuLibTNSim> Clone() const {
192-
//if (obj) return std::make_unique<GpuLibTNSim>(lib, lib->TNClone(obj));
192+
// if (obj) return std::make_unique<GpuLibTNSim>(lib, lib->TNClone(obj));
193193

194194
return nullptr;
195195
}
196196

197197
double ExpectationValue(const std::string &pauliString) const {
198198
if (obj)
199199
return lib->TNExpectationValue(obj, pauliString.c_str(),
200-
pauliString.length());
200+
pauliString.length());
201201

202202
return 0.0;
203203
}
@@ -373,22 +373,21 @@ class GpuLibTNSim {
373373
double theta, double phi, double lambda, double gamma) {
374374
if (obj)
375375
return lib->TNApplyCU(obj, controlQubit, targetQubit, theta, phi, lambda,
376-
gamma);
376+
gamma);
377377

378378
return false;
379379
}
380380

381381
bool ApplyCCX(unsigned int controlQubit1, unsigned int controlQubit2,
382-
unsigned int targetQubit) {
382+
unsigned int targetQubit) {
383383
if (obj)
384384
return lib->TNApplyCCX(obj, controlQubit1, controlQubit2, targetQubit);
385385
return false;
386386
}
387387

388388
bool ApplyCSwap(unsigned int controlQubit, unsigned int qubit1,
389389
unsigned int qubit2) {
390-
if (obj)
391-
return lib->TNApplyCSwap(obj, controlQubit, qubit1, qubit2);
390+
if (obj) return lib->TNApplyCSwap(obj, controlQubit, qubit1, qubit2);
392391
return false;
393392
}
394393

0 commit comments

Comments
 (0)