From 240f5b8104c52e0816e3a7809ba75100ac555a43 Mon Sep 17 00:00:00 2001
From: Thomas <purcell@fhi-berlin.mpg.de>
Date: Tue, 14 Sep 2021 18:14:47 +0200
Subject: [PATCH] Correct Order of postfix building

utils loaded them in the wrong order
---
 src/feature_creation/node/utils.cpp           | 30 +++++++++----------
 .../test_gen_feature_space_from_file.py       |  4 +--
 ...st_gen_feature_space_selected_from_file.py |  4 +--
 3 files changed, 19 insertions(+), 19 deletions(-)

diff --git a/src/feature_creation/node/utils.cpp b/src/feature_creation/node/utils.cpp
index cf732d43..27377d23 100644
--- a/src/feature_creation/node/utils.cpp
+++ b/src/feature_creation/node/utils.cpp
@@ -74,16 +74,16 @@ node_ptr str2node::postfix2node(const std::string postfix_expr, const std::vecto
             if(op_terms[0] == "add")
             {
                 #ifndef PARAMETERIZE
-                stack[stack.size() - 2] = std::make_shared<AddNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                stack[stack.size() - 2] = std::make_shared<AddNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 #else
                 if(op_terms.size() > 1)
                 {
-                    stack[stack.size() - 2] = std::make_shared<AddParamNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<AddParamNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                     set_parameters(stack[stack.size() - 2], op_terms);
                 }
                 else
                 {
-                    stack[stack.size() - 2] = std::make_shared<AddNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<AddNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 }
                 #endif
                 stack.pop_back();
@@ -91,16 +91,16 @@ node_ptr str2node::postfix2node(const std::string postfix_expr, const std::vecto
             else if(op_terms[0] == "sub")
             {
                 #ifndef PARAMETERIZE
-                stack[stack.size() - 2] = std::make_shared<SubNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                stack[stack.size() - 2] = std::make_shared<SubNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 #else
                 if(op_terms.size() > 1)
                 {
-                    stack[stack.size() - 2] = std::make_shared<SubParamNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<SubParamNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                     set_parameters(stack[stack.size() - 2], op_terms);
                 }
                 else
                 {
-                    stack[stack.size() - 2] = std::make_shared<SubNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<SubNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 }
                 #endif
                 stack.pop_back();
@@ -108,16 +108,16 @@ node_ptr str2node::postfix2node(const std::string postfix_expr, const std::vecto
             else if(op_terms[0] == "abd")
             {
                 #ifndef PARAMETERIZE
-                stack[stack.size() - 2] = std::make_shared<AbsDiffNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                stack[stack.size() - 2] = std::make_shared<AbsDiffNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 #else
                 if(op_terms.size() > 1)
                 {
-                    stack[stack.size() - 2] = std::make_shared<AbsDiffParamNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<AbsDiffParamNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                     set_parameters(stack[stack.size() - 2], op_terms);
                 }
                 else
                 {
-                    stack[stack.size() - 2] = std::make_shared<AbsDiffNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<AbsDiffNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 }
                 #endif
                 stack.pop_back();
@@ -125,16 +125,16 @@ node_ptr str2node::postfix2node(const std::string postfix_expr, const std::vecto
             else if(op_terms[0] == "mult")
             {
                 #ifndef PARAMETERIZE
-                stack[stack.size() - 2] = std::make_shared<MultNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                stack[stack.size() - 2] = std::make_shared<MultNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 #else
                 if(op_terms.size() > 1)
                 {
-                    stack[stack.size() - 2] = std::make_shared<MultParamNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<MultParamNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                     set_parameters(stack[stack.size() - 2], op_terms);
                 }
                 else
                 {
-                    stack[stack.size() - 2] = std::make_shared<MultNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<MultNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 }
                 #endif
                 stack.pop_back();
@@ -142,16 +142,16 @@ node_ptr str2node::postfix2node(const std::string postfix_expr, const std::vecto
             else if(op_terms[0] == "div")
             {
                 #ifndef PARAMETERIZE
-                stack[stack.size() - 2] = std::make_shared<DivNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                stack[stack.size() - 2] = std::make_shared<DivNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 #else
                 if(op_terms.size() > 1)
                 {
-                    stack[stack.size() - 2] = std::make_shared<DivParamNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<DivParamNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                     set_parameters(stack[stack.size() - 2], op_terms);
                 }
                 else
                 {
-                    stack[stack.size() - 2] = std::make_shared<DivNode>(stack[stack.size() - 2], stack[stack.size() - 1], feat_ind);
+                    stack[stack.size() - 2] = std::make_shared<DivNode>(stack[stack.size() - 1], stack[stack.size() - 2], feat_ind);
                 }
                 #endif
                 stack.pop_back();
diff --git a/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_from_file.py b/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_from_file.py
index 07b038da..cc39c5a3 100644
--- a/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_from_file.py
+++ b/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_from_file.py
@@ -48,13 +48,13 @@ def test_gen_feature_space_from_file():
         f"{parent}/phi.txt", phi_0, prop, task_sizes_train, "regression", 1, 1.0, []
     )
     feat_space.sis(prop)
-    assert feat_space.phi_selected[0].postfix_expr == "1|0|add|sq"
+    assert feat_space.phi_selected[0].postfix_expr == "0|1|add|sq"
 
     feat_space = FeatureSpace(
         f"{parent}/phi.txt", phi_0, list(prop), task_sizes_train, "regression", 1, 1.0
     )
     feat_space.sis(prop)
-    assert feat_space.phi_selected[0].postfix_expr == "1|0|add|sq"
+    assert feat_space.phi_selected[0].postfix_expr == "0|1|add|sq"
 
 
 if __name__ == "__main__":
diff --git a/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_selected_from_file.py b/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_selected_from_file.py
index cda96a5a..327b98b2 100644
--- a/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_selected_from_file.py
+++ b/tests/pytest/test_feature_creation/test_feature_space/test_gen_feature_space_selected_from_file.py
@@ -28,8 +28,8 @@ def test_gen_feature_space_from_file():
         str(parent / "selected_features.txt"), inputs.phi_0, []
     )
 
-    assert phi_sel[0].postfix_expr == "3|2|add|3|abs|add"
-    assert phi_sel[1].postfix_expr == "1|0|div|0|div"
+    assert phi_sel[0].postfix_expr == "3|abs|2|3|add|add"
+    assert phi_sel[1].postfix_expr == "0|0|1|div|div"
 
 
 if __name__ == "__main__":
-- 
GitLab