Commit 9e96d36c authored by Thomas Purcell's avatar Thomas Purcell
Browse files

Update value array accessing for new set up

op_slots are now used throughout
parent 76c06f01
...@@ -472,14 +472,14 @@ void FeatureSpace::project_generated(double* prop, int size, std::vector<node_pt ...@@ -472,14 +472,14 @@ void FeatureSpace::project_generated(double* prop, int size, std::vector<node_pt
if(scores_sel_private.size() == _n_sis_select) if(scores_sel_private.size() == _n_sis_select)
{ {
generated_phi[inds[ii]]->reindex(node_value_arrs::N_STORE_FEATURES + worst_score_ind + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size())); generated_phi[inds[ii]]->reindex(node_value_arrs::N_STORE_FEATURES + worst_score_ind + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size()));
generated_phi[inds[ii]]->set_value(); // generated_phi[inds[ii]]->set_value();
phi_sel_private[worst_score_ind] = generated_phi[inds[ii]]; phi_sel_private[worst_score_ind] = generated_phi[inds[ii]];
scores_sel_private[worst_score_ind] = cur_score; scores_sel_private[worst_score_ind] = cur_score;
} }
else else
{ {
generated_phi[inds[ii]]->reindex(node_value_arrs::N_STORE_FEATURES + scores_sel_private.size() + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size())); generated_phi[inds[ii]]->reindex(node_value_arrs::N_STORE_FEATURES + scores_sel_private.size() + _n_sis_select * (omp_get_thread_num() + _mpi_comm->size()));
generated_phi[inds[ii]]->set_value(); // generated_phi[inds[ii]]->set_value();
phi_sel_private.push_back(generated_phi[inds[ii]]); phi_sel_private.push_back(generated_phi[inds[ii]]);
scores_sel_private.push_back(cur_score); scores_sel_private.push_back(cur_score);
} }
......
...@@ -167,7 +167,7 @@ public: ...@@ -167,7 +167,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline void set_value(int offset = -1){std::copy_n(_value.data(), _n_samp, value_ptr());} inline void set_value(int offset=0){std::copy_n(_value.data(), _n_samp, value_ptr());}
// DocString: feat_node_set_test_value // DocString: feat_node_set_test_value
/** /**
...@@ -175,7 +175,7 @@ public: ...@@ -175,7 +175,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline void set_test_value(int offset = -1){if(!_selected) std::copy_n(_test_value.data(), _n_test_samp, test_value_ptr());} inline void set_test_value(int offset=0){if(!_selected) std::copy_n(_test_value.data(), _n_test_samp, test_value_ptr());}
// DocString: feat_node_is_nan // DocString: feat_node_is_nan
/** /**
...@@ -199,14 +199,14 @@ public: ...@@ -199,14 +199,14 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline double* value_ptr(int offset = 0){return _selected ? node_value_arrs::get_d_matrix_ptr(_d_mat_ind) : node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset);} inline double* value_ptr(int offset=0){return _selected ? node_value_arrs::get_d_matrix_ptr(_d_mat_ind) : node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, 0, offset);}
/** /**
* @brief The pointer to where the feature's test data is stored * @brief The pointer to where the feature's test data is stored
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline double* test_value_ptr(int offset = 0){return node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset);} inline double* test_value_ptr(int offset=0){return node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, 0, offset);}
// DocString: feat_node_rung // DocString: feat_node_rung
......
...@@ -116,7 +116,7 @@ public: ...@@ -116,7 +116,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline void set_value(int offset = -1){return;} inline void set_value(int offset=0){return;}
// DocString: model_node_set_test_value // DocString: model_node_set_test_value
/** /**
...@@ -124,7 +124,7 @@ public: ...@@ -124,7 +124,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline void set_test_value(int offset = -1){return;} inline void set_test_value(int offset=0){return;}
// DocString: model_node_is_nan // DocString: model_node_is_nan
/** /**
...@@ -148,14 +148,14 @@ public: ...@@ -148,14 +148,14 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline double* value_ptr(int offset = -1){return _value.data();} inline double* value_ptr(int offset=0){return _value.data();}
/** /**
* @brief The pointer to where the feature's test data is stored * @brief The pointer to where the feature's test data is stored
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
inline double* test_value_ptr(int offset = -1){return _test_value.data();} inline double* test_value_ptr(int offset=0){return _test_value.data();}
// DocString: model_node_rung // DocString: model_node_rung
/** /**
......
...@@ -225,14 +225,14 @@ public: ...@@ -225,14 +225,14 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual void set_value(int offset = -1) = 0; virtual void set_value(int offset=0) = 0;
/** /**
* @brief The pointer to where the feature's training data is stored * @brief The pointer to where the feature's training data is stored
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual double* value_ptr(int offset = -1) = 0; virtual double* value_ptr(int offset=0) = 0;
// DocString: node_set_test_value // DocString: node_set_test_value
/** /**
...@@ -240,14 +240,14 @@ public: ...@@ -240,14 +240,14 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual void set_test_value(int offset = -1) = 0; virtual void set_test_value(int offset=0) = 0;
/** /**
* @brief The pointer to where the feature's test data is stored * @brief The pointer to where the feature's test data is stored
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual double* test_value_ptr(int offset = -1) = 0; virtual double* test_value_ptr(int offset=0) = 0;
// DocString: node_is_nan // DocString: node_is_nan
/** /**
......
...@@ -143,7 +143,7 @@ public: ...@@ -143,7 +143,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual void set_value(int offset = -1) = 0; virtual void set_value(int offset=0) = 0;
// DocString: op_node_set_test_value // DocString: op_node_set_test_value
/** /**
...@@ -151,7 +151,7 @@ public: ...@@ -151,7 +151,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
virtual void set_test_value(int offset = -1) = 0; virtual void set_test_value(int offset=0) = 0;
/** /**
* @brief Get the pointer to the feature's training data * @brief Get the pointer to the feature's training data
...@@ -161,18 +161,17 @@ public: ...@@ -161,18 +161,17 @@ public:
* *
* @return pointer to the feature's training value * @return pointer to the feature's training value
*/ */
double* value_ptr(int offset=-1) double* value_ptr(int offset=0)
{ {
if(_selected) if(_selected)
return node_value_arrs::get_d_matrix_ptr(_d_mat_ind); return node_value_arrs::get_d_matrix_ptr(_d_mat_ind);
offset = (offset == -1) ? rung() : offset; if((rung() > node_value_arrs::N_RUNGS_STORED) && (node_value_arrs::temp_storage_reg(_arr_ind, rung(), offset) != _feat_ind))
if((rung() > node_value_arrs::N_RUNGS_STORED) && (node_value_arrs::temp_storage_reg(_arr_ind, offset) != _feat_ind))
{ {
set_value(offset); set_value(offset);
} }
return node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset); return node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset);
} }
/** /**
...@@ -183,15 +182,14 @@ public: ...@@ -183,15 +182,14 @@ public:
* *
* @return pointer to the feature's test values * @return pointer to the feature's test values
*/ */
double* test_value_ptr(int offset=-1) double* test_value_ptr(int offset=0)
{ {
offset = (offset == -1) ? rung() : offset; if((rung() > node_value_arrs::N_RUNGS_STORED) && (node_value_arrs::temp_storage_test_reg(_arr_ind, rung(), offset) != _feat_ind))
if((rung() > node_value_arrs::N_RUNGS_STORED) && (node_value_arrs::temp_storage_test_reg(_arr_ind, offset) != _feat_ind))
{ {
set_test_value(offset); set_test_value(offset);
} }
return node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset); return node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset);
} }
// DocString: op_node_is_nan // DocString: op_node_is_nan
......
...@@ -66,14 +66,12 @@ void AbsNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea ...@@ -66,14 +66,12 @@ void AbsNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea
void AbsNode::set_value(int offset) void AbsNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::abs(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::abs(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::abs(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::abs(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void AbsNode::set_test_value(int offset) void AbsNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::abs(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::abs(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }
...@@ -86,7 +86,7 @@ public: ...@@ -86,7 +86,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_value(int offset = -1); void set_value(int offset=0);
// DocString: abs_node_set_test_value // DocString: abs_node_set_test_value
/** /**
...@@ -94,7 +94,7 @@ public: ...@@ -94,7 +94,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_test_value(int offset = -1); void set_test_value(int offset=0);
// DocString: abs_node_rung // DocString: abs_node_rung
/** /**
......
...@@ -87,14 +87,12 @@ void AbsDiffNode::update_div_mult_leaves(std::map<std::string, double>& div_mult ...@@ -87,14 +87,12 @@ void AbsDiffNode::update_div_mult_leaves(std::map<std::string, double>& div_mult
void AbsDiffNode::set_value(int offset) void AbsDiffNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::abs_diff(_n_samp, _feats[0]->value_ptr(offset + 2), _feats[1]->value_ptr(offset + 1), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::abs_diff(_n_samp, _feats[0]->value_ptr(2 * offset), _feats[1]->value_ptr(2 * offset + 1), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::abs_diff(_n_samp, _feats[0]->value_ptr(2 * offset), _feats[1]->value_ptr(2 * offset + 1), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::abs_diff(_n_samp, _feats[0]->value_ptr(offset + 2), _feats[1]->value_ptr(offset + 1), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void AbsDiffNode::set_test_value(int offset) void AbsDiffNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::abs_diff(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), _feats[1]->test_value_ptr(2 * offset + 1), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::abs_diff(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), _feats[1]->test_value_ptr(offset + 1), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_value(int offset = -1); void set_value(int offset=0);
// DocString: abs_diff_node_set_test_value // DocString: abs_diff_node_set_test_value
/** /**
...@@ -97,7 +97,7 @@ public: ...@@ -97,7 +97,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_test_value(int offset = -1); void set_test_value(int offset=0);
// DocString: abs_diff_node_rung // DocString: abs_diff_node_rung
/** /**
......
...@@ -80,14 +80,12 @@ void AddNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea ...@@ -80,14 +80,12 @@ void AddNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea
void AddNode::set_value(int offset) void AddNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::add(_n_samp, _feats[0]->value_ptr(offset + 2), _feats[1]->value_ptr(offset + 1), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::add(_n_samp, _feats[0]->value_ptr(2 * offset), _feats[1]->value_ptr(2 * offset + 1), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::add(_n_samp, _feats[0]->value_ptr(2 * offset), _feats[1]->value_ptr(2 * offset + 1), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::add(_n_samp, _feats[0]->value_ptr(offset + 2), _feats[1]->value_ptr(offset + 1), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void AddNode::set_test_value(int offset) void AddNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::add(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), _feats[1]->test_value_ptr(2 * offset + 1), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::add(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), _feats[1]->test_value_ptr(offset + 1), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }
...@@ -86,7 +86,7 @@ public: ...@@ -86,7 +86,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_value(int offset = -1); void set_value(int offset=0);
// DocString: add_node_set_test_value // DocString: add_node_set_test_value
/** /**
...@@ -94,7 +94,7 @@ public: ...@@ -94,7 +94,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_test_value(int offset = -1); void set_test_value(int offset=0);
// DocString: add_node_rung // DocString: add_node_rung
/** /**
......
...@@ -56,13 +56,11 @@ void CbNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_leav ...@@ -56,13 +56,11 @@ void CbNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_leav
void CbNode::set_value(int offset) void CbNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::cb(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::cb(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cb(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cb(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void CbNode::set_test_value(int offset) void CbNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cb(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cb(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }
...@@ -84,7 +84,7 @@ public: ...@@ -84,7 +84,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_value(int offset = -1); void set_value(int offset=0);
// DocString: cb_node_set_test_value // DocString: cb_node_set_test_value
/** /**
...@@ -92,7 +92,7 @@ public: ...@@ -92,7 +92,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_test_value(int offset = -1); void set_test_value(int offset=0);
// DocString: cb_node_rung // DocString: cb_node_rung
/** /**
......
...@@ -55,14 +55,12 @@ void CbrtNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_le ...@@ -55,14 +55,12 @@ void CbrtNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_le
void CbrtNode::set_value(int offset) void CbrtNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::cbrt(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::cbrt(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cbrt(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cbrt(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void CbrtNode::set_test_value(int offset) void CbrtNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cbrt(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cbrt(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }
...@@ -84,7 +84,7 @@ public: ...@@ -84,7 +84,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_value(int offset = -1); void set_value(int offset=0);
// DocString: cbrt_node_set_test_value // DocString: cbrt_node_set_test_value
/** /**
...@@ -92,7 +92,7 @@ public: ...@@ -92,7 +92,7 @@ public:
* *
* @param offset(int) Key to determine which part of the temporary storage array to look into * @param offset(int) Key to determine which part of the temporary storage array to look into
*/ */
void set_test_value(int offset = -1); void set_test_value(int offset=0);
// DocString: cbrt_node_rung // DocString: cbrt_node_rung
/** /**
......
...@@ -61,14 +61,12 @@ void CosNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea ...@@ -61,14 +61,12 @@ void CosNode::update_div_mult_leaves(std::map<std::string, double>& div_mult_lea
void CosNode::set_value(int offset) void CosNode::set_value(int offset)
{ {
if(_selected) if(_selected)
allowed_op_funcs::cos(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_d_matrix_ptr(_d_mat_ind)); allowed_op_funcs::cos(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_d_matrix_ptr(_d_mat_ind));
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cos(_n_samp, _feats[0]->value_ptr(2 * offset), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cos(_n_samp, _feats[0]->value_ptr(offset + 2), node_value_arrs::get_value_ptr(_arr_ind, _feat_ind, offset));
} }
void CosNode::set_test_value(int offset) void CosNode::set_test_value(int offset)
{ {
offset = (offset == -1) ? rung() : offset; allowed_op_funcs::cos(_n_test_samp, _feats[0]->test_value_ptr(2 * offset), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, rung(), offset));
allowed_op_funcs::cos(_n_test_samp, _feats[0]->test_value_ptr(offset + 2), node_value_arrs::get_test_value_ptr(_arr_ind, _feat_ind, offset));
} }