From a406c185984db0ba2ada71bed8ce8e32ad0bcab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Adjemia=20=28Scylla=29?= 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 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 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");