1#ifndef WILSON_RUNNING_VALIDATION_H
2#define WILSON_RUNNING_VALIDATION_H
9#include <unordered_map>
19 std::ostringstream os;
20 os <<
"group=" << group_name
28 std::function<std::unordered_map<WCoefId, scalar_t>(
29 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>&,
32 const std::string& group_name,
35 const auto it = funcs.find(order);
36 if (it == funcs.end() || !it->second) {
37 throw std::invalid_argument(
38 "Missing Wilson running function for " +
context(group_name, basis, order));
43 const std::unordered_map<
QCDOrder, std::unordered_map<WCoefId, scalar_t>>& matching,
44 const std::vector<WCoefId>& members,
46 const std::string& group_name,
49 const auto it = matching.find(order);
50 if (it == matching.end()) {
51 throw std::invalid_argument(
52 "Missing Wilson matching input order for " +
context(group_name, basis, order));
55 for (
const auto& coef_id : members) {
56 if (!it->second.contains(coef_id)) {
57 throw std::invalid_argument(
58 "Missing Wilson matching input coefficient '" + coef_id.str() +
59 "' for " +
context(group_name, basis, order));
65 const std::unordered_map<WCoefId, scalar_t>& result,
66 const std::vector<WCoefId>& members,
68 const std::string& group_name,
71 for (
const auto& [coef_id, _] : result) {
72 if (std::find(members.begin(), members.end(), coef_id) == members.end()) {
73 throw std::invalid_argument(
74 "Wilson running function returned coefficient '" + coef_id.str() +
75 "' outside the group member list for " +
context(group_name, basis, order));
Domain objects representing Wilson coefficients and their matching metadata.
Lightweight view over a set of source blocks.
static std::string str(const IdOf< WilsonBasisTag > &id)
Returns the string representation associated with an identifier.
std::string context(const std::string &group_name, WilsonBasis basis, QCDOrder order)
void require_matching_input_complete(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &matching, const std::vector< WCoefId > &members, QCDOrder order, const std::string &group_name, WilsonBasis basis)
void require_running_function(const std::map< QCDOrder, std::function< std::unordered_map< WCoefId, scalar_t >(const std::unordered_map< QCDOrder, std::unordered_map< WCoefId, scalar_t > > &, const BlockSrc &)> > &funcs, QCDOrder order, const std::string &group_name, WilsonBasis basis)
void require_running_result_known_members(const std::unordered_map< WCoefId, scalar_t > &result, const std::vector< WCoefId > &members, QCDOrder order, const std::string &group_name, WilsonBasis basis)