17 double log_root_data_count;
18 double log_root_sum_hess;
19 bool create_new_translation_unit;
23 template <
typename ThresholdType,
typename LeafOutputType>
26 if (node->node_id == 0) {
27 if (node->data_count) {
28 context->log_root_data_count = std::log(*node->data_count);
30 context->log_root_data_count = std::numeric_limits<double>::quiet_NaN();
33 context->log_root_sum_hess = std::log(*node->sum_hess);
35 context->log_root_sum_hess = std::numeric_limits<double>::quiet_NaN();
39 if ( (node->data_count && !std::isnan(context->log_root_data_count)
40 && context->log_root_data_count - std::log(*node->data_count)
41 >= context->magnitude_req)
42 || (node->sum_hess && !std::isnan(context->log_root_sum_hess)
43 && context->log_root_sum_hess - std::log(*node->sum_hess)
44 >= context->magnitude_req) ) {
46 ASTNode* parent_node = node->parent;
49 if (context->create_new_translation_unit) {
50 tu_node = builder->template AddNode<TranslationUnitNode>(parent_node, context->num_tu++);
51 ASTNode* ac = builder->template AddNode<AccumulatorContextNode>(tu_node);
52 folder_node = builder->template AddNode<CodeFolderNode>(ac);
53 tu_node->children.push_back(ac);
54 ac->children.push_back(folder_node);
56 folder_node = builder->template AddNode<CodeFolderNode>(parent_node);
59 for (
size_t i = 0; i < parent_node->children.size(); ++i) {
60 if (parent_node->children[i] == node) {
65 TREELITE_CHECK_NE(node_loc, -1);
66 parent_node->children[node_loc]
67 = context->create_new_translation_unit ? tu_node : folder_node;
68 folder_node->children.push_back(node);
69 node->parent = folder_node;
72 bool folded_at_least_once =
false;
73 for (
ASTNode* child : node->children) {
74 folded_at_least_once |= fold_code(child, context, builder);
76 return folded_at_least_once;
80 int count_tu_nodes(
ASTNode* node);
82 template <
typename ThresholdType,
typename LeafOutputType>
85 double magnitude_req,
bool create_new_translation_unit) {
87 std::numeric_limits<double>::quiet_NaN(),
88 std::numeric_limits<double>::quiet_NaN(),
89 create_new_translation_unit,
90 count_tu_nodes(this->main_node)};
91 return fold_code(this->main_node, &context,
this);
logging facility for Treelite