Quantum Resource Manager and Compiler Infrastructure (QRM&CI) 0.1.0
Runners.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 MQSS Maintainers
3 * All rights reserved.
4 *
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 */
7
13
14#pragma once
15
19#include "qrmci/Error.h"
20
21#include <MQSSCIInterfaces/MQSSCompiler.h>
22#include <atomic>
23#include <chrono>
24#include <expected>
25#include <mqss/submitter/Job.h>
26#include <optional>
27#include <string>
28#include <vector>
29
30namespace mqss::submitter {
31class Device;
32} // namespace mqss::submitter
33
34namespace mqss::qrmci {
35
47[[nodiscard]] std::expected<std::string, Error> chooseBackend(
48 const mqss::QuantumTask &task, const BackendRegistry &availableBackends,
50
57[[nodiscard]] std::expected<void, Error>
58compileQuantumTask(mqss::QuantumTask &task, const BackendWrapper &backendInfo,
59 mqss::mqssci::MQSSCompiler &compiler);
60
71[[nodiscard]] std::expected<void, Error>
72compileQuantumTask(mqss::QuantumTask &task, const BackendWrapper &backendInfo);
73
92[[nodiscard]] std::expected<mqss::QuantumResult, Error> buildQuantumResult(
93 const mqss::QuantumTask &task,
94 const std::vector<std::optional<mqss::submitter::Counts>> &histogram);
95
115[[nodiscard]] std::expected<std::vector<mqss::submitter::Job>, Error>
116submitQuantumTask(const mqss::QuantumTask &task,
117 const mqss::submitter::Device &device);
118
132[[nodiscard]] std::expected<std::vector<mqss::submitter::Job>, Error>
133submitQuantumTask(const mqss::QuantumTask &task,
134 const mqss::submitter::Device &device,
135 const std::atomic<bool> &terminationFlag);
136
153[[nodiscard]] std::expected<mqss::QuantumResult, Error>
154collectQuantumResult(const mqss::QuantumTask &task,
155 std::vector<mqss::submitter::Job> &jobs,
156 std::chrono::seconds waitTimeout);
157
174[[nodiscard]] std::expected<mqss::QuantumResult, Error> collectQuantumResult(
175 const mqss::QuantumTask &task, std::vector<mqss::submitter::Job> &jobs,
176 std::chrono::seconds waitTimeout, const std::atomic<bool> &terminationFlag);
177
192[[nodiscard]] std::expected<mqss::QuantumResult, Error>
193executeQuantumTask(const mqss::QuantumTask &task,
194 const mqss::submitter::Device &device,
195 std::chrono::seconds waitTimeout);
196
207[[nodiscard]] std::expected<mqss::QuantumResult, Error> executeQuantumTask(
208 const mqss::QuantumTask &task, const mqss::submitter::Device &device,
209 std::chrono::seconds waitTimeout, const std::atomic<bool> &terminationFlag);
210
216[[nodiscard]] mqss::QuantumResult
217cancelQuantumTask(const mqss::QuantumTask &task,
218 const std::string &cancelReason);
219
220} // namespace mqss::qrmci
The set of backends a QRM&CI process may schedule onto, and the time-to-live after which an entry nob...
BackendSelectionPolicy
Named rule deciding which backend wins when several of them could run the same task.
@ LowestName
The compatible backend whose name sorts first.
One backend's capabilities as the QRM&CI pipeline sees them, read either from a live device or from a...
Pure translations between the submitter, mqss protocol and mqss-ci enumerations: status,...
The error type every std::expected in QRM&CI's public interfaces carries.
std::expected< void, Error > compileQuantumTask(mqss::QuantumTask &task, const BackendWrapper &backendInfo, mqss::mqssci::MQSSCompiler &compiler)
Compile the quantum task using compiler.
std::expected< mqss::QuantumResult, Error > buildQuantumResult(const mqss::QuantumTask &task, const std::vector< std::optional< mqss::submitter::Counts > > &histogram)
Build a QuantumResult from a task and its job-result histogram, the shared tail end of submitQuantumT...
std::expected< std::string, Error > chooseBackend(const mqss::QuantumTask &task, const BackendRegistry &availableBackends, BackendSelectionPolicy policy=BackendSelectionPolicy::LowestName)
Choose the backend that should execute a quantum task.
std::expected< std::vector< mqss::submitter::Job >, Error > submitQuantumTask(const mqss::QuantumTask &task, const mqss::submitter::Device &device)
Submit the quantum task's circuits to the device without waiting for their results.
std::expected< mqss::QuantumResult, Error > collectQuantumResult(const mqss::QuantumTask &task, std::vector< mqss::submitter::Job > &jobs, std::chrono::seconds waitTimeout)
Collect the results of previously submitted quantum jobs.
std::expected< mqss::QuantumResult, Error > executeQuantumTask(const mqss::QuantumTask &task, const mqss::submitter::Device &device, std::chrono::seconds waitTimeout)
Execute the quantum task on the device: submits it and collects its result in one call.
mqss::QuantumResult cancelQuantumTask(const mqss::QuantumTask &task, const std::string &cancelReason)
Cancel the quantum task and return a cancellation result.
Owns the backends a process knows about, keyed by backend name.
A snapshot of one backend's capabilities: name, qubit count, status, supported instructions,...
A failure reported by a QRM&CI operation: a kind the caller can act on, plus a human-readable detail ...
Definition Error.h:29