From 81d4691762443722d6479d25b9c8a56a987e4ae4 Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Mon, 22 Mar 2021 08:22:39 +0100
Subject: [PATCH] parameterized feature feat_inds now are unsigned longs

Fixes from master adapted here
---
 .../feature_space/FeatureSpace.cpp              | 17 +++++++++++++++--
 .../abs/parameterized_absolute_value.cpp        |  8 ++++----
 .../abs/parameterized_absolute_value.hpp        |  8 ++++----
 .../parameterized_absolute_difference.cpp       |  8 ++++----
 .../parameterized_absolute_difference.hpp       |  8 ++++----
 .../add/parameterized_add.cpp                   |  8 ++++----
 .../add/parameterized_add.hpp                   |  8 ++++----
 .../cb/parameterized_cube.cpp                   |  8 ++++----
 .../cb/parameterized_cube.hpp                   |  8 ++++----
 .../cbrt/parameterized_cube_root.cpp            |  8 ++++----
 .../cbrt/parameterized_cube_root.hpp            |  8 ++++----
 .../cos/parameterized_cos.cpp                   |  8 ++++----
 .../cos/parameterized_cos.hpp                   |  8 ++++----
 .../div/parameterized_divide.cpp                |  8 ++++----
 .../div/parameterized_divide.hpp                |  8 ++++----
 .../exp/parameterized_exponential.cpp           |  8 ++++----
 .../exp/parameterized_exponential.hpp           |  8 ++++----
 .../inv/parameterized_inverse.cpp               |  8 ++++----
 .../inv/parameterized_inverse.hpp               |  8 ++++----
 .../log/parameterized_log.cpp                   |  8 ++++----
 .../log/parameterized_log.hpp                   |  8 ++++----
 .../mult/parameterized_multiply.cpp             |  8 ++++----
 .../mult/parameterized_multiply.hpp             |  8 ++++----
 .../parameterized_negative_exponential.cpp      |  8 ++++----
 .../parameterized_negative_exponential.hpp      |  8 ++++----
 .../sin/parameterized_sin.cpp                   |  8 ++++----
 .../sin/parameterized_sin.hpp                   |  8 ++++----
 .../six_pow/parameterized_sixth_power.cpp       |  8 ++++----
 .../six_pow/parameterized_sixth_power.hpp       |  8 ++++----
 .../sq/parameterized_square.cpp                 |  8 ++++----
 .../sq/parameterized_square.hpp                 |  8 ++++----
 .../sqrt/parameterized_square_root.cpp          |  8 ++++----
 .../sqrt/parameterized_square_root.hpp          |  8 ++++----
 .../sub/parameterized_subtract.cpp              |  8 ++++----
 .../sub/parameterized_subtract.hpp              |  8 ++++----
 .../node/operator_nodes/allowed_ops.hpp         |  4 ++--
 .../parameterization/test_abs_diff_node.cc      |  6 +++---
 .../parameterization/test_abs_node.cc           |  6 +++---
 .../parameterization/test_add_node.cc           |  6 +++---
 .../parameterization/test_cb_node.cc            |  6 +++---
 .../parameterization/test_cbrt_node.cc          |  6 +++---
 .../parameterization/test_cos_node.cc           |  6 +++---
 .../parameterization/test_div_node.cc           |  6 +++---
 .../parameterization/test_exp_node.cc           |  6 +++---
 .../parameterization/test_inv_node.cc           |  6 +++---
 .../parameterization/test_log_node.cc           |  6 +++---
 .../parameterization/test_mult_node.cc          |  6 +++---
 .../parameterization/test_neg_exp_node.cc       |  6 +++---
 .../parameterization/test_sin_node.cc           |  6 +++---
 .../parameterization/test_six_pow_node.cc       |  6 +++---
 .../parameterization/test_sq_node.cc            |  6 +++---
 .../parameterization/test_sqrt_node.cc          |  6 +++---
 .../parameterization/test_sub_node.cc           |  6 +++---
 53 files changed, 204 insertions(+), 191 deletions(-)

diff --git a/src/feature_creation/feature_space/FeatureSpace.cpp b/src/feature_creation/feature_space/FeatureSpace.cpp
index 80b847ce..59d9c23c 100644
--- a/src/feature_creation/feature_space/FeatureSpace.cpp
+++ b/src/feature_creation/feature_space/FeatureSpace.cpp
@@ -187,7 +187,14 @@ void FeatureSpace::initialize_fs()
 }
 
 #ifdef PARAMETERIZE
-    void FeatureSpace::generate_new_feats(std::vector<node_ptr>::iterator& feat, std::vector<node_ptr>& feat_set, int& feat_ind, std::shared_ptr<NLOptimizer> optimizer, double l_bound, double u_bound)
+    void FeatureSpace::generate_new_feats(
+        std::vector<node_ptr>::iterator& feat,
+        std::vector<node_ptr>& feat_set,
+        unsigned long int& feat_ind,
+        std::shared_ptr<NLOptimizer> optimizer,
+        double l_bound,
+        double u_bound
+    )
     {
 
         unsigned long int phi_ind = feat - _phi.begin();
@@ -228,7 +235,13 @@ void FeatureSpace::initialize_fs()
         }
     }
 #else
-    void FeatureSpace::generate_new_feats(std::vector<node_ptr>::iterator& feat, std::vector<node_ptr>& feat_set, int& feat_ind, double l_bound, double u_bound)
+    void FeatureSpace::generate_new_feats(
+        std::vector<node_ptr>::iterator& feat,
+        std::vector<node_ptr>& feat_set,
+        unsigned long int& feat_ind,
+        double l_bound,
+        double u_bound
+    )
     {
         unsigned long int phi_ind = feat - _phi.begin();
         feat_set.reserve(feat_set.size() + _un_operators.size() + phi_ind * (_com_bin_operators.size() + 2 * _bin_operators.size()));
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
index a7a01f57..54fb6e03 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AbsParamNode)
 
-void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AbsParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 AbsParamNode::AbsParamNode()
 {}
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -30,7 +30,7 @@ AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -38,7 +38,7 @@ AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimi
     get_parameters(optimizer);
 }
 
-AbsParamNode::AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+AbsParamNode::AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     AbsNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
index 4c0ec0c9..eea508c4 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/parameterized_absolute_value.hpp
@@ -63,7 +63,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    AbsParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -73,7 +73,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AbsParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -85,7 +85,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    AbsParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AbsParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: abs_param_node_set_value
     /**
@@ -191,6 +191,6 @@ public:
     }
 };
 
-void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAbsParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
index 684652ba..f7dc0811 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AbsDiffParamNode)
 
-void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AbsDiffParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -26,7 +26,7 @@ void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1,
 AbsDiffParamNode::AbsDiffParamNode()
 {}
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     std::map<std::string, int> add_sub_leaves;
@@ -52,14 +52,14 @@ AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_in
         throw InvalidFeatureException();
 }
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound):
+AbsDiffParamNode::AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound):
     AbsDiffNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
index f3781eb3..436b4fe1 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/parameterized_absolute_difference.hpp
@@ -59,7 +59,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AbsDiffParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: abs_diff_param_node_set_value
     /**
@@ -183,6 +183,6 @@ public:
     }
 };
 
-void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAbsDiffParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
index 6fd70eaa..983a763d 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(AddParamNode)
 
-void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<AddParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 AddParamNode::AddParamNode()
 {}
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+AddParamNode::AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     AddNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
index 02533c01..151dd729 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/parameterized_add.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    AddParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    AddParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: add_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateAddParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
index 420f912a..14befdb4 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CbParamNode)
 
-void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<CbParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& f
 CbParamNode::CbParamNode()
 {}
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,7 +30,7 @@ CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_b
         throw InvalidFeatureException();
 }
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -39,7 +39,7 @@ CbParamNode::CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimize
     set_value();
 }
 
-CbParamNode::CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CbParamNode::CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CbNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
index 2d56e25e..a3f5e6f2 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/parameterized_cube.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    CbParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CbParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CbParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CbParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cb_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCbParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
index 683cf9a8..ab9b657b 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CbrtParamNode)
 
-void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<CbrtParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 CbrtParamNode::CbrtParamNode()
 {}
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -30,7 +30,7 @@ CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double
         throw InvalidFeatureException();
 }
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -38,7 +38,7 @@ CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOpti
     get_parameters(optimizer);
 }
 
-CbrtParamNode::CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CbrtParamNode::CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CbrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
index 424a292c..98ac0cd6 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/parameterized_cube_root.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CbrtParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CbrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cbrt_param_node_set_value
     /**
@@ -190,6 +190,6 @@ public:
     }
 };
 
-void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCbrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
index d3fa1e0f..2941f140 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(CosParamNode)
 
-void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 CosParamNode::CosParamNode()
 {}
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     CosNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::SIN) || (feat->type() == NODE_TYPE::COS))
@@ -36,14 +36,14 @@ CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     CosNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-CosParamNode::CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+CosParamNode::CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     CosNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
index fb6ace4c..5849fc0e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/parameterized_cos.hpp
@@ -61,7 +61,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    CosParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    CosParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    CosParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    CosParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: cos_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateCosParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
index 1c3eed00..2e55503e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(DivParamNode)
 
-void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     if((feat_1->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::DIV))
@@ -22,7 +22,7 @@ void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 DivParamNode::DivParamNode()
 {}
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     DivNode(feat_1, feat_2, feat_ind)
 {
      if((feat_1->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::INV) || (feat_2->type() == NODE_TYPE::DIV))
@@ -36,7 +36,7 @@ DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     DivNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -44,7 +44,7 @@ DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::
     get_parameters(optimizer);
 }
 
-DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+DivParamNode::DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     DivNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
index 35f5a89a..97bfb793 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/parameterized_divide.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    DivParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    DivParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: div_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateDivParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
index 79fc6999..a9c3046c 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(ExpParamNode)
 
-void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 ExpParamNode::ExpParamNode()
 {}
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     ExpNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::ADD) || (feat->type() == NODE_TYPE::SUB) || (feat->type() == NODE_TYPE::LOG))
@@ -36,14 +36,14 @@ ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     ExpNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-ExpParamNode::ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+ExpParamNode::ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     ExpNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
index 6fae956f..b345ad40 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/parameterized_exponential.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    ExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    ExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    ExpParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    ExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: exp_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
index 735c64e2..51672fac 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(InvParamNode)
 
-void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 InvParamNode::InvParamNode()
 {}
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     InvNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::DIV) || (feat->type() == NODE_TYPE::INV))
@@ -36,14 +36,14 @@ InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     InvNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-InvParamNode::InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+InvParamNode::InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     InvNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
index c926e57e..62a207b0 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/parameterized_inverse.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    InvParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    InvParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    InvParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    InvParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: inv_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateInvParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
index 3f0f38f7..464ccb30 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(LogParamNode)
 
-void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 LogParamNode::LogParamNode()
 {}
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     LogNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::DIV) || (feat->type() == NODE_TYPE::INV) || (feat->type() == NODE_TYPE::MULT) || (feat->type() == NODE_TYPE::LOG) || (feat->type() == NODE_TYPE::SIX_POW) || (feat->type() == NODE_TYPE::CB) || (feat->type() == NODE_TYPE::SQ) || (feat->type() == NODE_TYPE::CBRT) || (feat->type() == NODE_TYPE::SQRT))
@@ -36,14 +36,14 @@ LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     LogNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-LogParamNode::LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+LogParamNode::LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     LogNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
index 0d75c274..e937d289 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/parameterized_log.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    LogParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    LogParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    LogParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    LogParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: log_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateLogParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
index d5e8421c..1176d6d9 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(MultParamNode)
 
-void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<MultParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, no
 MultParamNode::MultParamNode()
 {}
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -29,13 +29,13 @@ MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, dou
         throw InvalidFeatureException();
 }
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
 }
 
-MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
+MultParamNode::MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer):
     MultNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
index a3bc169c..58c25d4a 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/parameterized_multiply.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    MultParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    MultParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: mult_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateMultParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
index a77d222d..b7507886 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(NegExpParamNode)
 
-void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, in
 NegExpParamNode::NegExpParamNode()
 {}
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     NegExpNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::NEG_EXP) || (feat->type() == NODE_TYPE::EXP) || (feat->type() == NODE_TYPE::ADD) || (feat->type() == NODE_TYPE::SUB) || (feat->type() == NODE_TYPE::LOG))
@@ -36,14 +36,14 @@ NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, do
         throw InvalidFeatureException();
 }
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     NegExpNode(feat, feat_ind)
 {
     _params.resize(n_params(),  0.0);
     get_parameters(optimizer);
 }
 
-NegExpParamNode::NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+NegExpParamNode::NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     NegExpNode(feat, feat_ind)
 {
     _params.resize(n_params(),  0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
index 920c1132..51d2cac2 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/parameterized_negative_exponential.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    NegExpParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    NegExpParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: neg_exp_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateNegExpParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
index f8402ef7..faf8b667 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SinParamNode)
 
-void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
 
@@ -23,7 +23,7 @@ void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 SinParamNode::SinParamNode()
 {}
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SinNode(feat, feat_ind)
 {
     if((feat->type() == NODE_TYPE::SIN) || (feat->type() == NODE_TYPE::COS))
@@ -36,14 +36,14 @@ SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u
         throw InvalidFeatureException();
 }
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SinNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SinParamNode::SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SinParamNode::SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SinNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
index 06df38e4..a9049616 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/parameterized_sin.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SinParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SinParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SinParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SinParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sin_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSinParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
index f49fa971..49a5e2e0 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SixPowParamNode)
 
-void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SixPowParamNode>(feat, feat_ind, optimizer);
@@ -19,7 +19,7 @@ void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, in
 SixPowParamNode::SixPowParamNode()
 {}
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -29,14 +29,14 @@ SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, do
         throw InvalidFeatureException();
 }
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SixPowParamNode::SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SixPowParamNode::SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SixPowNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
index 296f3950..97a3b431 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/parameterized_sixth_power.hpp
@@ -61,7 +61,7 @@ public:
      * @param param_list The list of parameters to optimize using non-linear least squares
      * @param prop The property to fit to
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -71,7 +71,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -83,7 +83,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SixPowParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SixPowParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: six_pow_param_node_set_value
     /**
@@ -182,6 +182,6 @@ public:
     }
 };
 
-void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSixPowParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
index 22ebe969..a2ba568b 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SqParamNode)
 
-void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SqParamNode>(feat, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& f
 SqParamNode::SqParamNode()
 {}
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_b
         throw InvalidFeatureException();
 }
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SqParamNode::SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SqParamNode::SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SqNode(feat, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
index ce3f7a2e..9c5df7c2 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/parameterized_square.hpp
@@ -60,7 +60,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SqParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -70,7 +70,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SqParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -82,7 +82,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SqParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SqParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sq_param_node_set_value
     /**
@@ -181,6 +181,6 @@ public:
     }
 };
 
-void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSqParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
index 8a027e9f..4253636a 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SqrtParamNode)
 
-void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SqrtParamNode>(feat, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int&
 SqrtParamNode::SqrtParamNode()
 {}
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -31,7 +31,7 @@ SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double
         throw InvalidFeatureException();
 }
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
@@ -39,7 +39,7 @@ SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOpti
     get_parameters(optimizer);
 }
 
-SqrtParamNode::SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound) :
+SqrtParamNode::SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound) :
     SqrtNode(feat, feat_ind),
     _sign_alpha(1.0)
 {
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
index 173b09e9..a82ab1fb 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/parameterized_square_root.hpp
@@ -62,7 +62,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SqrtParamNode(node_ptr feat, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SqrtParamNode(node_ptr feat, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sqrt_param_node_set_value
     /**
@@ -191,6 +191,6 @@ public:
     }
 };
 
-void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSqrtParamNode(std::vector<node_ptr>& feat_list, node_ptr feat, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
index e58f2801..f42ca893 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.cpp
@@ -2,7 +2,7 @@
 
 BOOST_SERIALIZATION_ASSUME_ABSTRACT(SubParamNode)
 
-void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
+void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer)
 {
     ++feat_ind;
     node_ptr new_feat = std::make_shared<SubParamNode>(feat_1, feat_2, feat_ind, optimizer);
@@ -20,7 +20,7 @@ void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, nod
 SubParamNode::SubParamNode()
 {}
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
@@ -30,14 +30,14 @@ SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, doubl
         throw InvalidFeatureException();
 }
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
     get_parameters(optimizer);
 }
 
-SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound) :
+SubParamNode::SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound) :
     SubNode(feat_1, feat_2, feat_ind)
 {
     _params.resize(n_params(), 0.0);
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
index 5038b556..43f7cbb5 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/parameterized_subtract.hpp
@@ -61,7 +61,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param prop The property to fit to
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -72,7 +72,7 @@ public:
      * @param feat_ind Index of the new feature
      * @param prop The property to fit to
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
     /**
      * @brief Constructor
@@ -84,7 +84,7 @@ public:
      * @param u_bound Maximum absolute value allowed for the feature.
      * @param param_list The list of parameters to optimize using non-linear least squares
      */
-    SubParamNode(node_ptr feat_1, node_ptr feat_2, int feat_ind, double l_bound=1e-50, double u_bound=1e50);
+    SubParamNode(node_ptr feat_1, node_ptr feat_2, unsigned long int feat_ind, double l_bound=1e-50, double u_bound=1e50);
 
     // DocString: sub_param_node_set_value
     /**
@@ -184,6 +184,6 @@ public:
     }
 };
 
-void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
+void generateSubParamNode(std::vector<node_ptr>& feat_list, node_ptr feat_1, node_ptr feat_2, unsigned long int& feat_ind, double l_bound, double u_bound, std::shared_ptr<NLOptimizer> optimizer);
 
 #endif
diff --git a/src/feature_creation/node/operator_nodes/allowed_ops.hpp b/src/feature_creation/node/operator_nodes/allowed_ops.hpp
index e4d5f0ea..af66bd94 100644
--- a/src/feature_creation/node/operator_nodes/allowed_ops.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_ops.hpp
@@ -52,8 +52,8 @@ typedef std::function<void(std::vector<node_ptr>&, node_ptr, unsigned long int&,
 typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, unsigned long int&, double, double)> bin_op_node_gen;
 
 #ifdef PARAMETERIZE
-    typedef std::function<void(std::vector<node_ptr>&, node_ptr, int&, double, double, std::shared_ptr<NLOptimizer>)> un_param_op_node_gen;
-    typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, int&, double, double, std::shared_ptr<NLOptimizer>)> bin_param_op_node_gen;
+    typedef std::function<void(std::vector<node_ptr>&, node_ptr, unsigned long int&, double, double, std::shared_ptr<NLOptimizer>)> un_param_op_node_gen;
+    typedef std::function<void(std::vector<node_ptr>&, node_ptr, node_ptr, unsigned long int&, double, double, std::shared_ptr<NLOptimizer>)> bin_param_op_node_gen;
 #endif
 
 namespace allowed_op_maps
diff --git a/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc b/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
index e784c16a..5192a4c8 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_diff_node.cc
@@ -70,7 +70,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAbsDiffParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (AbsDiffParamNode created with an absolute value above the upper bound)";
@@ -86,7 +86,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -125,7 +125,7 @@ namespace
 
     TEST_F(AbsDiffParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _abs_diff_test = std::make_shared<AbsDiffParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_abs_diff_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_abs_node.cc b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
index 02e27e70..50bb26a4 100644
--- a/tests/googletest/feature_creation/parameterization/test_abs_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_abs_node.cc
@@ -59,7 +59,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAbsParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 1) << " (AbsParamNode created with an absolute value above the upper bound)";
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -105,7 +105,7 @@ namespace
 
     TEST_F(AbsParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _abs_test = std::make_shared<AbsParamNode>(_phi[0], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_abs_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_add_node.cc b/tests/googletest/feature_creation/parameterization/test_add_node.cc
index f9c0b85d..69542246 100644
--- a/tests/googletest/feature_creation/parameterization/test_add_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_add_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(AddParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateAddParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (AddParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(AddParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(AddParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _add_test = std::make_shared<AddParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_add_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cb_node.cc b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
index 4e40ac2d..bb39a233 100644
--- a/tests/googletest/feature_creation/parameterization/test_cb_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cb_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(CbParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateCbParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (CbParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(CbParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(CbParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<CbParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
index 158bd65c..40832ec5 100644
--- a/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cbrt_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateCbrtParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (CbrtParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(CbrtParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _cbrt_test = std::make_shared<CbrtParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_cbrt_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_cos_node.cc b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
index 63a1285e..c3f3092b 100644
--- a/tests/googletest/feature_creation/parameterization/test_cos_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_cos_node.cc
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(CosParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateCosParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -96,7 +96,7 @@ namespace
 
     TEST_F(CosParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -143,7 +143,7 @@ namespace
 
     TEST_F(CosParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _cos_test = std::make_shared<CosParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_cos_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_div_node.cc b/tests/googletest/feature_creation/parameterization/test_div_node.cc
index 886d9715..af77832b 100644
--- a/tests/googletest/feature_creation/parameterization/test_div_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_div_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(DivParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateDivParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (DivParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(DivParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(DivParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _div_test = std::make_shared<DivParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_div_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_exp_node.cc b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
index e97ed8c6..48501675 100644
--- a/tests/googletest/feature_creation/parameterization/test_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_exp_node.cc
@@ -77,7 +77,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
         generateExpParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), phi_sz) << " (ExpParamNode created with an absolute value above the upper bound)";
@@ -101,7 +101,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -156,7 +156,7 @@ namespace
 
     TEST_F(ExpParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<ExpParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_inv_node.cc b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
index 7e62b54e..66d76951 100644
--- a/tests/googletest/feature_creation/parameterization/test_inv_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_inv_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(InvParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateInvParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (InvParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(InvParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(InvParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _inv_test = std::make_shared<InvParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_inv_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_log_node.cc b/tests/googletest/feature_creation/parameterization/test_log_node.cc
index b7d18a92..609282d4 100644
--- a/tests/googletest/feature_creation/parameterization/test_log_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_log_node.cc
@@ -75,7 +75,7 @@ namespace
 
     TEST_F(LogParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateLogParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -100,7 +100,7 @@ namespace
 
     TEST_F(LogParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -155,7 +155,7 @@ namespace
 
     TEST_F(LogParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<LogParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_mult_node.cc b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
index 3bebb882..2b1c8740 100644
--- a/tests/googletest/feature_creation/parameterization/test_mult_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_mult_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(MultParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateMultParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (MultParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(MultParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(MultParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _mult_test = std::make_shared<MultParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_mult_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc b/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
index bdb1171e..7d46a7b0 100644
--- a/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_neg_exp_node.cc
@@ -77,7 +77,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
         generateNegExpParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), phi_sz) << " (NegExpParamNode created with an absolute value above the upper bound)";
@@ -102,7 +102,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -157,7 +157,7 @@ namespace
 
     TEST_F(NegExpParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<NegExpParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sin_node.cc b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
index 46a100c2..0f4df794 100644
--- a/tests/googletest/feature_creation/parameterization/test_sin_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sin_node.cc
@@ -74,7 +74,7 @@ namespace
 
     TEST_F(SinParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         int phi_sz = _phi.size();
 
         generateSinParamNode(_phi, _phi[0], feat_ind, 1e-50, 1e-40, _optimizer);
@@ -96,7 +96,7 @@ namespace
 
     TEST_F(SinParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -143,7 +143,7 @@ namespace
 
     TEST_F(SinParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sin_test = std::make_shared<SinParamNode>(_phi[0], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sin_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc b/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
index 6bc1fd41..07d41eec 100644
--- a/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_six_pow_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSixPowParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SixPowParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SixPowParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<SixPowParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sq_node.cc b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
index 93c88456..38edb030 100644
--- a/tests/googletest/feature_creation/parameterization/test_sq_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sq_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SqParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSqParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SqParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SqParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SqParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _exp_test = std::make_shared<SqParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_exp_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
index 1cd2a4c1..4d377235 100644
--- a/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sqrt_node.cc
@@ -68,7 +68,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSqrtParamNode(_phi, _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SqrtParamNode created with an absolute value above the upper bound)";
@@ -83,7 +83,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -114,7 +114,7 @@ namespace
 
     TEST_F(SqrtParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sqrt_test = std::make_shared<SqrtParamNode>(_phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sqrt_test->rung(), 1);
diff --git a/tests/googletest/feature_creation/parameterization/test_sub_node.cc b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
index 1e2c57c2..6bee32dd 100644
--- a/tests/googletest/feature_creation/parameterization/test_sub_node.cc
+++ b/tests/googletest/feature_creation/parameterization/test_sub_node.cc
@@ -69,7 +69,7 @@ namespace
 
     TEST_F(SubParamNodeTest, GeneratorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         generateSubParamNode(_phi, _phi[0], _phi[1], feat_ind, 1e-50, 1e-40, _optimizer);
         EXPECT_EQ(_phi.size(), 2) << " (SubParamNode created with an absolute value above the upper bound)";
@@ -84,7 +84,7 @@ namespace
 
     TEST_F(SubParamNodeTest, ConstructorTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
 
         try
         {
@@ -115,7 +115,7 @@ namespace
 
     TEST_F(SubParamNodeTest, AttributesTest)
     {
-        int feat_ind = _phi.size();
+        unsigned long int feat_ind = _phi.size();
         _sub_test = std::make_shared<SubParamNode>(_phi[0], _phi[1], feat_ind, 1e-50, 1e50, _optimizer);
 
         EXPECT_EQ(_sub_test->rung(), 1);
-- 
GitLab