The base `observe` launcher.
| 64 | |
| 65 | // The base `observe` launcher. |
| 66 | static async_observe_result pyObserveAsync(const std::string &shortName, |
| 67 | mlir::ModuleOp mod, |
| 68 | const spin_op &spin_operator, |
| 69 | std::size_t qpu_id, int shots, |
| 70 | nanobind::args args) { |
| 71 | auto &platform = get_platform(); |
| 72 | args = simplifiedValidateInputArguments(args); |
| 73 | auto fnOp = getKernelFuncOp(mod, shortName); |
| 74 | auto opaques = marshal_arguments_for_module_launch(mod, args, fnOp); |
| 75 | |
| 76 | // Launch the asynchronous execution. |
| 77 | nanobind::gil_scoped_release release; |
| 78 | auto clonedMod = std::shared_ptr<mlir::ModuleOp>( |
| 79 | new mlir::ModuleOp(mod.clone()), [](mlir::ModuleOp *p) { |
| 80 | p->erase(); |
| 81 | delete p; |
| 82 | }); |
| 83 | return detail::runObservationAsync( |
| 84 | detail::make_copyable_function( |
| 85 | [opaques = std::move(opaques), shortName, clonedMod]() mutable { |
| 86 | if (cudaq::getEnvBool("CUDAQ_DUMP_JIT_IR", false)) |
| 87 | clonedMod->dump(); |
| 88 | [[maybe_unused]] auto result = |
| 89 | clean_launch_module(shortName, *clonedMod, opaques); |
| 90 | }), |
| 91 | spin_operator, platform, shots, shortName, qpu_id); |
| 92 | } |
| 93 | |
| 94 | static async_observe_result |
| 95 | observe_async_impl(const std::string &shortName, MlirModule module, |
no test coverage detected