diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 463e093e56f96fb2e6fc98c5dfce130f1be74460..effd4a81975fbfc1171019746d0ec74146665eb9 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3342,15 +3342,14 @@ DynamicModel::fillVarModelTable() const map<string, vector<int>> eqnums, lhsr; map<string, vector<expr_t>> lhs_expr_tr; map<string, vector<set<pair<int, int>>>> rhsr; - map<string, vector<string>> eqtags = var_model_table.getEqTags(); - for (const auto &it : eqtags) + for (const auto &[model_name, eqtags] : var_model_table.getEqTags()) { vector<int> eqnumber, lhs; vector<expr_t> lhs_expr_t; vector<set<pair<int, int>>> rhs; - for (const auto &eqtag : it.second) + for (const auto &eqtag : eqtags) { set<pair<int, int>> lhs_set, lhs_tmp_set, rhs_set; int eqn; @@ -3394,10 +3393,10 @@ DynamicModel::fillVarModelTable() const equations[eqn]->arg2->collectDynamicVariables(SymbolType::endogenous, rhs_set); rhs.push_back(rhs_set); } - eqnums[it.first] = eqnumber; - lhsr[it.first] = lhs; - lhs_expr_tr[it.first] = lhs_expr_t; - rhsr[it.first] = rhs; + eqnums[model_name] = eqnumber; + lhsr[model_name] = lhs; + lhs_expr_tr[model_name] = lhs_expr_t; + rhsr[model_name] = rhs; } var_model_table.setEqNums(eqnums); var_model_table.setLhs(lhsr); @@ -3413,12 +3412,12 @@ DynamicModel::fillVarModelTableFromOrigModel() const { map<string, vector<int>> lags, orig_diff_var; map<string, vector<bool>> diff; - for (const auto &it : var_model_table.getEqNums()) + for (const auto &[model_name, eqns] : var_model_table.getEqNums()) { set<expr_t> lhs; vector<int> orig_diff_var_vec; vector<bool> diff_vec; - for (auto eqn : it.second) + for (auto eqn : eqns) { // Perform some sanity checks on the RHS string eqtag = equation_tags.getTagValueByEqnAndKey(eqn, "name"); @@ -3463,7 +3462,7 @@ DynamicModel::fillVarModelTableFromOrigModel() const } - if (it.second.size() != lhs.size()) + if (eqns.size() != lhs.size()) { cerr << "ERROR: The LHS variables of the VAR model are not unique" << endl; exit(EXIT_FAILURE); @@ -3477,11 +3476,11 @@ DynamicModel::fillVarModelTableFromOrigModel() const } vector<int> max_lag; - for (auto eqn : it.second) + for (auto eqn : eqns) max_lag.push_back(equations[eqn]->arg2->VarMaxLag(lhs_lag_equiv)); - lags[it.first] = max_lag; - diff[it.first] = diff_vec; - orig_diff_var[it.first] = orig_diff_var_vec; + lags[model_name] = max_lag; + diff[model_name] = diff_vec; + orig_diff_var[model_name] = orig_diff_var_vec; } var_model_table.setDiff(diff); var_model_table.setMaxLags(lags); @@ -3492,20 +3491,20 @@ map<string, map<tuple<int, int, int>, expr_t>> DynamicModel::computeAutoregressiveMatrices(bool is_var) const { map<string, map<tuple<int, int, int>, expr_t>> ARr; - auto eqnums = is_var ? + const auto &all_eqnums = is_var ? var_model_table.getEqNums() : trend_component_model_table.getNonTargetEqNums(); - for (const auto &it : eqnums) + for (const auto &[model_name, eqns] : all_eqnums) { int i = 0; map<tuple<int, int, int>, expr_t> AR; - vector<int> lhs = is_var ? - var_model_table.getLhsOrigIds(it.first) : trend_component_model_table.getNonTargetLhs(it.first); - for (auto eqn : it.second) + const vector<int> &lhs = is_var ? var_model_table.getLhsOrigIds(model_name) + : trend_component_model_table.getNonTargetLhs(model_name); + for (auto eqn : eqns) { auto bopn = dynamic_cast<BinaryOpNode *>(equations[eqn]->arg2); bopn->fillAutoregressiveRow(i++, lhs, AR); } - ARr[it.first] = AR; + ARr[model_name] = AR; } return ARr; } @@ -3516,12 +3515,10 @@ DynamicModel::fillTrendComponentModelTable() const map<string, vector<int>> eqnums, trend_eqnums, lhsr; map<string, vector<expr_t>> lhs_expr_tr; 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(); - for (const auto &it : trend_eqtags) + for (const auto &[model_name, eqtags] : trend_component_model_table.getTargetEqTags()) { vector<int> trend_eqnumber; - for (const auto &eqtag : it.second) + for (const auto &eqtag : eqtags) { int eqn; try @@ -3535,16 +3532,16 @@ DynamicModel::fillTrendComponentModelTable() const } trend_eqnumber.push_back(eqn); } - trend_eqnums[it.first] = trend_eqnumber; + trend_eqnums[model_name] = trend_eqnumber; } - for (const auto &it : eqtags) + for (const auto &[model_name, eqtags] : trend_component_model_table.getEqTags()) { vector<int> eqnumber, lhs; vector<expr_t> lhs_expr_t; vector<set<pair<int, int>>> rhs; - for (const auto &eqtag : it.second) + for (const auto &eqtag : eqtags) { set<pair<int, int>> lhs_set, lhs_tmp_set, rhs_set; int eqn; @@ -3588,10 +3585,10 @@ DynamicModel::fillTrendComponentModelTable() const equations[eqn]->arg2->collectDynamicVariables(SymbolType::endogenous, rhs_set); rhs.push_back(rhs_set); } - eqnums[it.first] = eqnumber; - lhsr[it.first] = lhs; - lhs_expr_tr[it.first] = lhs_expr_t; - rhsr[it.first] = rhs; + eqnums[model_name] = eqnumber; + lhsr[model_name] = lhs; + lhs_expr_tr[model_name] = lhs_expr_t; + rhsr[model_name] = rhs; } trend_component_model_table.setRhs(rhsr); trend_component_model_table.setVals(eqnums, trend_eqnums, lhsr, lhs_expr_tr); @@ -3602,16 +3599,16 @@ DynamicModel::computeErrorComponentMatrices(const ExprNode::subst_table_t &diff_ { map<string, map<tuple<int, int, int>, expr_t>> A0r, A0starr; - for (const auto &it : trend_component_model_table.getEqNums()) + for (const auto &[model_name, eqns] : trend_component_model_table.getEqNums()) { int i = 0; map<tuple<int, int, int>, expr_t> A0, A0star; - vector<int> target_lhs = trend_component_model_table.getTargetLhs(it.first); - vector<int> nontarget_eqnums = trend_component_model_table.getNonTargetEqNums(it.first); - vector<int> undiff_nontarget_lhs = getUndiffLHSForPac(it.first, diff_subst_table); + vector<int> target_lhs = trend_component_model_table.getTargetLhs(model_name); + vector<int> nontarget_eqnums = trend_component_model_table.getNonTargetEqNums(model_name); + vector<int> undiff_nontarget_lhs = getUndiffLHSForPac(model_name, diff_subst_table); vector<int> parsed_undiff_nontarget_lhs; - for (auto eqn : it.second) + for (auto eqn : eqns) { if (find(nontarget_eqnums.begin(), nontarget_eqnums.end(), eqn) != nontarget_eqnums.end()) parsed_undiff_nontarget_lhs.push_back(undiff_nontarget_lhs.at(i)); @@ -3619,11 +3616,11 @@ DynamicModel::computeErrorComponentMatrices(const ExprNode::subst_table_t &diff_ } i = 0; - for (auto eqn : it.second) + for (auto eqn : eqns) if (find(nontarget_eqnums.begin(), nontarget_eqnums.end(), eqn) != nontarget_eqnums.end()) equations[eqn]->arg2->fillErrorCorrectionRow(i++, parsed_undiff_nontarget_lhs, target_lhs, A0, A0star); - A0r[it.first] = A0; - A0starr[it.first] = A0star; + A0r[model_name] = A0; + A0starr[model_name] = A0star; } return { A0r, A0starr }; @@ -3634,12 +3631,12 @@ DynamicModel::fillTrendComponentModelTableFromOrigModel() const { map<string, vector<int>> lags, orig_diff_var; map<string, vector<bool>> diff; - for (const auto &it : trend_component_model_table.getEqNums()) + for (const auto &[model_name, eqns] : trend_component_model_table.getEqNums()) { set<expr_t> lhs; vector<int> orig_diff_var_vec; vector<bool> diff_vec; - for (auto eqn : it.second) + for (auto eqn : eqns) { // Perform some sanity checks on the RHS string eqtag = equation_tags.getTagValueByEqnAndKey(eqn, "name"); @@ -3683,10 +3680,9 @@ DynamicModel::fillTrendComponentModelTableFromOrigModel() const } else orig_diff_var_vec.push_back(-1); - } - if (it.second.size() != lhs.size()) + if (eqns.size() != lhs.size()) { cerr << "ERROR: The LHS variables of the trend component model are not unique" << endl; exit(EXIT_FAILURE); @@ -3700,11 +3696,11 @@ DynamicModel::fillTrendComponentModelTableFromOrigModel() const } vector<int> max_lag; - for (auto eqn : it.second) + for (auto eqn : eqns) max_lag.push_back(equations[eqn]->arg2->VarMaxLag(lhs_lag_equiv)); - lags[it.first] = max_lag; - diff[it.first] = diff_vec; - orig_diff_var[it.first] = orig_diff_var_vec; + lags[model_name] = max_lag; + diff[model_name] = diff_vec; + orig_diff_var[model_name] = orig_diff_var_vec; } trend_component_model_table.setDiff(diff); trend_component_model_table.setMaxLags(lags); diff --git a/src/EquationTags.hh b/src/EquationTags.hh index 78d1db71c03c424f2b85e3803db4a9c00010e82b..a8024eea3fbdf09ebc241460a274c9b707fb6a35 100644 --- a/src/EquationTags.hh +++ b/src/EquationTags.hh @@ -85,7 +85,7 @@ public: int getEqnByTag(const string &key, const string &value) const; //! Get the tag value given the equation number and key - inline string getTagValueByEqnAndKey(const int eqn, const string &key) const + inline string getTagValueByEqnAndKey(int eqn, const string &key) const { return exists(eqn, key) ? eqn_tags.at(eqn).at(key) : ""; }