32 std::string ColumnarMemoryTest ::
35 static std::atomic<unsigned>
index = 0;
36 return "UniqueMemoryTestTool" + std::to_string(++
index);
41 bool ColumnarMemoryTest ::
44 return std::is_same_v<ColumnarModeDefault,ColumnarModeArray>;
51 ColumnarTestToolHandle ::
56 throw std::runtime_error (
"tool does not implement IColumnarTool");
62 void ColumnarTestToolHandle ::
63 renameContainers (
const std::vector<std::pair<std::string,std::string>>& renames)
75 void ColumnarTestToolHandle ::
84 void ColumnarTestToolHandle ::
85 applySystematicVariation (
const std::string& sysName)
92 throw std::runtime_error (
"failed to apply systematic variation");
97 [[nodiscard]] std::vector<ColumnInfo> ColumnarTestToolHandle ::
98 getColumnInfo ()
const
101 throw std::runtime_error (
"tool not initialized");
102 return m_tool->getColumnInfo ();
107 std::vector<std::string> ColumnarTestToolHandle ::
108 getColumnNames ()
const
111 throw std::runtime_error (
"tool not initialized");
117 std::vector<std::string> ColumnarTestToolHandle ::
118 getRecommendedSystematics ()
const
122 std::vector<std::string>
result;
124 result.push_back (sys.name());
134 throw std::runtime_error (
"tool not initialized");
141 getToolWrapper ()
const
144 throw std::runtime_error (
"tool not initialized");
164 auto& userColumn = m_userColumns[column.name];
165 if (userColumn.info.has_value())
166 throw std::runtime_error (
"column already exists: " + column.name);
167 userColumn.info = column;
173 void ColumnMapType ::
174 addColumn (
const std::string& name, std::vector<std::any>
data)
177 if (userColumn.input.has_value())
178 throw std::runtime_error (
"column added twice: " + name);
180 userColumn.input = std::move (manualData);
185 void ColumnMapType ::
186 setExpectation (
const std::string& name, std::vector<std::any> values)
189 if (userColumn.expectation.has_value())
190 throw std::runtime_error (
"column added twice: " + name);
192 userColumn.expectation = std::move (manualData);
197 std::size_t ColumnMapType ::
198 columnSize (
const std::string& name)
201 if (iter ==
m_userColumns.end() || !iter->second.input.has_value())
202 throw std::runtime_error (
"column not found: " + name);
203 return iter->second.input.value().columnSize ();
208 void ColumnMapType ::
209 connectColumnsToTool ()
211 std::vector<std::string> missingColumns;
214 if (!userColumn.info.has_value())
217 ADD_FAILURE() <<
"provided a column not requested by tool: " << name;
220 auto& columnInfo = userColumn.info.value();
221 if (!userColumn.input.has_value())
223 if (!columnInfo.isOptional)
228 missingColumns.push_back (name);
232 auto&
input = userColumn.input.value();
233 switch (columnInfo.accessMode)
240 input.configureType (name, *columnInfo.type);
245 throw std::runtime_error (
"column mode unknown: " + columnInfo.name);
248 if (!missingColumns.empty())
250 std::string message =
"missing input columns:";
251 for (
auto& column : missingColumns)
252 message +=
" " + column;
253 throw std::runtime_error (message);
259 void ColumnMapType ::
268 void ColumnMapType ::
273 if (!userColumn.info.has_value())
275 auto& info = userColumn.info.value();
278 if (userColumn.expectation.has_value())
279 ADD_FAILURE() <<
"expectation provided for input-only column: " << columnName;
282 if (!userColumn.input.has_value())
286 if (userColumn.expectation.has_value())
287 ADD_FAILURE() <<
"expectation provided for omitted column: " << columnName;
290 throw std::logic_error (
"output column does not exist: " + columnName);
292 auto&
output = userColumn.input.value();
294 if (!userColumn.expectation.has_value())
296 ADD_FAILURE() <<
"no expectation provided for output column: " << columnName;
299 auto& expectation = userColumn.expectation.value();
300 expectation.configureType (columnName, *info.type);
char data[hepevt_bytes_allocation_ATLAS]
Class to wrap a set of SystematicVariations.
a class that holds the columnar data for a single call
a class that holds manually specified column data
std::vector< CP::SystematicSet > make_systematics_vector(const SystematicSet &systematics)
utility functions for working with systematics
void checkExpectation(const std::string &columnName, const std::type_info &outputType, std::size_t outputSize, const void *outputData, const std::type_info &expectationType, std::size_t expectationSize, const void *expectationData)
void printExpectedOutput(const std::string &columnName, const std::type_info &outputType, std::size_t outputSize, const void *outputData)
@ update
an updateable column
void renameContainers(IColumnarTool &tool, const std::vector< std::pair< std::string, std::string > > &renames)
rename containers in the columnar tool
ColumnarTestToolHandle * m_toolHandle
std::unique_ptr< ColumnVectorData > m_columnData
std::unordered_map< std::string, MyColumnData > m_userColumns