12 #include <type_traits> 18 return std::unique_ptr<Model>();
20 return objs[0]->Dispatch([&objs](
const auto& first_model_obj) {
21 using ModelType = std::remove_const_t<std::remove_reference_t<decltype(first_model_obj)>>;
22 std::unique_ptr<ModelType> concatenated_model = std::make_unique<ModelType>();
23 for (std::size_t i = 0; i < objs.size(); ++i) {
24 auto* casted =
dynamic_cast<const ModelType*
>(objs[i]);
26 std::transform(casted->trees.begin(), casted->trees.end(),
27 std::back_inserter(concatenated_model->trees),
28 [](
const auto& tree) {
return tree.Clone(); });
30 TREELITE_LOG(FATAL) <<
"Model object at index " << i
31 <<
" has a different type than the first model object (at index 0)";
35 concatenated_model->num_feature = first_model_obj.num_feature;
36 concatenated_model->task_type = first_model_obj.task_type;
37 concatenated_model->average_tree_output = first_model_obj.average_tree_output;
38 concatenated_model->task_param = first_model_obj.task_param;
39 concatenated_model->param = first_model_obj.param;
40 return std::unique_ptr<Model>(concatenated_model.release());
model structure for tree ensemble
logging facility for Treelite
std::unique_ptr< Model > ConcatenateModelObjects(const std::vector< const Model *> &objs)
Concatenate multiple model objects into a single model object by copying all member trees into the de...