From a406c185984db0ba2ada71bed8ce8e32ad0bcab7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Adjemia=20=28Scylla=29?= <stepan@dynare.org>
Date: Wed, 22 Aug 2018 16:50:01 +0200
Subject: [PATCH] Allow trend_component_model in var_expectations.

---
 src/ComputingTasks.cc |  2 +-
 src/DynareBison.yy    |  4 ++--
 src/ModFile.cc        | 20 +++++++++++++++-----
 src/ParsingDriver.cc  |  4 ++--
 4 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc
index ead7e744..36525e8c 100644
--- a/src/ComputingTasks.cc
+++ b/src/ComputingTasks.cc
@@ -4863,7 +4863,7 @@ void
 VarExpectationModelStatement::writeOutput(ostream &output, const string &basename, bool minimal_workspace) const
 {
   string mstruct = "M_.var_expectation." + model_name;
-  output << mstruct << ".var_model_name = '" << var_model_name << "';" << endl
+  output << mstruct << ".auxiliary_model_name = '" << var_model_name << "';" << endl
          << mstruct << ".horizon = " << horizon << ';' << endl
          << mstruct << ".variable = '" << variable << "';" << endl
          << mstruct << ".variable_id = " << symbol_table.getTypeSpecificID(variable)+1 << ";" << endl;
diff --git a/src/DynareBison.yy b/src/DynareBison.yy
index ba29f096..6093bc7a 100644
--- a/src/DynareBison.yy
+++ b/src/DynareBison.yy
@@ -410,8 +410,8 @@ var_expectation_model_options_list : var_expectation_model_option
 
 var_expectation_model_option : VARIABLE EQUAL symbol
                                { driver.option_str("variable", $3); }
-                             | VAR_MODEL_NAME EQUAL symbol
-                               { driver.option_str("var_model_name", $3); }
+                             | AUXILIARY_MODEL_NAME EQUAL symbol
+                               { driver.option_str("auxiliary_model_name", $3); }
                              | HORIZON EQUAL INT_NUMBER
                                { driver.option_num("horizon", $3); }
                              | HORIZON EQUAL integer_range_w_inf
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 0b07da93..fc8d1542 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -514,18 +514,28 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const
       if (!vems)
         continue;
 
+      int max_lag;
+      vector<int> lhs;
       auto &model_name = vems->model_name;
-      if (!var_model_table.isExistingVarModelName(vems->var_model_name))
+      if (var_model_table.isExistingVarModelName(vems->var_model_name))
+        {
+          max_lag = var_model_table.getMaxLag(vems->var_model_name);
+          lhs = var_model_table.getLhs(vems->var_model_name);
+        }
+      else if (trend_component_model_table.isExistingTrendComponentModelName(vems->var_model_name))
+        {
+          max_lag = trend_component_model_table.getMaxLag(vems->var_model_name);
+          lhs = trend_component_model_table.getLhs(vems->var_model_name);
+        }
+      else
         {
           cerr << "ERROR: var_expectation_model " << model_name
-               << " refers to nonexistent " << vems->var_model_name << " var_model" << endl;
+               << " refers to nonexistent auxiliary model " << vems->var_model_name << endl;
           exit(EXIT_FAILURE);
         }
 
-      /* Create auxiliary parameters and the expression to be substituted to
+      /* Create auxiliary parameters and the expression to be substituted into
          the var_expectations statement */
-      int max_lag = var_model_table.getMaxLag(vems->var_model_name);
-      vector<int> lhs = var_model_table.getLhs(vems->var_model_name);
       auto subst_expr = dynamic_model.Zero;
       for (int lag = 0; lag < max_lag; lag++)
         for (auto variable : lhs)
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 80bc0642..fe4e8184 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -3268,9 +3268,9 @@ ParsingDriver::var_expectation_model()
   auto variable = it->second;
   check_symbol_is_endogenous(variable);
 
-  it = options_list.string_options.find("var_model_name");
+  it = options_list.string_options.find("auxiliary_model_name");
   if (it == options_list.string_options.end())
-    error("You must pass the var_model_name option to the var_expectation_model statement.");
+    error("You must pass the auxiliary_model_name option to the var_expectation_model statement.");
   auto var_model_name = it->second;
 
   it = options_list.string_options.find("model_name");
-- 
GitLab