diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index d6989d37cc9e1811bb614f4db0974f6c99af0df9..81ae7133da33236ae19fddba0c43abc2932d100e 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3771,7 +3771,6 @@ DynamicModel::fillVarModelTable() const { map<string, vector<int>> eqnums, lhsr; map<string, vector<expr_t>> lhs_expr_tr; - map<string, vector<bool>> nonstationaryr; map<string, vector<set<pair<int, int>>>> rhsr; map<string, vector<string>> eqtags = var_model_table.getEqTags(); @@ -3780,7 +3779,6 @@ DynamicModel::fillVarModelTable() const vector<int> eqnumber, lhs; vector<expr_t> lhs_expr_t; vector<set<pair<int, int>>> rhs; - vector<bool> nonstationary; for (const auto & eqtag : it.second) { @@ -3800,17 +3798,6 @@ DynamicModel::fillVarModelTable() const exit(EXIT_FAILURE); } - bool nonstationary_bool = false; - for (const auto & equation_tag : equation_tags) - if (equation_tag.first == eqn) - if (equation_tag.second.first == "data_type" - && equation_tag.second.second == "nonstationary") - { - nonstationary_bool = true; - break; - } - nonstationary.push_back(nonstationary_bool); - equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::endogenous, lhs_set); equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::exogenous, lhs_tmp_set); equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::parameter, lhs_tmp_set); @@ -3852,13 +3839,11 @@ DynamicModel::fillVarModelTable() const lhsr[it.first] = lhs; lhs_expr_tr[it.first] = lhs_expr_t; rhsr[it.first] = rhs; - nonstationaryr[it.first] = nonstationary; } var_model_table.setEqNums(eqnums); var_model_table.setLhs(lhsr); var_model_table.setRhs(rhsr); var_model_table.setLhsExprT(lhs_expr_tr); - var_model_table.setNonstationary(nonstationaryr); // Fill AR Matrix map<string, map<tuple<int, int, int>, expr_t>> ARr; @@ -3955,7 +3940,6 @@ DynamicModel::fillTrendComponentModelTable() const { map<string, vector<int>> eqnums, trend_eqnums, lhsr; map<string, vector<expr_t>> lhs_expr_tr; - map<string, vector<bool>> nonstationaryr; map<string, vector<set<pair<int, int>>>> rhsr; map<string, vector<string>> eqtags = trend_component_model_table.getEqTags(); map<string, vector<string>> trend_eqtags = trend_component_model_table.getTargetEqTags(); @@ -3988,7 +3972,6 @@ DynamicModel::fillTrendComponentModelTable() const vector<int> eqnumber, lhs; vector<expr_t> lhs_expr_t; vector<set<pair<int, int>>> rhs; - vector<bool> nonstationary; for (const auto & eqtag : it.second) { @@ -4008,17 +3991,6 @@ DynamicModel::fillTrendComponentModelTable() const exit(EXIT_FAILURE); } - bool nonstationary_bool = false; - for (const auto & equation_tag : equation_tags) - if (equation_tag.first == eqn) - if (equation_tag.second.first == "data_type" - && equation_tag.second.second == "nonstationary") - { - nonstationary_bool = true; - break; - } - nonstationary.push_back(nonstationary_bool); - equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::endogenous, lhs_set); equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::exogenous, lhs_tmp_set); equations[eqn]->get_arg1()->collectDynamicVariables(SymbolType::parameter, lhs_tmp_set); @@ -4060,10 +4032,9 @@ DynamicModel::fillTrendComponentModelTable() const lhsr[it.first] = lhs; lhs_expr_tr[it.first] = lhs_expr_t; rhsr[it.first] = rhs; - nonstationaryr[it.first] = nonstationary; } trend_component_model_table.setRhs(rhsr); - trend_component_model_table.setVals(eqnums, trend_eqnums, lhsr, lhs_expr_tr, nonstationaryr); + trend_component_model_table.setVals(eqnums, trend_eqnums, lhsr, lhs_expr_tr); } void diff --git a/src/ModFile.cc b/src/ModFile.cc index b31183097ec878c1902423f730db19df4c89f75e..6ff0b55a47e48efb0a3a2d3ecdf981584f15fc3b 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -423,13 +423,15 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const { max_lag = trend_component_model_table.getMaxLag(aux_model_name) + 1; lhs = dynamic_model.getUndiffLHSForPac(aux_model_name, diff_subst_table); - nonstationary = trend_component_model_table.getNonstationary(aux_model_name); + // All lhs variables in a trend component model are nonstationary + nonstationary.insert(nonstationary.end(), trend_component_model_table.getDiff(aux_model_name).size(), true); } else if (var_model_table.isExistingVarModelName(aux_model_name)) { max_lag = var_model_table.getMaxLag(aux_model_name); lhs = var_model_table.getLhs(aux_model_name); - nonstationary = var_model_table.getNonstationary(aux_model_name); + // nonstationary variables in a VAR are those that are in diff + nonstationary = var_model_table.getDiff(aux_model_name); } else { diff --git a/src/SubModel.cc b/src/SubModel.cc index 4811af06dfce47ead05b37094d6a0091734da865..28ceb74106cd2d81d39d3c367e12de06729ce0c7 100644 --- a/src/SubModel.cc +++ b/src/SubModel.cc @@ -43,14 +43,12 @@ TrendComponentModelTable::addTrendComponentModel(string name_arg, void TrendComponentModelTable::setVals(map<string, vector<int>> eqnums_arg, map<string, vector<int>> target_eqnums_arg, - map<string, vector<int>> lhs_arg, - map<string, vector<expr_t>> lhs_expr_t_arg, map<string, vector<bool>> nonstationary_arg) + map<string, vector<int>> lhs_arg, map<string, vector<expr_t>> lhs_expr_t_arg) { eqnums = move(eqnums_arg); target_eqnums = move(target_eqnums_arg); lhs = move(lhs_arg); lhs_expr_t = move(lhs_expr_t_arg); - nonstationary = move(nonstationary_arg); for (const auto &it : eqnums) { @@ -149,13 +147,6 @@ TrendComponentModelTable::checkModelName(const string &name_arg) const } } -vector<bool> -TrendComponentModelTable::getNonstationary(const string &name_arg) const -{ - checkModelName(name_arg); - return nonstationary.find(name_arg)->second; -} - vector<int> TrendComponentModelTable::getNontrendLhs(const string &name_arg) const { @@ -317,8 +308,8 @@ TrendComponentModelTable::writeOutput(const string &basename, ostream &output) c output << (it >= 0 ? symbol_table.getTypeSpecificID(it) + 1 : -1) << " "; output << "];" << endl << "M_.trend_component." << name << ".nonstationary = ["; - for (auto it : nonstationary.at(name)) - output << (it ? "true" : "false") << " "; + for (size_t i = 0; i < diff.at(name).size(); i++) + output << "true "; output << "];" << endl; int i = 1; for (const auto &it : rhs.at(name)) @@ -473,13 +464,10 @@ VarModelTable::writeOutput(const string &basename, ostream &output) const for (const auto &it : diff.at(name)) output << (it ? "true" : "false") << " "; output << "];" << endl + << "M_.var." << name << ".nonstationary = M_.var." << name << ".diff;" << endl << "M_.var." << name << ".orig_diff_var = ["; for (auto it : orig_diff_var.at(name)) output << (it >= 0 ? symbol_table.getTypeSpecificID(it) + 1 : -1) << " "; - output << "];" << endl - << "M_.var." << name << ".nonstationary = ["; - for (auto it : nonstationary.at(name)) - output << (it ? "true" : "false") << " "; output << "];" << endl; int i = 1; for (const auto &it : rhs.at(name)) @@ -590,18 +578,19 @@ VarModelTable::setLhsExprT(map<string, vector<expr_t>> lhs_expr_t_arg) lhs_expr_t = move(lhs_expr_t_arg); } -void -VarModelTable::setNonstationary(map<string, vector<bool>> nonstationary_arg) -{ - nonstationary = move(nonstationary_arg); -} - map<string, vector<int>> VarModelTable::getEqNums() const { return eqnums; } +vector<bool> +VarModelTable::getDiff(const string &name_arg) const +{ + checkModelName(name_arg); + return diff.find(name_arg)->second; +} + vector<int> VarModelTable::getEqNums(const string &name_arg) const { @@ -656,13 +645,6 @@ VarModelTable::getLhs(const string &name_arg) const return lhs.find(name_arg)->second; } -vector<bool> -VarModelTable::getNonstationary(const string &name_arg) const -{ - checkModelName(name_arg); - return nonstationary.find(name_arg)->second; -} - vector<set<pair<int, int>>> VarModelTable::getRhs(const string &name_arg) const { diff --git a/src/SubModel.hh b/src/SubModel.hh index 79d4dba14287a330a485f5d006354d7462b14c47..76740893822f85b04749bb1f943bd237b6131045 100644 --- a/src/SubModel.hh +++ b/src/SubModel.hh @@ -42,7 +42,7 @@ private: map<string, vector<string>> eqtags, target_eqtags; map<string, vector<int>> eqnums, target_eqnums, nontarget_eqnums, max_lags, lhs, target_lhs, nontarget_lhs, orig_diff_var; map<string, vector<set<pair<int, int>>>> rhs; - map<string, vector<bool>> diff, nonstationary; + map<string, vector<bool>> diff; map<string, vector<expr_t>> lhs_expr_t; map<string, vector<int>> target_vars; map<string, map<tuple<int, int, int>, expr_t>> AR; // AR: name -> (eqn, lag, lhs_symb_id) -> expr_t @@ -72,13 +72,12 @@ public: vector<int> getOrigDiffVar(const string &name_arg) const; map<string, vector<int>> getNonTargetEqNums() const; vector<int> getNonTargetEqNums(const string &name_arg) const; - vector<bool> getNonstationary(const string &name_arg) const; vector<int> getNontrendLhs(const string &name_arg) const; vector<int> getTargetLhs(const string &name_arg) const; void setVals(map<string, vector<int>> eqnums_arg, map<string, vector<int>> target_eqnums_arg, map<string, vector<int>> lhs_arg, - map<string, vector<expr_t>> lhs_expr_t_arg, map<string, vector<bool>> nonstationary_arg); + map<string, vector<expr_t>> lhs_expr_t_arg); void setRhs(map<string, vector<set<pair<int, int>>>> rhs_arg); void setMaxLags(map<string, vector<int>> max_lags_arg); void setDiff(map<string, vector<bool>> diff_arg); @@ -120,7 +119,7 @@ private: map<string, vector<string>> eqtags; map<string, vector<int>> eqnums, max_lags, lhs, orig_diff_var; map<string, vector<set<pair<int, int>>>> rhs; - map<string, vector<bool>> diff, nonstationary; + map<string, vector<bool>> diff; map<string, vector<expr_t>> lhs_expr_t; map<string, map<tuple<int, int, int>, expr_t>> AR; // AR: name -> (eqn, lag, lhs_symb_id) -> param_expr_t public: @@ -136,11 +135,11 @@ public: map<string, vector<string>> getEqTags() const; vector<string> getEqTags(const string &name_arg) const; map<string, vector<int>> getEqNums() const; + vector<bool> getDiff(const string &name_arg) const; vector<int> getEqNums(const string &name_arg) const; vector<int> getMaxLags(const string &name_arg) const; int getMaxLag(const string &name_arg) const; vector<int> getLhs(const string &name_arg) const; - vector<bool> getNonstationary(const string &name_arg) const; map<string, pair<SymbolList, int>> getSymbolListAndOrder() const; vector<set<pair<int, int>>> getRhs(const string &name_arg) const; vector<expr_t> getLhsExprT(const string &name_arg) const; @@ -149,7 +148,6 @@ public: void setLhs(map<string, vector<int>> lhs_arg); void setRhs(map<string, vector<set<pair<int, int>>>> rhs_arg); void setLhsExprT(map<string, vector<expr_t>> lhs_expr_t_arg); - void setNonstationary(map<string, vector<bool>> nonstationary_arg); void setDiff(map<string, vector<bool>> diff_arg); void setMaxLags(map<string, vector<int>> max_lags_arg); void setOrigDiffVar(map<string, vector<int>> orig_diff_var_arg);