Skip to content
Snippets Groups Projects
Commit 151837d5 authored by Thomas Purcell's avatar Thomas Purcell
Browse files

Fix bug in Absolute value difference node

Allowed features that should not have been
parent 584509e6
Branches
No related tags found
No related merge requests found
...@@ -19,11 +19,17 @@ void generateAbsDiffNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node ...@@ -19,11 +19,17 @@ void generateAbsDiffNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node
if((std::abs(add_sub_tot_first) > 1) && std::all_of(add_sub_leaves.begin(), add_sub_leaves.end(), [&add_sub_tot_first](auto el){return std::abs(el.second) == add_sub_tot_first;})) if((std::abs(add_sub_tot_first) > 1) && std::all_of(add_sub_leaves.begin(), add_sub_leaves.end(), [&add_sub_tot_first](auto el){return std::abs(el.second) == add_sub_tot_first;}))
return; return;
int offset = std::max(feat_1->rung(), feat_2->rung()) + 1; int offset = std::max(feat_1->rung(), feat_2->rung()) + 1;
double* val_ptr = node_value_arrs::get_value_ptr(feat_ind, feat_ind, offset); double* val_ptr = node_value_arrs::get_value_ptr(feat_ind, feat_ind, offset);
allowed_op_funcs::sub(feat_1->n_samp(), feat_1->value_ptr(offset + 2), feat_2->value_ptr(offset + 1), val_ptr);
if(*std::min_element(val_ptr, val_ptr + feat_1->n_samp()) < l_bound)
return;
allowed_op_funcs::abs_diff(feat_1->n_samp(), feat_1->value_ptr(offset + 2), feat_2->value_ptr(offset + 1), val_ptr); allowed_op_funcs::abs_diff(feat_1->n_samp(), feat_1->value_ptr(offset + 2), feat_2->value_ptr(offset + 1), val_ptr);
if((util_funcs::stand_dev(val_ptr, feat_1->n_samp()) < 1.0e-13) || std::any_of(val_ptr, val_ptr + feat_1->n_samp(), [&u_bound](double d){return !std::isfinite(d) || (std::abs(d) > u_bound);}) || (util_funcs::max_abs_val<double>(val_ptr, feat_1->n_samp()) < l_bound)) if((util_funcs::stand_dev(val_ptr, feat_1->n_samp()) < 1.0e-13) || std::any_of(val_ptr, val_ptr + feat_1->n_samp(), [&u_bound](double d){return !std::isfinite(d) || (std::abs(d) > u_bound);}))
return; return;
feat_list.push_back(std::make_shared<AbsDiffNode>(feat_1, feat_2, feat_ind)); feat_list.push_back(std::make_shared<AbsDiffNode>(feat_1, feat_2, feat_ind));
...@@ -58,6 +64,10 @@ AbsDiffNode::AbsDiffNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double ...@@ -58,6 +64,10 @@ AbsDiffNode::AbsDiffNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double
if((std::abs(add_sub_tot_first) > 1) && std::all_of(add_sub_leaves.begin(), add_sub_leaves.end(), [&add_sub_tot_first](auto el){return std::abs(el.second) == add_sub_tot_first;})) if((std::abs(add_sub_tot_first) > 1) && std::all_of(add_sub_leaves.begin(), add_sub_leaves.end(), [&add_sub_tot_first](auto el){return std::abs(el.second) == add_sub_tot_first;}))
throw InvalidFeatureException(); throw InvalidFeatureException();
allowed_op_funcs::sub(feat_1->n_samp(), feat_1->value_ptr(rung() + 2), feat_2->value_ptr(rung() + 1), value_ptr());
if(*std::min_element(value_ptr(), value_ptr() + _n_samp) < l_bound)
throw InvalidFeatureException();
set_value(); set_value();
if(is_nan() || is_const() || (util_funcs::max_abs_val<double>(value_ptr(), _n_samp) > u_bound) || (util_funcs::max_abs_val<double>(value_ptr(), _n_samp) < l_bound)) if(is_nan() || is_const() || (util_funcs::max_abs_val<double>(value_ptr(), _n_samp) > u_bound) || (util_funcs::max_abs_val<double>(value_ptr(), _n_samp) < l_bound))
throw InvalidFeatureException(); throw InvalidFeatureException();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment