From 77c64893035051d8c14595f2f744f892c4c63b66 Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Sun, 8 Aug 2021 18:52:36 +0200
Subject: [PATCH] Update python library DocStrings

Set up for the python API
---
 src/descriptor_identifier/Model/Model.hpp     |   8 +-
 .../Model/ModelClassifier.hpp                 |   6 +-
 .../Model/ModelLogRegressor.hpp               |   4 +-
 .../Model/ModelRegressor.hpp                  |   4 +-
 .../SISSO_DI/SISSOClassifier.hpp              |   1 +
 .../SISSO_DI/SISSOLogRegressor.hpp            |   1 +
 .../SISSO_DI/SISSORegressor.hpp               |   2 +
 .../feature_space/FeatureSpace.hpp            |   8 -
 src/feature_creation/node/FeatureNode.hpp     |   4 +
 src/feature_creation/node/ModelNode.hpp       |  13 +-
 src/feature_creation/node/Node.hpp            |   3 +-
 .../node/operator_nodes/OperatorNode.hpp      |  14 +-
 .../abs/absolute_value.hpp                    |   1 +
 .../abs/parameterized_absolute_value.hpp      |   1 +
 .../abs_diff/absolute_difference.hpp          |   1 +
 .../parameterized_absolute_difference.hpp     |   1 +
 .../allowed_operator_nodes/add/add.hpp        |   1 +
 .../add/parameterized_add.hpp                 |   1 +
 .../allowed_operator_nodes/cb/cube.hpp        |   1 +
 .../cb/parameterized_cube.hpp                 |   1 +
 .../allowed_operator_nodes/cbrt/cube_root.hpp |   1 +
 .../cbrt/parameterized_cube_root.hpp          |   1 +
 .../allowed_operator_nodes/cos/cos.hpp        |   1 +
 .../cos/parameterized_cos.hpp                 |   1 +
 .../allowed_operator_nodes/div/divide.hpp     |   1 +
 .../div/parameterized_divide.hpp              |   1 +
 .../exp/exponential.hpp                       |   1 +
 .../allowed_operator_nodes/inv/inverse.hpp    |   1 +
 .../inv/parameterized_inverse.hpp             |   1 +
 .../allowed_operator_nodes/log/log.hpp        |   1 +
 .../log/parameterized_log.hpp                 |   1 +
 .../allowed_operator_nodes/mult/multiply.hpp  |   1 +
 .../mult/parameterized_multiply.hpp           |   1 +
 .../neg_exp/negative_exponential.hpp          |   1 +
 .../parameterized_negative_exponential.hpp    |   1 +
 .../sin/parameterized_sin.hpp                 |   1 +
 .../allowed_operator_nodes/sin/sin.hpp        |   1 +
 .../six_pow/parameterized_sixth_power.hpp     |   1 +
 .../six_pow/sixth_power.hpp                   |   1 +
 .../sq/parameterized_square.hpp               |   1 +
 .../allowed_operator_nodes/sq/square.hpp      |   1 +
 .../sqrt/parameterized_square_root.hpp        |   1 +
 .../sqrt/square_root.hpp                      |   1 +
 .../sub/parameterized_subtract.hpp            |   4 +-
 .../allowed_operator_nodes/sub/subtract.hpp   |   1 +
 .../value_storage/nodes_value_containers.cpp  |   4 -
 .../value_storage/nodes_value_containers.hpp  |  63 ++-
 src/feature_creation/units/Unit.hpp           |   1 +
 src/python/__init__.py                        |   6 +-
 src/python/_sisso.cpp                         |   2 +-
 src/python/bindings_docstring_keyed.cpp       | 457 ++++++++++++------
 src/python/bindings_docstring_keyed.hpp       |  15 +-
 src/python/feature_creation/FeatureSpace.cpp  |  12 +-
 src/python/feature_creation/node_utils.hpp    |   1 +
 src/utils/string_utils.hpp                    |   1 +
 55 files changed, 457 insertions(+), 209 deletions(-)

diff --git a/src/descriptor_identifier/Model/Model.hpp b/src/descriptor_identifier/Model/Model.hpp
index 957aae05..6baccab7 100644
--- a/src/descriptor_identifier/Model/Model.hpp
+++ b/src/descriptor_identifier/Model/Model.hpp
@@ -304,6 +304,7 @@ public:
      */
     virtual std::string matlab_expr() const = 0;
 
+    // DocString: model_to_matlab
     /**
      * @brief Convert the model into a Matlab function
      *
@@ -444,6 +445,7 @@ public:
      */
     inline py::list leave_out_inds(){return python_conv_utils::to_list<int>(_leave_out_inds);}
 
+    // DocString: model_eval_arr
     /**
      * @brief Evaluate the model for a new point
      *
@@ -452,6 +454,7 @@ public:
      */
     inline double eval_py(np::ndarray x_in) const {return eval(python_conv_utils::from_ndarray<double>(x_in));}
 
+    // DocString: model_eval_list
     /**
      * @brief Evaluate the model for a new point
      *
@@ -460,14 +463,16 @@ public:
      */
     inline double eval_py(py::list x_in) const {return eval(python_conv_utils::from_list<double>(x_in));}
 
+    // DocString: model_eval_dict
     /**
      * @brief Evaluate the model for a new point
      *
-     * @param x_in_dct Dictionary describing the new point ("feature expr": value)
+     * @param x_in_dct Dictionary describing the new point (\"feature expr\": value)
      * @return The prediction of the model for a given data point
      */
     inline double eval_py(py::dict x_in) const {return eval(python_conv_utils::from_dict<std::string, double>(x_in));}
 
+    // DocString: model_eval_many_arr
     /**
      * @brief Evaluate the model for a set of new points
      *
@@ -476,6 +481,7 @@ public:
      */
     np::ndarray eval_many_py(np::ndarray x_in) const ;
 
+    // DocString: model_eval_many_dict
     /**
      * @brief Evaluate the model for a set of new points
      *
diff --git a/src/descriptor_identifier/Model/ModelClassifier.hpp b/src/descriptor_identifier/Model/ModelClassifier.hpp
index df7cbb23..61803522 100644
--- a/src/descriptor_identifier/Model/ModelClassifier.hpp
+++ b/src/descriptor_identifier/Model/ModelClassifier.hpp
@@ -53,7 +53,7 @@ public:
         const std::vector<int> leave_out_inds
     );
 
-    // DocString: model_class_init_str
+    // DocString: model_class_init_train
     /**
      * @brief Construct a model from a training output file
      * @details Reads in all of the data from the output file and recreates the model object
@@ -62,7 +62,7 @@ public:
      */
     ModelClassifier(const std::string train_file);
 
-    // DocString: model_class_init_str_str
+    // DocString: model_class_init_test_train
     /**
      * @brief Construct a model from a training and testing output file
      * @details Reads in all of the data from the output files and recreates the model object
@@ -243,6 +243,7 @@ public:
     }
 
     #ifdef PY_BINDINGS
+    // DocString: model_class_init_new_coefs_list
     /**
      * @brief Construct a new Model with updated coefficient
      * @details Copy a model but update its coefficients
@@ -254,6 +255,7 @@ public:
      */
     ModelClassifier(const ModelClassifier& o, py::list new_coefs, np::ndarray prop_train_est, np::ndarray prop_test_est);
 
+    // DocString: model_class_init_new_coefs_arr
     /**
      * @brief Construct a new Model with updated coefficient
      * @details Copy a model but update its coefficients
diff --git a/src/descriptor_identifier/Model/ModelLogRegressor.hpp b/src/descriptor_identifier/Model/ModelLogRegressor.hpp
index 25b1a5c4..ffd552bd 100644
--- a/src/descriptor_identifier/Model/ModelLogRegressor.hpp
+++ b/src/descriptor_identifier/Model/ModelLogRegressor.hpp
@@ -52,7 +52,7 @@ public:
         const std::vector<int> leave_out_inds
     );
 
-    // DocString: model_log_reg_init_str
+    // DocString: model_log_reg_init_train
     /**
      * @brief Construct a model from a training output file
      * @details Reads in all of the data from the output file and recreates the model object
@@ -61,7 +61,7 @@ public:
      */
     ModelLogRegressor(std::string train_file);
 
-    // DocString: model_log_reg_init_str_str
+    // DocString: model_log_reg_init_test_train
     /**
      * @brief Construct a model from a training and testing output file
      * @details Reads in all of the data from the output files and recreates the model object
diff --git a/src/descriptor_identifier/Model/ModelRegressor.hpp b/src/descriptor_identifier/Model/ModelRegressor.hpp
index fa30b57f..658f761d 100644
--- a/src/descriptor_identifier/Model/ModelRegressor.hpp
+++ b/src/descriptor_identifier/Model/ModelRegressor.hpp
@@ -51,7 +51,7 @@ public:
         const std::vector<int> leave_out_inds
     );
 
-    // DocString: model_reg_init_str
+    // DocString: model_reg_init_train
     /**
      * @brief Construct a model from a training output file
      * @details Reads in all of the data from the output file and recreates the model object
@@ -60,7 +60,7 @@ public:
      */
     ModelRegressor(const std::string train_file);
 
-    // DocString: model_reg_init_str_str
+    // DocString: model_reg_init_test_train
     /**
      * @brief Construct a model from a training and testing output file
      * @details Reads in all of the data from the output files and recreates the model object
diff --git a/src/descriptor_identifier/SISSO_DI/SISSOClassifier.hpp b/src/descriptor_identifier/SISSO_DI/SISSOClassifier.hpp
index 55d2dafb..57786092 100644
--- a/src/descriptor_identifier/SISSO_DI/SISSOClassifier.hpp
+++ b/src/descriptor_identifier/SISSO_DI/SISSOClassifier.hpp
@@ -119,6 +119,7 @@ public:
 
     // Python interface functions
     #ifdef PY_BINDINGS
+    // DocString: sisso_class_init_arr
     /**
      * @brief Constructor for the Classifier that takes in python objects (cpp definition in <python/descriptor_identifier/SISSOClassifier.cpp)
      *
diff --git a/src/descriptor_identifier/SISSO_DI/SISSOLogRegressor.hpp b/src/descriptor_identifier/SISSO_DI/SISSOLogRegressor.hpp
index f77fdbaa..61c31ff4 100644
--- a/src/descriptor_identifier/SISSO_DI/SISSOLogRegressor.hpp
+++ b/src/descriptor_identifier/SISSO_DI/SISSOLogRegressor.hpp
@@ -87,6 +87,7 @@ public:
 
     // Python interface functions
     #ifdef PY_BINDINGS
+    // DocString: sisso_log_reg_init_arr
     /**
      * @brief Constructor for the Regressor that takes in python objects (cpp definition in <python/descriptor_identifier/SISSOLogRegressor.cpp)
      *
diff --git a/src/descriptor_identifier/SISSO_DI/SISSORegressor.hpp b/src/descriptor_identifier/SISSO_DI/SISSORegressor.hpp
index db07047a..c76a6115 100644
--- a/src/descriptor_identifier/SISSO_DI/SISSORegressor.hpp
+++ b/src/descriptor_identifier/SISSO_DI/SISSORegressor.hpp
@@ -94,6 +94,8 @@ public:
 
     // Python interface functions
     #ifdef PY_BINDINGS
+
+    // DocString: sisso_reg_init_arr
     /**
      * @brief Constructor for the Regressor that takes in python objects (cpp definition in <python/descriptor_identifier/SISSORegressor.cpp)
      *
diff --git a/src/feature_creation/feature_space/FeatureSpace.hpp b/src/feature_creation/feature_space/FeatureSpace.hpp
index 4b8d8ff1..54d73b78 100644
--- a/src/feature_creation/feature_space/FeatureSpace.hpp
+++ b/src/feature_creation/feature_space/FeatureSpace.hpp
@@ -389,7 +389,6 @@ public:
      * @param allowed_ops list of allowed operators
      * @param allowed_param_ops dictionary of the parameterizable operators and their associated free parameters
      * @param prop The property to be learned (training data)
-     * @param task_sizes The number of samples per task
      * @param project_type The projection operator to use
      * @param max_phi highest rung value for the calculation
      * @param n_sis_select number of features to select during each SIS step
@@ -406,7 +405,6 @@ public:
         py::list allowed_ops,
         py::list allowed_param_ops,
         py::list prop,
-        py::list task_sizes,
         std::string project_type="regression",
         int max_phi=1,
         int n_sis_select=1,
@@ -426,7 +424,6 @@ public:
      * @param phi_0 The initial set of features to combine
      * @param allowed_ops list of allowed operators
      * @param prop The property to be learned (training data)
-     * @param task_sizes The number of samples per task
      * @param project_type The projection operator to use
      * @param max_phi highest rung value for the calculation
      * @param n_sis_select number of features to select during each SIS step
@@ -442,7 +439,6 @@ public:
         py::list allowed_ops,
         py::list allowed_param_ops,
         np::ndarray prop,
-        py::list task_sizes,
         std::string project_type="regression",
         int max_phi=1,
         int n_sis_select=1,
@@ -462,7 +458,6 @@ public:
      * @param phi_0 The initial set of features to combine
      * @param allowed_ops list of allowed operators
      * @param prop The property to be learned (training data)
-     * @param task_sizes The number of samples per task
      * @param project_type The projection operator to use
      * @param max_phi highest rung value for the calculation
      * @param n_sis_select number of features to select during each SIS step
@@ -476,7 +471,6 @@ public:
         py::list phi_0,
         py::list allowed_ops,
         py::list prop,
-        py::list task_sizes,
         std::string project_type="regression",
         int max_phi=1,
         int n_sis_select=1,
@@ -494,7 +488,6 @@ public:
      * @param phi_0 The initial set of features to combine
      * @param allowed_ops list of allowed operators
      * @param prop The property to be learned (training data)
-     * @param task_sizes The number of samples per task
      * @param project_type The projection operator to use
      * @param max_phi highest rung value for the calculation
      * @param n_sis_select number of features to select during each SIS step
@@ -508,7 +501,6 @@ public:
         py::list phi_0,
         py::list allowed_ops,
         np::ndarray prop,
-        py::list task_sizes,
         std::string project_type="regression",
         int max_phi=1,
         int n_sis_select=1,
diff --git a/src/feature_creation/node/FeatureNode.hpp b/src/feature_creation/node/FeatureNode.hpp
index 82206701..0c1e8505 100644
--- a/src/feature_creation/node/FeatureNode.hpp
+++ b/src/feature_creation/node/FeatureNode.hpp
@@ -74,6 +74,7 @@ public:
         const bool set_val=true
     );
     #ifdef PY_BINDINGS
+    // DocString: feat_node_init_list
     /**
      * @brief Constructs a feature node using numpy arrays (cpp definition in "python/feature_creation/FeatureNode.cpp)
      *
@@ -85,6 +86,7 @@ public:
      */
     FeatureNode(unsigned long int feat_ind, std::string expr, np::ndarray value, np::ndarray test_value, Unit unit);
 
+    // DocString: feat_node_init_arr
     /**
      * @brief Constructs a feature node using Python lists (cpp definition in "python/feature_creation/FeatureNode.cpp)
      *
@@ -143,12 +145,14 @@ public:
      */
     void reset_feats(std::vector<node_ptr>& phi){};
 
+    // DocString: feat_node_x_in_expr
     /**
      * @brief Get the list of feature expressions
      * @return vector storing the expressions for all primary features that show up in feature in the order they appear in the postfix notation
      */
     virtual inline std::vector<std::string> get_x_in_expr_list() const {return std::vector<std::string>(1, _expr);}
 
+    // DocString: feat_node_n_leaves
     /**
      * @brief return the number of leaves in the feature
      *
diff --git a/src/feature_creation/node/ModelNode.hpp b/src/feature_creation/node/ModelNode.hpp
index d7002ba2..914496d9 100644
--- a/src/feature_creation/node/ModelNode.hpp
+++ b/src/feature_creation/node/ModelNode.hpp
@@ -65,6 +65,7 @@ public:
      */
     ModelNode();
 
+    // DocString: model_node_init
     /**
      * @brief Constructs a feature node
      *
@@ -91,6 +92,7 @@ public:
         const Unit unit
     );
 
+    // DocString: model_node_init_node_ptr
     /**
      * @brief Copy constructor from general node_ptr
      *
@@ -160,7 +162,7 @@ public:
     /**
      * @brief Evaluate the model for a new point
      *
-     * @param x_in_dct Dictionary describing the new point ("feature expr": value)
+     * @param x_in_dct Dictionary describing the new point (\"feature expr\": value)
      * @return The prediction of the model for a given data point
      */
     double eval(std::map<std::string, double> x_in_dct);
@@ -189,12 +191,14 @@ public:
      */
     std::vector<double> eval(std::map<std::string, std::vector<double>> x_in_dct);
 
+    // DocString: model_node_x_in_expr
     /**
      * @brief get the list of feature expressions for each of the leaves
      * @return Vector containing the expression for each leaf in the binary expression tree
      */
     inline std::vector<std::string> get_x_in_expr_list() const {return _x_in_expr_list;}
 
+    // DocString: model_node_n_leaves
     /**
      * @brief return the number of leaves in the feature
      *
@@ -372,6 +376,7 @@ public:
     void update_div_mult_leaves(std::map<std::string, double>& div_mult_leaves, const double fact, double& expected_abs_tot) const;
 
     #ifdef PY_BINDINGS
+    // DocString: model_node_eval_arr
     /**
      * @brief Evaluate the model for a new point
      *
@@ -380,6 +385,7 @@ public:
      */
     inline double eval_py(np::ndarray x_in){return eval(python_conv_utils::from_ndarray<double>(x_in));}
 
+    // DocString: model_node_eval_list
     /**
      * @brief Evaluate the model for a new point
      *
@@ -388,14 +394,16 @@ public:
      */
     inline double eval_py(py::list x_in){return eval(python_conv_utils::from_list<double>(x_in));}
 
+    // DocString: model_node_eval_dict
     /**
      * @brief Evaluate the model for a new point
      *
-     * @param x_in_dct Dictionary describing the new point ("feature expr": value)
+     * @param x_in_dct Dictionary describing the new point (\"feature expr\": value)
      * @return The prediction of the model for a given data point
      */
     inline double eval_py(py::dict x_in){return eval(python_conv_utils::from_dict<std::string, double>(x_in));}
 
+    // DocString: model_node_eval_many_arr
     /**
      * @brief Evaluate the model for a set of new points
      *
@@ -404,6 +412,7 @@ public:
      */
     np::ndarray eval_many_py(np::ndarray x_in);
 
+    // DocString: model_node_eval_many_dict
     /**
      * @brief Evaluate the model for a set of new points
      *
diff --git a/src/feature_creation/node/Node.hpp b/src/feature_creation/node/Node.hpp
index 3f97fd62..87bc48dc 100644
--- a/src/feature_creation/node/Node.hpp
+++ b/src/feature_creation/node/Node.hpp
@@ -20,7 +20,6 @@
 #include "utils/math_funcs.hpp"
 
 #ifdef PY_BINDINGS
-#include "python/conversion_utils.hpp"
 namespace py = boost::python;
 namespace np = boost::python::numpy;
 #endif
@@ -125,12 +124,14 @@ public:
      */
     virtual void reset_feats(std::vector<std::shared_ptr<Node>>& phi) = 0;
 
+    // DocString: node_x_in_expr
     /**
      * @brief Get the list of feature expressions
      * @return vector storing the expressions for all primary features that show up in feature in the order they appear in the postfix notation
      */
     virtual std::vector<std::string> get_x_in_expr_list() const = 0;
 
+    // DocString: node_n_leaves
     /**
      * @brief return the number of leaves in the feature
      *
diff --git a/src/feature_creation/node/operator_nodes/OperatorNode.hpp b/src/feature_creation/node/operator_nodes/OperatorNode.hpp
index 503d455d..fce88709 100644
--- a/src/feature_creation/node/operator_nodes/OperatorNode.hpp
+++ b/src/feature_creation/node/operator_nodes/OperatorNode.hpp
@@ -146,9 +146,9 @@ public:
         return x_in_expr;
     }
 
+    // DocString: op_node_n_leaves
     /**
      * @brief return the number of leaves in the feature
-     * @details [long description]
      *
      * @param cur_n_leaves The current number of primary features that are inside the feature
      * @return total number of leaves of the binary expression tree
@@ -184,24 +184,12 @@ public:
         );
     }
 
-    // DocString: op_node_expr
-    /**
-     * @brief Get the expression for the overall feature (From root node down)
-     */
-    virtual std::string expr() const = 0;
-
     // DocString: node_latex_expr
     /**
      * @brief Get the latexified expression for the overall feature (From root node down)
      */
     virtual std::string get_latex_expr() const = 0;
 
-    // DocString: op_node_unit
-    /**
-     * @brief Get the unit of the feature (combine the units of _feats)
-     */
-    virtual Unit unit() const = 0;
-
     /**
      * @brief Get the training data of the feature
      */
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/absolute_value.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/absolute_value.hpp
index f37662c9..cc7696ae 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/absolute_value.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs/absolute_value.hpp
@@ -47,6 +47,7 @@ public:
      */
     AbsNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: abs_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 3be3d22f..9419f726 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
@@ -79,6 +79,7 @@ public:
      */
     AbsParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: abs_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/absolute_difference.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/absolute_difference.hpp
index 6e17c5ad..d7368152 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/absolute_difference.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/abs_diff/absolute_difference.hpp
@@ -51,6 +51,7 @@ public:
      */
     AbsDiffNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind);
 
+    // DocString: abs_diff_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the features to operate on
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 a1830dcb..5a622386 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
@@ -80,6 +80,7 @@ public:
      */
     AbsDiffParamNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: abs_diff_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/add.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/add.hpp
index a532154d..8770fc90 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/add.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/add/add.hpp
@@ -48,6 +48,7 @@ public:
      */
     AddNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind);
 
+    // DocString: add_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the features to operate on
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 6071fedb..554f3e7f 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
@@ -82,6 +82,7 @@ public:
      */
     AddParamNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: add_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/cube.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/cube.hpp
index 8412c6c2..5547beee 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/cube.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cb/cube.hpp
@@ -47,6 +47,7 @@ public:
      */
     CbNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: cb_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 c7470e67..764fd010 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
@@ -79,6 +79,7 @@ public:
      */
     CbParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: cb_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/cube_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/cube_root.hpp
index 94abff84..9d1ef920 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/cube_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cbrt/cube_root.hpp
@@ -47,6 +47,7 @@ public:
      */
     CbrtNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: cbrt_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 f2c47e1d..d96e0a68 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
@@ -78,6 +78,7 @@ public:
      */
     CbrtParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: cbrt_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/cos.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/cos.hpp
index a159789b..fe730c6a 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/cos.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/cos/cos.hpp
@@ -47,6 +47,7 @@ public:
      */
     CosNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: cos_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 1b437577..13e4f13a 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
@@ -79,6 +79,7 @@ public:
      */
     CosParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: cos_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/divide.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/divide.hpp
index ca40eb12..a8fffa38 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/divide.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/div/divide.hpp
@@ -48,6 +48,7 @@ public:
      */
     DivNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind);
 
+    // DocString: div_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the features to operate on
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 b958eef9..58410be6 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
@@ -82,6 +82,7 @@ public:
      */
     DivParamNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: div_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/exponential.hpp
index e71f9906..b3d0b315 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/exp/exponential.hpp
@@ -47,6 +47,7 @@ public:
      */
     ExpNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: exp_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/inverse.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/inverse.hpp
index 12d95a9a..3bc75dd2 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/inverse.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/inv/inverse.hpp
@@ -43,6 +43,7 @@ public:
      */
     InvNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: inv_node_init
     /**
      * @brief Constructor without checking feature values
      * @details Constructs the Node from node pointer of the feature to operate on
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 c43f0187..5356e5c9 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
@@ -79,6 +79,7 @@ public:
      */
     InvParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: inv_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/log.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/log.hpp
index 8089ee11..6b7c1f9e 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/log.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/log/log.hpp
@@ -47,6 +47,7 @@ public:
      */
     LogNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: log_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 a088c757..9cfc6dc7 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
@@ -81,6 +81,7 @@ public:
      */
     LogParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: log_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/multiply.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/multiply.hpp
index 6d146221..18d162df 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/multiply.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/mult/multiply.hpp
@@ -49,6 +49,7 @@ public:
      */
     MultNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind);
 
+    // DocString: mult_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the features to operate on
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 0ab306c0..10ab81fd 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
@@ -80,6 +80,7 @@ public:
      */
     MultParamNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: mult_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/negative_exponential.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/negative_exponential.hpp
index 850ae2c6..e947a042 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/negative_exponential.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/neg_exp/negative_exponential.hpp
@@ -48,6 +48,7 @@ public:
      */
     NegExpNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: neg_exp_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 5e40984d..5af26bd5 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
@@ -79,6 +79,7 @@ public:
      */
     NegExpParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: neg_exp_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 a57e8b05..2b2e06c6 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
@@ -79,6 +79,7 @@ public:
      */
     SinParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: sin_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/sin.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/sin.hpp
index 0e641d28..dd2a85fd 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/sin.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sin/sin.hpp
@@ -48,6 +48,7 @@ public:
      */
     SinNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: sin_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 0798bead..e54a36fa 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
@@ -79,6 +79,7 @@ public:
      */
     SixPowParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: six_pow_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/sixth_power.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/sixth_power.hpp
index 1dbf6138..668e2e52 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/sixth_power.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/six_pow/sixth_power.hpp
@@ -48,6 +48,7 @@ public:
      */
     SixPowNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: six_pow_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 282d5027..30198b97 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
@@ -79,6 +79,7 @@ public:
      */
     SqParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: sq_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/square.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/square.hpp
index ffffc816..65fed714 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/square.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sq/square.hpp
@@ -47,6 +47,7 @@ public:
      */
     SqNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: sq_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 3b44b479..05b00d56 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
@@ -81,6 +81,7 @@ public:
      */
     SqrtParamNode(const node_ptr feat, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: sqrt_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/square_root.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/square_root.hpp
index c061e5e6..5a547944 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/square_root.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sqrt/square_root.hpp
@@ -48,6 +48,7 @@ public:
      */
     SqrtNode(const node_ptr feat, const unsigned long int feat_ind);
 
+    // DocString: sqrt_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
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 d3a8e481..01e2fda4 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
@@ -82,11 +82,13 @@ public:
      */
     SubParamNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind, std::shared_ptr<NLOptimizer> optimizer);
 
+    // DocString: sub_param_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the feature to operate on
      *
-     * @param feat shared_ptr of the feature to operate on (A)
+     * @param feat_1 shared_ptr of the feature to operate on (A)
+     * @param feat_2 shared_ptr of the feature to operate on (B)
      * @param feat_ind Index of the new feature
      * @param l_bound Minimum absolute value allowed for the feature.
      * @param u_bound Maximum absolute value allowed for the feature.
diff --git a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/subtract.hpp b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/subtract.hpp
index 308d1be2..4bee0cbc 100644
--- a/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/subtract.hpp
+++ b/src/feature_creation/node/operator_nodes/allowed_operator_nodes/sub/subtract.hpp
@@ -50,6 +50,7 @@ public:
      */
     SubNode(const node_ptr feat_1, const node_ptr feat_2, const unsigned long int feat_ind);
 
+    // DocString: sub_node_init
     /**
      * @brief Constructor
      * @details Constructs the Node from node pointer of the features to operate on
diff --git a/src/feature_creation/node/value_storage/nodes_value_containers.cpp b/src/feature_creation/node/value_storage/nodes_value_containers.cpp
index 7798e32f..cd903ff7 100644
--- a/src/feature_creation/node/value_storage/nodes_value_containers.cpp
+++ b/src/feature_creation/node/value_storage/nodes_value_containers.cpp
@@ -47,10 +47,6 @@ void node_value_arrs::initialize_values_arr(
     if(set_task_sz)
     {
         TASK_SZ_TRAIN = {n_samples};
-    }
-
-    if(set_task_sz)
-    {
         TASK_SZ_TEST = {n_samples_test};
     }
 
diff --git a/src/feature_creation/node/value_storage/nodes_value_containers.hpp b/src/feature_creation/node/value_storage/nodes_value_containers.hpp
index 6b6bfd85..12f998ea 100644
--- a/src/feature_creation/node/value_storage/nodes_value_containers.hpp
+++ b/src/feature_creation/node/value_storage/nodes_value_containers.hpp
@@ -21,6 +21,12 @@
 
 #include"utils/enum.hpp"
 
+#ifdef PY_BINDINGS
+#include "python/conversion_utils.hpp"
+namespace np = boost::python::numpy;
+namespace py = boost::python;
+#endif
+
 namespace node_value_arrs
 {
     extern std::vector<double> TEMP_STORAGE_ARR; //!< Array to temporarily store feature training data
@@ -67,6 +73,7 @@ namespace node_value_arrs
         const bool use_params
     );
 
+    // DocString: node_vals_init_no_ts
     /**
      * @brief Initialize the node value arrays
      * @details Using the size of the initial feature space constructor the storage arrays
@@ -75,7 +82,6 @@ namespace node_value_arrs
      * @param n_samples_test Number of test samples for each feature
      * @param n_primary_feat Number of primary features
      * @param max_rung Largest rung of a feature
-     * @param use_params If True set up parameter storage
      */
     inline void initialize_values_arr(
         const int n_samples,
@@ -120,6 +126,7 @@ namespace node_value_arrs
      */
     void initialize_param_storage();
 
+    // DocString: node_vlas_init_d_mat
     /**
      * @brief Initialize the descriptor matrix
      * @details Initialize an empty descriptor matrix
@@ -386,6 +393,60 @@ namespace node_value_arrs
      */
     inline void clear_temp_test_reg(){std::fill_n(TEMP_STORAGE_TEST_REG.begin(), TEMP_STORAGE_TEST_REG.size(), -1);}
 
+#ifdef PY_BINDINGS
+
+    // DocString: node_vals_ts_list
+    /**
+     * @brief Initialize the node value arrays
+     * @details Using the size of the initial feature space constructor the storage arrays
+     *
+     * @param task_sz_train Number of training samples per task
+     * @param task_sz_test Number of test sample per task
+     * @param n_primary_feat Number of primary features
+     * @param max_rung Largest rung of a feature
+     */
+    inline void initialize_values_arr(
+        py::list task_sz_train,
+        py::list task_sz_test,
+        int n_primary_feat,
+        int max_rung
+    )
+    {
+        initialize_values_arr(
+            python_conv_utils::from_list<int>(task_sz_train),
+            python_conv_utils::from_list<int>(task_sz_test),
+            n_primary_feat,
+            max_rung,
+            false
+        );
+    }
+
+    // DocString: node_vals_ts_arr
+    /**
+     * @brief Initialize the node value arrays
+     * @details Using the size of the initial feature space constructor the storage arrays
+     *
+     * @param task_sz_train Number of training samples per task
+     * @param task_sz_test Number of test sample per task
+     * @param n_primary_feat Number of primary features
+     * @param max_rung Largest rung of a feature
+     */
+    inline void initialize_values_arr(
+        np::ndarray task_sz_train,
+        np::ndarray task_sz_test,
+        int n_primary_feat,
+        int max_rung
+    )
+    {
+        initialize_values_arr(
+            python_conv_utils::from_ndarray<int>(task_sz_train),
+            python_conv_utils::from_ndarray<int>(task_sz_test),
+            n_primary_feat,
+            max_rung,
+            false
+        );
+    }
+#endif
 }
 
 #endif
diff --git a/src/feature_creation/units/Unit.hpp b/src/feature_creation/units/Unit.hpp
index dc66c4a6..852a2853 100644
--- a/src/feature_creation/units/Unit.hpp
+++ b/src/feature_creation/units/Unit.hpp
@@ -41,6 +41,7 @@ protected:
     std::map<std::string, double> _dct; //!< the dictionary describing the units <unit string, unit power>
 
 public:
+    // DocString: unit_base_const
     /**
      * @brief Base Constructor
      * @details Creates a unit with no entries
diff --git a/src/python/__init__.py b/src/python/__init__.py
index c5c9f9f2..46a04aab 100644
--- a/src/python/__init__.py
+++ b/src/python/__init__.py
@@ -182,7 +182,7 @@ def generate_phi_0_from_csv(
     exprs = list([col.split(":")[0].split("(")[0] for col in columns])
     units = list([get_unit(col) for col in columns])
 
-    initialize_values_arr(len(train_inds), len(leave_out_inds), len(columns), max_rung)
+    initialize_values_arr(task_sizes_train, task_sizes_test, len(columns), max_rung)
     try:
         initialize_param_storage()
     except NameError:
@@ -277,7 +277,6 @@ def generate_fs_csv(
             allowed_ops,
             allowed_param_ops,
             prop,
-            task_sizes_train,
             calc_type,
             max_phi,
             n_sis_select,
@@ -292,7 +291,6 @@ def generate_fs_csv(
             phi_0,
             allowed_ops,
             prop,
-            task_sizes_train,
             calc_type,
             max_phi,
             n_sis_select,
@@ -352,7 +350,6 @@ def generate_fs(
             allowed_ops,
             allowed_param_ops,
             prop,
-            task_sizes_train,
             calc_type,
             max_phi,
             n_sis_select,
@@ -367,7 +364,6 @@ def generate_fs(
             phi_0,
             allowed_ops,
             prop,
-            task_sizes_train,
             calc_type,
             max_phi,
             n_sis_select,
diff --git a/src/python/_sisso.cpp b/src/python/_sisso.cpp
index 77e5d03d..f7d8e69c 100644
--- a/src/python/_sisso.cpp
+++ b/src/python/_sisso.cpp
@@ -10,7 +10,7 @@ static void finalize();
 
 BOOST_PYTHON_MODULE(_sisso)
 {
-    py::docstring_options local_docstring_options(true, true, true);
+    py::docstring_options local_docstring_options(true, true, false);
 
     Py_Initialize();
     np::initialize();
diff --git a/src/python/bindings_docstring_keyed.cpp b/src/python/bindings_docstring_keyed.cpp
index d483907b..43413cc0 100644
--- a/src/python/bindings_docstring_keyed.cpp
+++ b/src/python/bindings_docstring_keyed.cpp
@@ -38,11 +38,44 @@ void sisso::register_all()
     sisso::feature_creation::node::registerSixPowNode();
 
     void (*init_val_ar)(int, int, int, int) = &node_value_arrs::initialize_values_arr;
-
-    def("phi_selected_from_file", &str2node::phi_selected_from_file_py);
-    def("initialize_values_arr", init_val_ar);
-    def("initialize_d_matrix_arr", &node_value_arrs::initialize_d_matrix_arr);
-    def("matlabify", &str_utils::matlabify);
+    void (*init_val_ar_list)(py::list, py::list, int, int) = &node_value_arrs::initialize_values_arr;
+    void (*init_val_ar_arr)(np::ndarray, np::ndarray, int, int) = &node_value_arrs::initialize_values_arr;
+
+    def(
+        "phi_selected_from_file",
+        &str2node::phi_selected_from_file_py,
+        (arg("filename"), arg("phi_0")),
+        "@DocString_node_utils_phi_sel_from_file@"
+    );
+    def(
+        "initialize_values_arr",
+        init_val_ar,
+        (arg("n_samples"), arg("n_samples_test"), arg("n_primary_feat"), arg("max_rung")),
+        "@DocString_node_vals_init_no_ts@"
+    );
+    def(
+        "initialize_values_arr",
+        init_val_ar_list,
+        (arg("task_sz_train"), arg("task_sz_test"), arg("n_primary_feat"), arg("max_rung")),
+        "@DocString_node_vals_ts_list@"
+    );
+    def(
+        "initialize_values_arr",
+        init_val_ar_arr,
+        (arg("task_sz_train"), arg("task_sz_test"), arg("n_primary_feat"), arg("max_rung")),
+        "@DocString_node_vals_ts_arr@"
+    );
+    def(
+        "initialize_d_matrix_arr",
+        &node_value_arrs::initialize_d_matrix_arr,
+        "@DocString_node_vlas_init_d_mat@"
+    );
+    def(
+        "matlabify",
+        &str_utils::matlabify,
+        (arg("str")),
+        "@DocString_str_utils_matlabify@"
+    );
 
     #ifdef PARAMETERIZE
         sisso::feature_creation::node::registerAddParamNode();
@@ -108,15 +141,84 @@ void sisso::feature_creation::registerFeatureSpace()
     void (FeatureSpace::*sis_ndarray)(np::ndarray) = &FeatureSpace::sis;
 
     #ifdef PARAMETERIZE
-    class_<FeatureSpace>("FeatureSpace", init<list, list, list, np::ndarray, list, optional<std::string, int, int, int, int, double, double, double, int>>())
-        .def(init<list, list, list, list, list, optional<std::string, int, int, int, int, double, double, double, int>>())
-        .def(init<std::string, list, list, list, optional<std::string, int, double>>())
-        .def(init<std::string, list, np::ndarray, list, optional<std::string, int, double>>())
-        .def("sis", sis_list, "@DocString_feat_space_sis_list@")
-        .def("sis", sis_ndarray, "@DocString_feat_space_sis_arr@")
-        .def("feat_in_phi", &FeatureSpace::feat_in_phi, "@DocString_feat_space_feat_in_phi@")
-        .def("remove_feature", &FeatureSpace::remove_feature, "@DocString_feat_space_remove_feature@")
-        .def("get_feature", &FeatureSpace::get_feature, "@DocString_feat_space_get_feature@")
+    class_<FeatureSpace>(
+        "FeatureSpace",
+        init<list, list, list, np::ndarray, optional<std::string, int, int, int, int, double, double, double, int, bool>>(
+            (
+                arg("self"),
+                arg("phi_0"),
+                arg("allowed_ops"),
+                arg("allowed_param_ops"),
+                arg("prop"),
+                arg("project_type")="regression",
+                arg("max_phi")=1,
+                arg("n_sis_select")=1,
+                arg("max_store_rung")=-1,
+                arg("n_rung_generate")=0,
+                arg("cross_corr_max")=1.0,
+                arg("min_abs_feat_val")=1e-50,
+                arg("max_abs_feat_val")=1e50,
+                arg("max_param_depth")=-1,
+                arg("reparam_residual")=false
+            ),
+            "@DocString_feat_space_init_np_array@"
+        )
+    )
+        .def(
+            init<list, list, list, list, optional<std::string, int, int, int, int, double, double, double, int, bool>>(
+                (
+                    arg("self"),
+                    arg("phi_0"),
+                    arg("allowed_ops"),
+                    arg("allowed_param_ops"),
+                    arg("prop"),
+                    arg("project_type")="regression",
+                    arg("max_phi")=1,
+                    arg("n_sis_select")=1,
+                    arg("max_store_rung")=-1,
+                    arg("n_rung_generate")=0,
+                    arg("cross_corr_max")=1.0,
+                    arg("min_abs_feat_val")=1e-50,
+                    arg("max_abs_feat_val")=1e50,
+                    arg("max_param_depth")=-1,
+                    arg("reparam_residual")=false
+                ),
+                "@DocString_feat_space_init_py_list@"
+            )
+        )
+        .def(
+            init<std::string, list, list, list, optional<std::string, int, double>>(
+                (
+                    arg("feature_file"),
+                    arg("phi_0"),
+                    arg("prop"),
+                    arg("task_sizes"),
+                    arg("project_type")="regression",
+                    arg("n_sis_select")=1,
+                    arg("cross_corr_max")=1.0
+                ),
+                "@DocString_feat_space_init_file_py_list@"
+            )
+        )
+        .def(
+            init<std::string, list, np::ndarray, list, optional<std::string, int, double>>(
+                (
+                    arg("feature_file"),
+                    arg("phi_0"),
+                    arg("prop"),
+                    arg("task_sizes"),
+                    arg("project_type")="regression",
+                    arg("n_sis_select")=1,
+                    arg("cross_corr_max")=1.0
+                ),
+                "@DocString_feat_space_init_file_np_array@"
+            )
+        )
+        .def("sis", sis_list, (arg("prop")), "@DocString_feat_space_sis_list@")
+        .def("sis", sis_ndarray, (arg("prop")), "@DocString_feat_space_sis_arr@")
+        .def("feat_in_phi", &FeatureSpace::feat_in_phi, (arg("ind")), "@DocString_feat_space_feat_in_phi@")
+        .def("remove_feature", &FeatureSpace::remove_feature, (arg("ind")), "@DocString_feat_space_remove_feature@")
+        .def("get_feature", &FeatureSpace::get_feature, (arg("ind")), "@DocString_feat_space_get_feature@")
         .add_property("phi_selected", &FeatureSpace::phi_selected_py, "@DocString_feat_space_phi_selected_py@")
         .add_property("phi0", &FeatureSpace::phi0_py, "@DocString_feat_space_phi0_py@")
         .add_property("phi", &FeatureSpace::phi_py, "@DocString_feat_space_phi_py@")
@@ -135,15 +237,78 @@ void sisso::feature_creation::registerFeatureSpace()
         .add_property("n_rung_generate", &FeatureSpace::n_rung_generate, "@DocString_feat_space_n_rung_generate@")
     ;
     #else
-    class_<FeatureSpace>("FeatureSpace", init<list, list, np::ndarray, list, optional<std::string, int, int, int, int, double, double, double>>())
-        .def(init<list, list, list, list, optional<std::string, int, int, int, int, double, double, double>>())
-        .def(init<std::string, list, list, list, optional<std::string, int, double>>())
-        .def(init<std::string, list, np::ndarray, list, optional<std::string, int, double>>())
-        .def("sis", sis_list, "@DocString_feat_space_sis_list@")
-        .def("sis", sis_ndarray, "@DocString_feat_space_sis_arr@")
-        .def("feat_in_phi", &FeatureSpace::feat_in_phi, "@DocString_feat_space_feat_in_phi@")
-        .def("remove_feature", &FeatureSpace::remove_feature, "@DocString_feat_space_remove_feature@")
-        .def("get_feature", &FeatureSpace::get_feature, "@DocString_feat_space_get_feature@")
+    class_<FeatureSpace>(
+        "FeatureSpace",
+        init<list, list, list, np::ndarray, optional<std::string, int, int, int, int, double, double, double, int>>(
+            (
+                arg("phi_0"),
+                arg("allowed_ops"),
+                arg("prop"),
+                arg("project_type")="regression",
+                arg("max_phi")=1,
+                arg("n_sis_select")=1,
+                arg("max_store_rung")=-1,
+                arg("n_rung_generate")=0,
+                arg("cross_corr_max")=1.0,
+                arg("min_abs_feat_val")=1e-50,
+                arg("max_abs_feat_val")=1e50,
+                arg("max_param_depth")=-1,
+            ),
+            "@DocString_feat_space_init_np_array_no_param@"
+        )
+    )
+        .def(
+            init<list, list, list, list, optional<std::string, int, int, int, int, double, double, double, int>>(
+                (
+                    arg("phi_0"),
+                    arg("allowed_ops"),
+                    arg("prop"),
+                    arg("project_type")="regression",
+                    arg("max_phi")=1,
+                    arg("n_sis_select")=1,
+                    arg("max_store_rung")=-1,
+                    arg("n_rung_generate")=0,
+                    arg("cross_corr_max")=1.0,
+                    arg("min_abs_feat_val")=1e-50,
+                    arg("max_abs_feat_val")=1e50,
+                    arg("max_param_depth")=-1,
+                ),
+                "@DocString_feat_space_init_py_list_no_param@"
+            )
+        )
+        .def(
+            init<std::string, list, list, list, optional<std::string, int, double>>(
+                (
+                    arg("feature_file"),
+                    arg("phi_0"),
+                    arg("prop"),
+                    arg("task_sizes"),
+                    arg("project_type")="regression",
+                    arg("n_sis_select")=1,
+                    arg("cross_corr_max")=1.0
+                ),
+                "@DocString_feat_space_init_file_py_list@"
+            )
+        )
+        .def(
+            init<std::string, list, np::ndarray, list, optional<std::string, int, double>>(
+                (
+                    arg("feature_file"),
+                    arg("phi_0"),
+                    arg("prop"),
+                    arg("task_sizes"),
+                    arg("project_type")="regression",
+                    arg("n_sis_select")=1,
+                    arg("cross_corr_max")=1.0
+                ),
+                "@DocString_feat_space_init_file_np_array@"
+            )
+        )
+        .def("sis", sis_list, (arg("prop")), "@DocString_feat_space_sis_list@")
+        .def("sis", sis_ndarray, (arg("prop")), "@DocString_feat_space_sis_arr@")
+        .def("feat_in_phi", &FeatureSpace::feat_in_phi, (arg("ind")), "@DocString_feat_space_feat_in_phi@")
+        .def("remove_feature", &FeatureSpace::remove_feature, (arg("ind")), "@DocString_feat_space_remove_feature@")
+        .def("get_feature", &FeatureSpace::get_feature, (arg("ind")), "@DocString_feat_space_get_feature@")
         .add_property("phi_selected", &FeatureSpace::phi_selected_py, "@DocString_feat_space_phi_selected_py@")
         .add_property("phi0", &FeatureSpace::phi0_py, "@DocString_feat_space_phi0_py@")
         .add_property("phi", &FeatureSpace::phi_py, "@DocString_feat_space_phi_py@")
@@ -166,10 +331,10 @@ void sisso::feature_creation::registerFeatureSpace()
 
 void sisso::feature_creation::registerUnit()
 {
-    class_<Unit>("Unit", init<>())
-        .def(init<std::map<std::string, double>>())
-        .def(init<std::string>())
-        .def(init<Unit&>())
+    class_<Unit>("Unit", init<>((arg("self")), "@DocString_unit_base_const@"))
+        .def(init<std::map<std::string, double>>((arg("dct")), "@DocString_unit_init_dict@"))
+        .def(init<std::string>((arg("unit_str")), "@DocString_unit_init_str@"))
+        .def(init<Unit&>((arg("o")), "@DocString_unit_init_unit@"))
         .def("__str__", &Unit::toString, "@DocString_unit_str@")
         .def("__repr__", &Unit::toString, "@DocString_unit_str@")
         .def("inverse", &Unit::inverse, "@DocString_unit_inverse@")
@@ -179,7 +344,7 @@ void sisso::feature_creation::registerUnit()
         .def(self /= self)
         .def(self == self)
         .def(self != self)
-        .def("__pow__", &Unit::operator^, "@DocString_unit_pow@")
+        .def("__pow__", &Unit::operator^, (arg("pow")), "@DocString_unit_pow@")
         .add_property("latex_str", &Unit::toLatexString, "@DocString_unit_latex_str@")
     ;
 }
@@ -188,7 +353,7 @@ void sisso::feature_creation::registerUnit()
     void sisso::feature_creation::nloptimizer::registerNLOptimizer()
     {
         class_<sisso::feature_creation::nloptimizer::NLOptimizerWrap, boost::noncopyable>("NLOptimizer", no_init)
-            .def("optimize_feature_params", &NLOptimizer::optimize_feature_params, "@DocString_nloptimizer_optimize_feature_params@")
+            .def("optimize_feature_params", &NLOptimizer::optimize_feature_params, (arg("feat")), "@DocString_nloptimizer_optimize_feature_params@")
         ;
     }
     void sisso::feature_creation::nloptimizer::registerNLOptimizerClassification()
@@ -208,11 +373,8 @@ void sisso::feature_creation::registerUnit()
     {
         void (Node::*reindex_1)(unsigned long int) = &Node::reindex;
         void (Node::*reindex_2)(unsigned long int, unsigned long int) = &Node::reindex;
-        // void (Node::*expr_no_param)() = &Node::expr;
 
         class_<sisso::feature_creation::node::NodeWrap, boost::noncopyable>("Node", no_init)
-            .def("reindex", reindex_1, "@DocString_node_reindex_1@")
-            .def("reindex", reindex_2, "@DocString_node_reindex_2@")
             .add_property("n_samp", &Node::n_samp, "@DocString_node_n_samp@")
             .add_property("n_test_samp", &Node::n_test_samp, "@DocString_node_n_test_samp@")
             .add_property("feat_ind", &Node::feat_ind, "@DocString_node_feat_ind@")
@@ -225,14 +387,16 @@ void sisso::feature_creation::registerUnit()
             .add_property("postfix_expr", &Node::postfix_expr, "@DocString_node_postfix_expr@")
             .add_property("latex_expr", &Node::latex_expr, "@DocString_node_latex_expr@")
             .add_property("parameters", &Node::parameters_py, "@DocString_node_parameters_py@")
+            .def("reindex", reindex_1, (arg("feat_ind")), "@DocString_node_reindex_1@")
+            .def("reindex", reindex_2, (arg("feat_ind"), arg("arr_ind")), "@DocString_node_reindex_2@")
             .def("unit", pure_virtual(&Node::unit), "@DocString_node_unit@")
             .def("is_nan", pure_virtual(&Node::is_nan), "@DocString_node_is_nan@")
             .def("is_const", pure_virtual(&Node::is_const), "@DocString_node_is_const@")
             .def("rung", pure_virtual(&Node::rung), "@DocString_node_rung@")
             .def("n_feats", pure_virtual(&Node::n_feats), "@DocString_node_n_feats@")
-            .def("feat", pure_virtual(&Node::feat), "@DocString_node_feat@")
-            .def("n_leaves", pure_virtual(&Node::n_leaves))
-            .def("x_in_expr_list", pure_virtual(&Node::get_x_in_expr_list))
+            .def("feat", pure_virtual(&Node::feat), (arg("feat_ind")), "@DocString_node_feat@")
+            .def("n_leaves", pure_virtual(&Node::n_leaves), (arg("cur_n_leaves")), "@DocString_node_n_leaves@")
+            .def("x_in_expr_list", pure_virtual(&Node::get_x_in_expr_list), "@DocString_node_x_in_expr@")
         ;
     }
 #else
@@ -241,8 +405,6 @@ void sisso::feature_creation::registerUnit()
         void (Node::*reindex_1)(unsigned long int) = &Node::reindex;
         void (Node::*reindex_2)(unsigned long int, unsigned long int) = &Node::reindex;
         class_<sisso::feature_creation::node::NodeWrap, boost::noncopyable>("Node", no_init)
-            .def("reindex", reindex_1, "@DocString_node_reindex_1@")
-            .def("reindex", reindex_2, "@DocString_node_reindex_2@")
             .add_property("n_samp", &Node::n_samp, "@DocString_node_n_samp@")
             .add_property("n_test_samp", &Node::n_test_samp, "@DocString_node_n_test_samp@")
             .add_property("feat_ind", &Node::feat_ind, "@DocString_node_feat_ind@")
@@ -254,14 +416,16 @@ void sisso::feature_creation::registerUnit()
             .add_property("primary_feat_decomp", &Node::primary_feature_decomp_py, "@DocString_node_primary_feature_decomp@")
             .add_property("postfix_expr", &Node::postfix_expr, "@DocString_node_postfix_expr@")
             .add_property("latex_expr", &Node::latex_expr, "@DocString_node_latex_expr@")
+            .def("reindex", reindex_1, (arg("feat_ind")), "@DocString_node_reindex_1@")
+            .def("reindex", reindex_2, (arg("feat_ind"), arg("arr_ind")), "@DocString_node_reindex_2@")
             .def("unit", pure_virtual(&Node::unit), "@DocString_node_unit@")
             .def("is_nan", pure_virtual(&Node::is_nan), "@DocString_node_is_nan@")
             .def("is_const", pure_virtual(&Node::is_const), "@DocString_node_is_const@")
             .def("rung", pure_virtual(&Node::rung), "@DocString_node_rung@")
             .def("n_feats", pure_virtual(&Node::n_feats), "@DocString_node_n_feats@")
-            .def("feat", pure_virtual(&Node::feat), "@DocString_node_feat@")
-            .def("n_leaves", pure_virtual(&Node::n_leaves))
-            .def("x_in_expr_list", pure_virtual(&Node::get_x_in_expr_list))
+            .def("feat", pure_virtual(&Node::feat), (arg("feat_ind")), "@DocString_node_feat@")
+            .def("n_leaves", pure_virtual(&Node::n_leaves), (arg("cur_n_leaves")), "@DocString_node_n_leaves@")
+            .def("x_in_expr_list", pure_virtual(&Node::get_x_in_expr_list), "@DocString_node_x_in_expr@")
         ;
     }
 #endif
@@ -273,17 +437,19 @@ void sisso::feature_creation::node::registerFeatureNode()
     std::string (FeatureNode::*expr_no_param)() const = &FeatureNode::expr;
 
     using namespace boost::python;
-    class_<FeatureNode, bases<Node>>("FeatureNode", init<int, std::string, np::ndarray, np::ndarray, Unit>())
+    class_<FeatureNode, bases<Node>>("FeatureNode", init<int, std::string, np::ndarray, np::ndarray, Unit>( ))
+    // class_<FeatureNode, bases<Node>>("FeatureNode", init<int, std::string, np::ndarray, np::ndarray, Unit>((arg("feat_ind"), arg("expr"), arg("value"), arg("test_value"), arg("unit")), "@DocString_feat_node_init_arr@"))
         .def(init<int, std::string, py::list, py::list, Unit>())
+        // .def(init<int, std::string, py::list, py::list, Unit>((arg("feat_ind"), arg("expr"), arg("value"), arg("test_value"), arg("unit")), "@DocString_feat_node_init_list@"))
         .def("is_nan", &FeatureNode::is_nan, "@DocString_feat_node_is_nan@")
         .def("is_const", &FeatureNode::is_const, "@DocString_feat_node_is_const@")
-        .def("set_value", set_value_no_param, "@DocString_feat_node_set_value@")
-        .def("set_test_value", set_test_value_no_param, "@DocString_feat_node_set_test_value@")
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_feat_node_set_value@")
+        .def("set_test_value", set_test_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_feat_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_feat_node_expr_const@")
         .add_property("unit", &FeatureNode::unit, "@DocString_feat_node_unit@")
         .add_property("rung", &FeatureNode::rung, "@DocString_feat_node_rung@")
-        .add_property("n_leaves", &FeatureNode::n_leaves)
-        .add_property("x_in_expr_list", &FeatureNode::get_x_in_expr_list)
+        .add_property("n_leaves", &FeatureNode::n_leaves, "@DocString_node_n_leaves@")
+        .add_property("x_in_expr_list", &FeatureNode::get_x_in_expr_list, "@DocString_node_x_in_expr@")
     ;
 }
 
@@ -297,20 +463,20 @@ void sisso::feature_creation::node::registerModelNode()
     double (ModelNode::*eval_dict)(py::dict) = &ModelNode::eval_py;
 
     using namespace boost::python;
-    class_<ModelNode, bases<FeatureNode>>("ModelNode", init<int, int, std::string, std::string, std::string, std::string, std::vector<double>, std::vector<double>, std::vector<std::string>, Unit>())
-        .def(init<node_ptr>())
+    class_<ModelNode, bases<FeatureNode>>("ModelNode", init<int, int, std::string, std::string, std::string, std::string, std::vector<double>, std::vector<double>, std::vector<std::string>, Unit>((arg("feat_ind"), arg("rung"), arg("expr"), arg("latex_expr"), arg("expr_postfix"), arg("matlab_fxn_expr"), arg("value"), arg("test_value"), arg("x_in_expr_list"), arg("unit")), "@DocString_model_node_init@"))
+        .def(init<node_ptr>((arg("in_node")), "@DocString_model_node_init_node_ptr@"))
         .def("is_nan", &ModelNode::is_nan, "@DocString_model_node_is_nan@")
         .def("is_const", &ModelNode::is_const, "@DocString_model_node_is_const@")
-        .def("set_value", &ModelNode::set_value, "@DocString_model_node_set_value@")
-        .def("set_test_value", &ModelNode::set_test_value, "@DocString_model_node_set_test_value@")
-        .def("eval_many", eval_many_dict)
-        .def("eval_many", eval_many_ndarr)
-        .def("eval", eval_ndarr)
-        .def("eval", eval_list)
-        .def("eval", eval_dict)
+        .def("set_value", &ModelNode::set_value, (arg("offset"), arg("for_comp")), "@DocString_model_node_set_value@")
+        .def("set_test_value", &ModelNode::set_test_value, (arg("offset"), arg("for_comp")), "@DocString_model_node_set_test_value@")
+        .def("eval_many", eval_many_dict, (arg("x_in")), "@DocString_model_node_eval_many_dict@")
+        .def("eval_many", eval_many_ndarr, (arg("x_in")), "@DocString_model_node_eval_many_arr@")
+        .def("eval", eval_ndarr, (arg("x_in")), "@DocString_model_node_eval_arr@")
+        .def("eval", eval_list, (arg("x_in")), "@DocString_model_node_eval_list@")
+        .def("eval", eval_dict, (arg("x_in")), "@DocString_model_node_eval_dict@")
         .add_property("rung", &ModelNode::rung, "@DocString_model_node_rung@")
-        .add_property("n_leaves", &ModelNode::n_leaves)
-        .add_property("x_in_expr_list", &ModelNode::x_in_expr_list_py)
+        .add_property("n_leaves", &ModelNode::n_leaves, "@DocString_node_n_leaves@")
+        .add_property("x_in_expr_list", &ModelNode::x_in_expr_list_py, "@DocString_node_x_in_expr@")
     ;
 }
 
@@ -320,8 +486,8 @@ void sisso::feature_creation::node::registerAddNode()
     void (AddNode::*set_test_value_no_param)(int, bool) const = &AddNode::set_test_value;
     std::string (AddNode::*expr_no_param)() const = &AddNode::expr;
 
-    class_<AddNode, bases<OperatorNode<2>>>("AddNode", init<node_ptr, node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_add_node_set_value@")
+    class_<AddNode, bases<OperatorNode<2>>>("AddNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_add_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_add_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_add_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_add_node_expr@")
         .add_property("unit", &AddNode::unit, "@DocString_add_node_unit@")
@@ -335,8 +501,8 @@ void sisso::feature_creation::node::registerSubNode()
     void (SubNode::*set_test_value_no_param)(int, bool) const = &SubNode::set_test_value;
     std::string (SubNode::*expr_no_param)() const = &SubNode::expr;
 
-    class_<SubNode, bases<OperatorNode<2>>>("SubNode", init<node_ptr, node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_sub_node_set_value@")
+    class_<SubNode, bases<OperatorNode<2>>>("SubNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sub_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sub_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_sub_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_sub_node_expr@")
         .add_property("unit", &SubNode::unit, "@DocString_sub_node_unit@")
@@ -350,8 +516,8 @@ void sisso::feature_creation::node::registerDivNode()
     void (DivNode::*set_test_value_no_param)(int, bool) const = &DivNode::set_test_value;
     std::string (DivNode::*expr_no_param)() const = &DivNode::expr;
 
-    class_<DivNode, bases<OperatorNode<2>>>("DivNode", init<node_ptr, node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_div_node_set_value@")
+    class_<DivNode, bases<OperatorNode<2>>>("DivNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_div_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_div_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_div_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_div_node_expr@")
         .add_property("unit", &DivNode::unit, "@DocString_div_node_unit@")
@@ -365,8 +531,8 @@ void sisso::feature_creation::node::registerMultNode()
     void (MultNode::*set_test_value_no_param)(int, bool) const = &MultNode::set_test_value;
     std::string (MultNode::*expr_no_param)() const = &MultNode::expr;
 
-    class_<MultNode, bases<OperatorNode<2>>>("MultNode", init<node_ptr, node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_mult_node_set_value@")
+    class_<MultNode, bases<OperatorNode<2>>>("MultNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_mult_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_mult_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_mult_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_mult_node_expr@")
         .add_property("unit", &MultNode::unit, "@DocString_mult_node_unit@")
@@ -380,8 +546,8 @@ void sisso::feature_creation::node::registerAbsDiffNode()
     void (AbsDiffNode::*set_test_value_no_param)(int, bool) const = &AbsDiffNode::set_test_value;
     std::string (AbsDiffNode::*expr_no_param)() const = &AbsDiffNode::expr;
 
-    class_<AbsDiffNode, bases<OperatorNode<2>>>("AbsDiffNode", init<node_ptr, node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_abs_diff_node_set_value@")
+    class_<AbsDiffNode, bases<OperatorNode<2>>>("AbsDiffNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_abs_diff_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_abs_diff_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_abs_diff_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_abs_diff_node_expr@")
         .add_property("unit", &AbsDiffNode::unit, "@DocString_abs_diff_node_unit@")
@@ -395,8 +561,8 @@ void sisso::feature_creation::node::registerAbsNode()
     void (AbsNode::*set_test_value_no_param)(int, bool) const = &AbsNode::set_test_value;
     std::string (AbsNode::*expr_no_param)() const = &AbsNode::expr;
 
-    class_<AbsNode, bases<OperatorNode<1>>>("AbsNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_abs_node_set_value@")
+    class_<AbsNode, bases<OperatorNode<1>>>("AbsNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_abs_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_abs_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_abs_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_abs_node_expr@")
         .add_property("unit", &AbsNode::unit, "@DocString_abs_node_unit@")
@@ -410,8 +576,8 @@ void sisso::feature_creation::node::registerInvNode()
     void (InvNode::*set_test_value_no_param)(int, bool) const = &InvNode::set_test_value;
     std::string (InvNode::*expr_no_param)() const = &InvNode::expr;
 
-    class_<InvNode, bases<OperatorNode<1>>>("InvNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_inv_node_set_value@")
+    class_<InvNode, bases<OperatorNode<1>>>("InvNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_inv_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_inv_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_inv_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_inv_node_expr@")
         .add_property("unit", &InvNode::unit, "@DocString_inv_node_unit@")
@@ -425,8 +591,8 @@ void sisso::feature_creation::node::registerLogNode()
     void (LogNode::*set_test_value_no_param)(int, bool) const = &LogNode::set_test_value;
     std::string (LogNode::*expr_no_param)() const = &LogNode::expr;
 
-    class_<LogNode, bases<OperatorNode<1>>>("LogNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_log_node_set_value@")
+    class_<LogNode, bases<OperatorNode<1>>>("LogNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_log_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_log_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_log_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_log_node_expr@")
         .add_property("unit", &LogNode::unit, "@DocString_log_node_unit@")
@@ -440,8 +606,8 @@ void sisso::feature_creation::node::registerExpNode()
     void (ExpNode::*set_test_value_no_param)(int, bool) const = &ExpNode::set_test_value;
     std::string (ExpNode::*expr_no_param)() const = &ExpNode::expr;
 
-    class_<ExpNode, bases<OperatorNode<1>>>("ExpNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_exp_node_set_value@")
+    class_<ExpNode, bases<OperatorNode<1>>>("ExpNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_exp_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_exp_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_exp_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_exp_node_expr@")
         .add_property("unit", &ExpNode::unit, "@DocString_exp_node_unit@")
@@ -455,8 +621,8 @@ void sisso::feature_creation::node::registerNegExpNode()
     void (NegExpNode::*set_test_value_no_param)(int, bool) const = &NegExpNode::set_test_value;
     std::string (NegExpNode::*expr_no_param)() const = &NegExpNode::expr;
 
-    class_<NegExpNode, bases<OperatorNode<1>>>("NegExpNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_neg_exp_node_set_value@")
+    class_<NegExpNode, bases<OperatorNode<1>>>("NegExpNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_neg_exp_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_neg_exp_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_neg_exp_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_neg_exp_node_expr@")
         .add_property("unit", &NegExpNode::unit, "@DocString_neg_exp_node_unit@")
@@ -470,8 +636,8 @@ void sisso::feature_creation::node::registerSinNode()
     void (SinNode::*set_test_value_no_param)(int, bool) const = &SinNode::set_test_value;
     std::string (SinNode::*expr_no_param)() const = &SinNode::expr;
 
-    class_<SinNode, bases<OperatorNode<1>>>("SinNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_sin_node_set_value@")
+    class_<SinNode, bases<OperatorNode<1>>>("SinNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sin_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sin_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_sin_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_sin_node_expr@")
         .add_property("unit", &SinNode::unit, "@DocString_sin_node_unit@")
@@ -485,8 +651,8 @@ void sisso::feature_creation::node::registerCosNode()
     void (CosNode::*set_test_value_no_param)(int, bool) const = &CosNode::set_test_value;
     std::string (CosNode::*expr_no_param)() const = &CosNode::expr;
 
-    class_<CosNode, bases<OperatorNode<1>>>("CosNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_cos_node_set_value@")
+    class_<CosNode, bases<OperatorNode<1>>>("CosNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cos_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cos_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_cos_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_cos_node_expr@")
         .add_property("unit", &CosNode::unit, "@DocString_cos_node_unit@")
@@ -500,8 +666,8 @@ void sisso::feature_creation::node::registerCbNode()
     void (CbNode::*set_test_value_no_param)(int, bool) const = &CbNode::set_test_value;
     std::string (CbNode::*expr_no_param)() const = &CbNode::expr;
 
-    class_<CbNode, bases<OperatorNode<1>>>("CbNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_cb_node_set_value@")
+    class_<CbNode, bases<OperatorNode<1>>>("CbNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cb_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cb_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_cb_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_cb_node_expr@")
         .add_property("unit", &CbNode::unit, "@DocString_cb_node_unit@")
@@ -515,8 +681,8 @@ void sisso::feature_creation::node::registerCbrtNode()
     void (CbrtNode::*set_test_value_no_param)(int, bool) const = &CbrtNode::set_test_value;
     std::string (CbrtNode::*expr_no_param)() const = &CbrtNode::expr;
 
-    class_<CbrtNode, bases<OperatorNode<1>>>("CbrtNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_cbrt_node_set_value@")
+    class_<CbrtNode, bases<OperatorNode<1>>>("CbrtNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cbrt_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cbrt_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_cbrt_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_cbrt_node_expr@")
         .add_property("unit", &CbrtNode::unit, "@DocString_cbrt_node_unit@")
@@ -530,8 +696,8 @@ void sisso::feature_creation::node::registerSqNode()
     void (SqNode::*set_test_value_no_param)(int, bool) const = &SqNode::set_test_value;
     std::string (SqNode::*expr_no_param)() const = &SqNode::expr;
 
-    class_<SqNode, bases<OperatorNode<1>>>("SqNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_sq_node_set_value@")
+    class_<SqNode, bases<OperatorNode<1>>>("SqNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sq_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sq_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_sq_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_sq_node_expr@")
         .add_property("unit", &SqNode::unit, "@DocString_sq_node_unit@")
@@ -545,8 +711,8 @@ void sisso::feature_creation::node::registerSqrtNode()
     void (SqrtNode::*set_test_value_no_param)(int, bool) const = &SqrtNode::set_test_value;
     std::string (SqrtNode::*expr_no_param)() const = &SqrtNode::expr;
 
-    class_<SqrtNode, bases<OperatorNode<1>>>("SqrtNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_sqrt_node_set_value@")
+    class_<SqrtNode, bases<OperatorNode<1>>>("SqrtNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sqrt_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sqrt_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_sqrt_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_sqrt_node_expr@")
         .add_property("unit", &SqrtNode::unit, "@DocString_sqrt_node_unit@")
@@ -560,8 +726,8 @@ void sisso::feature_creation::node::registerSixPowNode()
     void (SixPowNode::*set_test_value_no_param)(int, bool) const = &SixPowNode::set_test_value;
     std::string (SixPowNode::*expr_no_param)() const = &SixPowNode::expr;
 
-    class_<SixPowNode, bases<OperatorNode<1>>>("SixPowNode", init<node_ptr, int, double, double>())
-        .def("set_value", set_value_no_param, "@DocString_six_pow_node_set_value@")
+    class_<SixPowNode, bases<OperatorNode<1>>>("SixPowNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_six_pow_node_init@"))
+        .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_six_pow_node_set_value@")
         .def("set_test_value", set_test_value_no_param, "@DocString_six_pow_node_set_test_value@")
         .add_property("expr", expr_no_param, "@DocString_six_pow_node_expr@")
         .add_property("unit", &SixPowNode::unit, "@DocString_six_pow_node_unit@")
@@ -575,8 +741,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (AddParamNode::*set_test_value_no_param)(int, bool) const = &AddParamNode::set_test_value;
         std::string (AddParamNode::*expr_no_param)() const = &AddParamNode::expr;
 
-        class_<AddParamNode, bases<AddNode>>("AddParamNode", init<node_ptr, node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_add_param_node_set_value@")
+        class_<AddParamNode, bases<AddNode>>("AddParamNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_add_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_add_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_add_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_add_param_node_expr@")
             .add_property("unit", &AddParamNode::unit, "@DocString_add_param_node_unit@")
@@ -590,8 +756,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (SubParamNode::*set_test_value_no_param)(int, bool) const = &SubParamNode::set_test_value;
         std::string (SubParamNode::*expr_no_param)() const = &SubParamNode::expr;
 
-        class_<SubParamNode, bases<SubNode>>("SubParamNode", init<node_ptr, node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_sub_param_node_set_value@")
+        class_<SubParamNode, bases<SubNode>>("SubParamNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sub_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sub_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_sub_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_sub_param_node_expr@")
             .add_property("unit", &SubParamNode::unit, "@DocString_sub_param_node_unit@")
@@ -605,8 +771,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (DivParamNode::*set_test_value_no_param)(int, bool) const = &DivParamNode::set_test_value;
         std::string (DivParamNode::*expr_no_param)() const = &DivParamNode::expr;
 
-        class_<DivParamNode, bases<DivNode>>("DivParamNode", init<node_ptr, node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_div_param_node_set_value@")
+        class_<DivParamNode, bases<DivNode>>("DivParamNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_div_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_div_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_div_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_div_param_node_expr@")
             .add_property("unit", &DivParamNode::unit, "@DocString_div_param_node_unit@")
@@ -620,8 +786,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (MultParamNode::*set_test_value_no_param)(int, bool) const = &MultParamNode::set_test_value;
         std::string (MultParamNode::*expr_no_param)() const = &MultParamNode::expr;
 
-        class_<MultParamNode, bases<MultNode>>("MultParamNode", init<node_ptr, node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_mult_param_node_set_value@")
+        class_<MultParamNode, bases<MultNode>>("MultParamNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_mult_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_mult_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_mult_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_mult_param_node_expr@")
             .add_property("unit", &MultParamNode::unit, "@DocString_mult_param_node_unit@")
@@ -635,8 +801,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (AbsDiffParamNode::*set_test_value_no_param)(int, bool) const = &AbsDiffParamNode::set_test_value;
         std::string (AbsDiffParamNode::*expr_no_param)() const = &AbsDiffParamNode::expr;
 
-        class_<AbsDiffParamNode, bases<AbsDiffNode>>("AbsDiffParamNode", init<node_ptr, node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_abs_diff_param_node_set_value@")
+        class_<AbsDiffParamNode, bases<AbsDiffNode>>("AbsDiffParamNode", init<node_ptr, node_ptr, int, double, double>((arg("feat_1"), arg("feat_2"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_abs_diff_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_abs_diff_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_abs_diff_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_abs_diff_param_node_expr@")
             .add_property("unit", &AbsDiffParamNode::unit, "@DocString_abs_diff_param_node_unit@")
@@ -650,8 +816,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (AbsParamNode::*set_test_value_no_param)(int, bool) const = &AbsParamNode::set_test_value;
         std::string (AbsParamNode::*expr_no_param)() const = &AbsParamNode::expr;
 
-        class_<AbsParamNode, bases<AbsNode>>("AbsParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_abs_param_node_set_value@")
+        class_<AbsParamNode, bases<AbsNode>>("AbsParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_abs_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_abs_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_abs_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_abs_param_node_expr@")
             .add_property("unit", &AbsParamNode::unit, "@DocString_abs_param_node_unit@")
@@ -665,8 +831,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (InvParamNode::*set_test_value_no_param)(int, bool) const = &InvParamNode::set_test_value;
         std::string (InvParamNode::*expr_no_param)() const = &InvParamNode::expr;
 
-        class_<InvParamNode, bases<InvNode>>("InvParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_inv_param_node_set_value@")
+        class_<InvParamNode, bases<InvNode>>("InvParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_inv_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_inv_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_inv_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_inv_param_node_expr@")
             .add_property("unit", &InvParamNode::unit, "@DocString_inv_param_node_unit@")
@@ -680,8 +846,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (LogParamNode::*set_test_value_no_param)(int, bool) const = &LogParamNode::set_test_value;
         std::string (LogParamNode::*expr_no_param)() const = &LogParamNode::expr;
 
-        class_<LogParamNode, bases<LogNode>>("LogParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_log_param_node_set_value@")
+        class_<LogParamNode, bases<LogNode>>("LogParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_log_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_log_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_log_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_log_param_node_expr@")
             .add_property("unit", &LogParamNode::unit, "@DocString_log_param_node_unit@")
@@ -695,8 +861,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (ExpParamNode::*set_test_value_no_param)(int, bool) const = &ExpParamNode::set_test_value;
         std::string (ExpParamNode::*expr_no_param)() const = &ExpParamNode::expr;
 
-        class_<ExpParamNode, bases<ExpNode>>("ExpParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_exp_param_node_set_value@")
+        class_<ExpParamNode, bases<ExpNode>>("ExpParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_exp_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_exp_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_exp_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_exp_param_node_expr@")
             .add_property("unit", &ExpParamNode::unit, "@DocString_exp_param_node_unit@")
@@ -710,8 +876,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (NegExpParamNode::*set_test_value_no_param)(int, bool) const = &NegExpParamNode::set_test_value;
         std::string (NegExpParamNode::*expr_no_param)() const = &NegExpParamNode::expr;
 
-        class_<NegExpParamNode, bases<NegExpNode>>("NegExpParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_neg_exp_param_node_set_value@")
+        class_<NegExpParamNode, bases<NegExpNode>>("NegExpParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_neg_exp_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_neg_exp_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_neg_exp_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_neg_exp_param_node_expr@")
             .add_property("unit", &NegExpParamNode::unit, "@DocString_neg_exp_param_node_unit@")
@@ -725,8 +891,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (SinParamNode::*set_test_value_no_param)(int, bool) const = &SinParamNode::set_test_value;
         std::string (SinParamNode::*expr_no_param)() const = &SinParamNode::expr;
 
-        class_<SinParamNode, bases<SinNode>>("SinParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_sin_param_node_set_value@")
+        class_<SinParamNode, bases<SinNode>>("SinParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sin_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sin_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_sin_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_sin_param_node_expr@")
             .add_property("unit", &SinParamNode::unit, "@DocString_sin_param_node_unit@")
@@ -740,8 +906,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (CosParamNode::*set_test_value_no_param)(int, bool) const = &CosParamNode::set_test_value;
         std::string (CosParamNode::*expr_no_param)() const = &CosParamNode::expr;
 
-        class_<CosParamNode, bases<CosNode>>("CosParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_cos_param_node_set_value@")
+        class_<CosParamNode, bases<CosNode>>("CosParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cos_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cos_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_cos_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_cos_param_node_expr@")
             .add_property("unit", &CosParamNode::unit, "@DocString_cos_param_node_unit@")
@@ -755,8 +921,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (CbParamNode::*set_test_value_no_param)(int, bool) const = &CbParamNode::set_test_value;
         std::string (CbParamNode::*expr_no_param)() const = &CbParamNode::expr;
 
-        class_<CbParamNode, bases<CbNode>>("CbParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_cb_param_node_set_value@")
+        class_<CbParamNode, bases<CbNode>>("CbParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cb_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cb_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_cb_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_cb_param_node_expr@")
             .add_property("unit", &CbParamNode::unit, "@DocString_cb_param_node_unit@")
@@ -770,8 +936,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (CbrtParamNode::*set_test_value_no_param)(int, bool) const = &CbrtParamNode::set_test_value;
         std::string (CbrtParamNode::*expr_no_param)() const = &CbrtParamNode::expr;
 
-        class_<CbrtParamNode, bases<CbrtNode>>("CbrtParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_cbrt_param_node_set_value@")
+        class_<CbrtParamNode, bases<CbrtNode>>("CbrtParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_cbrt_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_cbrt_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_cbrt_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_cbrt_param_node_expr@")
             .add_property("unit", &CbrtParamNode::unit, "@DocString_cbrt_param_node_unit@")
@@ -785,8 +951,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (SqParamNode::*set_test_value_no_param)(int, bool) const = &SqParamNode::set_test_value;
         std::string (SqParamNode::*expr_no_param)() const = &SqParamNode::expr;
 
-        class_<SqParamNode, bases<SqNode>>("SqParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_sq_param_node_set_value@")
+        class_<SqParamNode, bases<SqNode>>("SqParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sq_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sq_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_sq_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_sq_param_node_expr@")
             .add_property("unit", &SqParamNode::unit, "@DocString_sq_param_node_unit@")
@@ -800,8 +966,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (SqrtParamNode::*set_test_value_no_param)(int, bool) const = &SqrtParamNode::set_test_value;
         std::string (SqrtParamNode::*expr_no_param)() const = &SqrtParamNode::expr;
 
-        class_<SqrtParamNode, bases<SqrtNode>>("SqrtParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_sqrt_param_node_set_value@")
+        class_<SqrtParamNode, bases<SqrtNode>>("SqrtParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_sqrt_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_sqrt_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_sqrt_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_sqrt_param_node_expr@")
             .add_property("unit", &SqrtParamNode::unit, "@DocString_sqrt_param_node_unit@")
@@ -815,8 +981,8 @@ void sisso::feature_creation::node::registerSixPowNode()
         void (SixPowParamNode::*set_test_value_no_param)(int, bool) const = &SixPowParamNode::set_test_value;
         std::string (SixPowParamNode::*expr_no_param)() const = &SixPowParamNode::expr;
 
-        class_<SixPowParamNode, bases<SixPowNode>>("SixPowParamNode", init<node_ptr, int, double, double>())
-            .def("set_value", set_value_no_param, "@DocString_six_pow_param_node_set_value@")
+        class_<SixPowParamNode, bases<SixPowNode>>("SixPowParamNode", init<node_ptr, int, double, double>((arg("feat"), arg("feat_ind"), arg("min_abs_feat_val"), arg("max_abs_feat_val")), "@DocString_six_pow_param_node_init@"))
+            .def("set_value", set_value_no_param, (arg("offset"), arg("for_comp")), "@DocString_six_pow_param_node_set_value@")
             .def("set_test_value", set_test_value_no_param, "@DocString_six_pow_param_node_set_test_value@")
             .add_property("expr", expr_no_param, "@DocString_six_pow_param_node_expr@")
             .add_property("unit", &SixPowParamNode::unit, "@DocString_six_pow_param_node_unit@")
@@ -835,13 +1001,13 @@ void sisso::descriptor_identifier::registerModel()
     double (Model::*eval_dict)(py::dict) const = &Model::eval_py;
 
     class_<sisso::descriptor_identifier::Model_Wrap, boost::noncopyable>("Model", no_init)
-        .def("eval_many", eval_many_dict)
-        .def("eval_many", eval_many_ndarr)
-        .def("eval", eval_ndarr)
-        .def("eval", eval_list)
-        .def("eval", eval_dict)
-        .def("write_matlab_fxn", &Model::write_matlab_fxn)
-        .def("to_file", &Model::to_file, "@DocString_model_to_file")
+        .def("eval", eval_ndarr, (arg("x_in")), "@DocString_model_eval_arr@")
+        .def("eval", eval_list, (arg("x_in")), "@DocString_model_eval_list@")
+        .def("eval", eval_dict, (arg("x_in")), "@DocString_model_eval_dict@")
+        .def("eval_many", eval_many_ndarr, (arg("x_in")), "@DocString_model_eval_many_arr@")
+        .def("eval_many", eval_many_dict, (arg("x_in")), "@DocString_model_eval_many_dict@")
+        .def("write_matlab_fxn", &Model::write_matlab_fxn, (arg("fxn_filename")), "@DocString_model_to_matlab@")
+        .def("to_file", &Model::to_file, (arg("filename"), arg("train")), "@DocString_model_to_file@")
         .add_property("n_samp_train", &Model::n_samp_train, "@DocString_model_n_samp_train@")
         .add_property("n_samp_test", &Model::n_samp_test, "@DocString_model_n_samp_test@")
         .add_property("n_dim", &Model::n_dim, "@DocString_model_n_dim@")
@@ -865,8 +1031,8 @@ void sisso::descriptor_identifier::registerModel()
 
 void sisso::descriptor_identifier::registerModelRegressor()
 {
-    class_<ModelRegressor, bases<Model>>("ModelRegressor", init<std::string>())
-        .def(init<std::string, std::string>())
+    class_<ModelRegressor, bases<Model>>("ModelRegressor", init<std::string>((arg("train_file")), "@DocString_model_reg_init_train@"))
+        .def(init<std::string, std::string>((arg("train_file"), arg("test_file")), "@DocString_model_reg_init_test_train@"))
         .def("__str__", &ModelRegressor::toString, "@DocString_model_reg_str@")
         .def("__repr__", &ModelRegressor::toString, "@DocString_model_reg_str@")
         .add_property("latex_str", &ModelRegressor::toLatexString, "@DocString_model_reg_latex_str@")
@@ -893,8 +1059,8 @@ void sisso::descriptor_identifier::registerModelRegressor()
 
 void sisso::descriptor_identifier::registerModelLogRegressor()
 {
-    class_<ModelLogRegressor, bases<ModelRegressor>>("ModelLogRegressor", init<std::string>())
-        .def(init<std::string, std::string>())
+    class_<ModelLogRegressor, bases<ModelRegressor>>("ModelLogRegressor", init<std::string>((arg("train_file")), "@DocString_model_log_reg_init_train@"))
+        .def(init<std::string, std::string>((arg("train_file"), arg("test_file")), "@DocString_model_log_reg_init_test_train@"))
         .def("__str__", &ModelLogRegressor::toString, "@DocString_model_log_reg_str@")
         .def("__repr__", &ModelLogRegressor::toString, "@DocString_model_log_reg_str@")
         .add_property("latex_str", &ModelLogRegressor::toLatexString, "@DocString_model_log_reg_latex_str@")
@@ -903,10 +1069,10 @@ void sisso::descriptor_identifier::registerModelLogRegressor()
 
 void sisso::descriptor_identifier::registerModelClassifier()
 {
-    class_<ModelClassifier, bases<Model>>("ModelClassifier", init<std::string>())
-        .def(init<std::string, std::string>())
-        .def(init<ModelClassifier, py::list, np::ndarray, np::ndarray>())
-        .def(init<ModelClassifier, np::ndarray, np::ndarray, np::ndarray>())
+    class_<ModelClassifier, bases<Model>>("ModelClassifier", init<std::string>((arg("train_file")), "@DocString_model_class_init_train@"))
+        .def(init<std::string, std::string>((arg("train_file"), arg("test_file")), "@DocString_model_class_init_test_train@"))
+        .def(init<ModelClassifier, py::list, np::ndarray, np::ndarray>((arg("o"), arg("new_coefs"), arg("prop_train_est"), arg("prop_test_est")), "@DocString_model_class_init_new_coefs_list@"))
+        .def(init<ModelClassifier, np::ndarray, np::ndarray, np::ndarray>((arg("o"), arg("new_coefs"), arg("prop_train_est"), arg("prop_test_est")), "@DocString_model_class_init_new_coefs_arr@"))
         .def("__str__", &ModelClassifier::toString, "@DocString_model_class_str@")
         .def("__repr__", &ModelClassifier::toString, "@DocString_model_class_str@")
         .add_property("latex_str", &ModelClassifier::toLatexString, "@DocString_model_class_latex_str@")
@@ -936,26 +1102,25 @@ void sisso::descriptor_identifier::registerSISSO_DI()
 
 void sisso::descriptor_identifier::registerSISSORegressor()
 {
-    class_<SISSORegressor, bases<SISSO_DI>>("SISSORegressor", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int, optional<bool>>())
+    class_<SISSORegressor, bases<SISSO_DI>>("SISSORegressor", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int, optional<bool>>((arg("feat_space"),arg("prop_label"),arg("prop_unit"),arg("prop"),arg("prop_test"),arg("task_sizes_train"),arg("task_sizes_test"),arg("leave_out_inds"),arg("n_dim"),arg("n_residual"),arg("n_models_store"),arg("fix_intercept")), "@DocString_model_reg_init_arr@"))
+        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int, optional<bool>>((arg("feat_space"),arg("prop_label"),arg("prop_unit"),arg("prop"),arg("prop_test"),arg("task_sizes_train"),arg("task_sizes_test"),arg("leave_out_inds"),arg("n_dim"),arg("n_residual"),arg("n_models_store"),arg("fix_intercept")), "@DocString_model_reg_init_list@"))
         .def("fit", &SISSORegressor::fit, "@DocString_sisso_reg_fit@")
-        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int, optional<bool>>())
         .add_property("models", &SISSORegressor::models_py, "@DocString_sisso_reg_models_py@")
     ;
 }
 
 void sisso::descriptor_identifier::registerSISSOLogRegressor()
 {
-    class_<SISSOLogRegressor, bases<SISSORegressor>>("SISSOLogRegressor", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int, optional<bool>>())
-        .def("fit", &SISSOLogRegressor::fit, "@DocString_sisso_reg_fit@")
-        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int, optional<bool>>())
+    class_<SISSOLogRegressor, bases<SISSORegressor>>("SISSOLogRegressor", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int, optional<bool>>((arg("feat_space"),arg("prop_label"),arg("prop_unit"),arg("prop"),arg("prop_test"),arg("task_sizes_train"),arg("task_sizes_test"),arg("leave_out_inds"),arg("n_dim"),arg("n_residual"),arg("n_models_store"),arg("fix_intercept")), "@DocString_model_log_reg_init_arr@"))
+        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int, optional<bool>>((arg("feat_space"),arg("prop_label"),arg("prop_unit"),arg("prop"),arg("prop_test"),arg("task_sizes_train"),arg("task_sizes_test"),arg("leave_out_inds"),arg("n_dim"),arg("n_residual"),arg("n_models_store"),arg("fix_intercept")), "@DocString_model_log_reg_init_list@"))
         .add_property("models", &SISSOLogRegressor::models_log_reg_py, "@DocString_sisso_log_reg_models_py@")
     ;
 }
 
 void sisso::descriptor_identifier::registerSISSOClassifier()
 {
-    class_<SISSOClassifier, bases<SISSO_DI>>("SISSOClassifier", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int>())
-        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int>())
+    class_<SISSOClassifier, bases<SISSO_DI>>("SISSOClassifier", init<std::shared_ptr<FeatureSpace>, std::string, Unit, np::ndarray, np::ndarray, py::list, py::list, py::list, int, int, int>((arg("feat_space"), arg("prop_label"), arg("prop_unit"), arg("prop"), arg("prop_test"), arg("task_sizes_train"), arg("task_sizes_test"), arg("leave_out_inds"), arg("n_dim"), arg("n_residual"), arg("n_models_store")), "@DocString_sisso_class_init_arr@"))
+        .def(init<std::shared_ptr<FeatureSpace>, std::string, Unit, py::list, py::list, py::list, py::list, py::list, int, int, int>((arg("feat_space"), arg("prop_label"), arg("prop_unit"), arg("prop"), arg("prop_test"), arg("task_sizes_train"), arg("task_sizes_test"), arg("leave_out_inds"), arg("n_dim"), arg("n_residual"), arg("n_models_store")), "@DocString_sisso_class_init_list@"))
         .def("fit", &SISSOClassifier::fit, "@DocString_sisso_class_fit@")
         .add_property("models", &SISSOClassifier::models_py, "@DocString_sisso_class_models_py@")
     ;
diff --git a/src/python/bindings_docstring_keyed.hpp b/src/python/bindings_docstring_keyed.hpp
index c9d2878b..71752347 100644
--- a/src/python/bindings_docstring_keyed.hpp
+++ b/src/python/bindings_docstring_keyed.hpp
@@ -320,20 +320,12 @@ namespace sisso
                     py::class_<OperatorNodeWrap<N>, py::bases<Node>, boost::noncopyable>("OperatorNode")
                         .def("is_nan", &OperatorNode<N>::is_nan, "@DocString_op_node_is_nan@")
                         .def("is_const", &OperatorNode<N>::is_const, "@DocString_op_node_is_const@")
-                        .def("set_value", py::pure_virtual(&OperatorNode<N>::set_value), "@DocString_op_node_set_value@")
-                        .def("set_test_value", py::pure_virtual(&OperatorNode<N>::set_test_value), "@DocString_op_node_set_test_value@")
-                        .def("rung", py::pure_virtual(&OperatorNode<N>::rung), "@DocString_op_node_rung@")
-                        .def("expr", py::pure_virtual(&OperatorNode<N>::expr), "@DocString_op_node_expr@")
-                        .def("unit", py::pure_virtual(&OperatorNode<N>::unit), "@DocString_op_node_unit@")
                         .add_property("n_feats", &OperatorNode<N>::n_feats, "@DocString_op_node_n_feats@")
-                        .add_property("feat", &OperatorNode<N>::feat, "@DocString_op_node_feat@")
-                        .add_property("n_leaves", &OperatorNode<N>::n_leaves)
+                        .add_property("feat", &OperatorNode<N>::feat, (py::arg("ind")), "@DocString_op_node_feat@")
+                        .add_property("n_leaves", &OperatorNode<N>::n_leaves, (py::arg("cur_n_leaves")), "@DocString_op_node_n_leaves@")
                     ;
                 }
             #else
-                /**
-                 * @brief Register the OperatorNode for accessing the object via python
-                 */
                 template<int N>
                 static void registerOperatorNode()
                 {
@@ -342,8 +334,6 @@ namespace sisso
                     py::class_<OperatorNodeWrap<N>, py::bases<Node>, boost::noncopyable>("OperatorNode")
                         .def("is_nan", &OperatorNode<N>::is_nan, "@DocString_op_node_is_nan@")
                         .def("is_const", &OperatorNode<N>::is_const, "@DocString_op_node_is_const@")
-                        .def("rung", py::pure_virtual(&OperatorNode<N>::rung), "@DocString_op_node_rung@")
-                        .def("unit", py::pure_virtual(&OperatorNode<N>::unit), "@DocString_op_node_unit@")
                         .def("get_parameters", py::pure_virtual(&OperatorNode<N>::get_parameters), "@DocString_op_node_get_params@")
                         .def("set_parameters", set_params_arr, "@DocString_op_node_set_param_arr@")
                         .def("set_parameters", set_params_list, "@DocString_op_node_set_param_list@")
@@ -352,6 +342,7 @@ namespace sisso
                         .add_property("n_leaves", &OperatorNode<N>::n_leaves)
                     ;
                 }
+
             #endif
 
             /**
diff --git a/src/python/feature_creation/FeatureSpace.cpp b/src/python/feature_creation/FeatureSpace.cpp
index c31f8f7b..c0e9b7e7 100644
--- a/src/python/feature_creation/FeatureSpace.cpp
+++ b/src/python/feature_creation/FeatureSpace.cpp
@@ -6,7 +6,6 @@ FeatureSpace::FeatureSpace(
     py::list allowed_ops,
     py::list allowed_param_ops,
     py::list prop,
-    py::list task_sizes,
     std::string project_type,
     int max_phi,
     int n_sis_select,
@@ -26,7 +25,7 @@ FeatureSpace::FeatureSpace(
     _allowed_ops(python_conv_utils::from_list<std::string>(allowed_ops)),
     _prop(python_conv_utils::from_list<double>(prop)),
     _scores(py::len(phi_0), 0.0),
-    _task_sizes(python_conv_utils::from_list<int>(task_sizes)),
+    _task_sizes(node_value_arrs::TASK_SZ_TRAIN),
     _start_gen(1, 0),
     _feature_space_file("feature_space/selected_features.txt"),
     _feature_space_summary_file("feature_space/SIS_summary.txt"),
@@ -52,7 +51,6 @@ FeatureSpace::FeatureSpace(
     py::list allowed_ops,
     py::list allowed_param_ops,
     np::ndarray prop,
-    py::list task_sizes,
     std::string project_type,
     int max_phi,
     int n_sis_select,
@@ -72,7 +70,7 @@ FeatureSpace::FeatureSpace(
     _allowed_ops(python_conv_utils::from_list<std::string>(allowed_ops)),
     _prop(python_conv_utils::from_ndarray<double>(prop)),
     _scores(py::len(phi_0), 0.0),
-    _task_sizes(python_conv_utils::from_list<int>(task_sizes)),
+    _task_sizes(node_value_arrs::TASK_SZ_TRAIN),
     _start_gen(1, 0),
     _feature_space_file("feature_space/selected_features.txt"),
     _feature_space_summary_file("feature_space/SIS_summary.txt"),
@@ -97,7 +95,6 @@ FeatureSpace::FeatureSpace(
     py::list phi_0,
     py::list allowed_ops,
     py::list prop,
-    py::list task_sizes,
     std::string project_type,
     int max_phi,
     int n_sis_select,
@@ -112,7 +109,7 @@ FeatureSpace::FeatureSpace(
     _allowed_ops(python_conv_utils::from_list<std::string>(allowed_ops)),
     _prop(python_conv_utils::from_list<double>(prop)),
     _scores(py::len(phi_0), 0.0),
-    _task_sizes(python_conv_utils::from_list<int>(task_sizes)),
+    _task_sizes(node_value_arrs::TASK_SZ_TRAIN),
     _start_gen(1, 0),
     _feature_space_file("feature_space/selected_features.txt"),
     _feature_space_summary_file("feature_space/SIS_summary.txt"),
@@ -137,7 +134,6 @@ FeatureSpace::FeatureSpace(
     py::list phi_0,
     py::list allowed_ops,
     np::ndarray prop,
-    py::list task_sizes,
     std::string project_type,
     int max_phi,
     int n_sis_select,
@@ -152,7 +148,7 @@ FeatureSpace::FeatureSpace(
     _allowed_ops(python_conv_utils::from_list<std::string>(allowed_ops)),
     _prop(python_conv_utils::from_ndarray<double>(prop)),
     _scores(py::len(phi_0), 0.0),
-    _task_sizes(python_conv_utils::from_list<int>(task_sizes)),
+    _task_sizes(node_value_arrs::TASK_SZ_TRAIN),
     _start_gen(1, 0),
     _feature_space_file("feature_space/selected_features.txt"),
     _feature_space_summary_file("feature_space/SIS_summary.txt"),
diff --git a/src/python/feature_creation/node_utils.hpp b/src/python/feature_creation/node_utils.hpp
index 149e3e3d..1adb9ec3 100644
--- a/src/python/feature_creation/node_utils.hpp
+++ b/src/python/feature_creation/node_utils.hpp
@@ -13,6 +13,7 @@ namespace py = boost::python;
 
 namespace str2node
 {
+    // DocString: node_utils_phi_sel_from_file
     /**
      * @brief Convert a feature_space/selected_features.txt into a phi_selected;
      * @details Read in the file to get the postfix expressions and regenerate the selected features using phi_0
diff --git a/src/utils/string_utils.hpp b/src/utils/string_utils.hpp
index 28a4ff59..5a3b4583 100644
--- a/src/utils/string_utils.hpp
+++ b/src/utils/string_utils.hpp
@@ -35,6 +35,7 @@ namespace str_utils
      */
     std::string latexify(const std::string str);
 
+    // DocString: str_utils_matlabify
     /**
      * @brief Convert a string into a matlab valid name
      *
-- 
GitLab