From 67f4777ac35d04ced18e8ce60c0020b5228ef659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 7 Jul 2021 15:08:17 +0200 Subject: [PATCH] Remove support for obsolete syntax: var_model(order = 2) X Y Z; --- src/CodeInterpreter.hh | 4 +- src/DynamicModel.cc | 53 ----------------- src/DynamicModel.hh | 4 -- src/DynareBison.yy | 11 ---- src/ExprNode.cc | 130 ----------------------------------------- src/ExprNode.hh | 22 ------- src/ModFile.cc | 2 - src/ParsingDriver.cc | 36 +----------- src/ParsingDriver.hh | 2 - src/SubModel.cc | 36 +++--------- src/SubModel.hh | 5 +- src/SymbolList.cc | 5 +- src/SymbolTable.cc | 23 -------- src/SymbolTable.hh | 7 +-- 14 files changed, 18 insertions(+), 322 deletions(-) diff --git a/src/CodeInterpreter.hh b/src/CodeInterpreter.hh index c25a4899..832c6e85 100644 --- a/src/CodeInterpreter.hh +++ b/src/CodeInterpreter.hh @@ -133,7 +133,9 @@ enum class SymbolType statementDeclaredVariable = 14, //!< Local variable assigned within a Statement (see subsample statement for example) logTrend = 15, //!< Log-trend variable unusedEndogenous = 16, //!< Type to mark unused endogenous variables when `nostrict` option is passed - endogenousVAR = 17, //!< Variables declared in a var_model statement + + // Value 17 is unused for the time being (but could be reused) + epilogue = 18, //!< Variables created in epilogue block excludedVariable = 19 //!< Type to use when an equation is excluded via include/exclude_eqs and the LHS variable is not used elsewhere in the model }; diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index effd4a81..fa4cfb86 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3716,59 +3716,6 @@ DynamicModel::fillTrendComponentModelTableAREC(const ExprNode::subst_table_t &di trend_component_model_table.setA0(A0r, A0starr); } -void -DynamicModel::addEquationsForVar() -{ - if (var_model_table.empty()) - return; - auto var_symbol_list_and_order = var_model_table.getSymbolListAndOrder(); - - // List of endogenous variables and the minimum lag value that must exist in the model equations - map<string, int> var_endos_and_lags, model_endos_and_lags; - for (const auto &it : var_symbol_list_and_order) - for (auto &equation : equations) - if (equation->isVarModelReferenced(it.first)) - { - vector<string> symbol_list = it.second.first.get_symbols(); - int order = it.second.second; - for (auto &it1 : symbol_list) - if (order > 2) - if (var_endos_and_lags.find(it1) != var_endos_and_lags.end()) - var_endos_and_lags[it1] = min(var_endos_and_lags[it1], -order); - else - var_endos_and_lags[it1] = -order; - break; - } - - if (var_endos_and_lags.empty()) - return; - - // Ensure that the minimum lag value exists in the model equations. - // If not, add an equation for it - for (auto &equation : equations) - equation->getEndosAndMaxLags(model_endos_and_lags); - - int count = 0; - for (auto &it : var_endos_and_lags) - if (auto it2 = model_endos_and_lags.find(it.first); - it2 == model_endos_and_lags.end()) - cerr << "WARNING: Variable used in VAR that is not used in the model: " << it.first << endl; - else - if (it.second < it2->second) - { - int symb_id = symbol_table.getID(it.first); - expr_t newvar = AddVariable(symb_id, it.second); - expr_t auxvar = AddVariable(symbol_table.addVarModelEndoLagAuxiliaryVar(symb_id, it.second, newvar), 0); - addEquation(AddEqual(newvar, auxvar), -1); - addAuxEquation(AddEqual(newvar, auxvar)); - count++; - } - - if (count > 0) - cout << "Accounting for var_model lags not in model block: added " - << count << " auxiliary variables and equations." << endl; -} - vector<int> DynamicModel::getUndiffLHSForPac(const string &aux_model_name, const ExprNode::subst_table_t &diff_subst_table) const diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index ffe5e1a2..84fad95e 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -372,10 +372,6 @@ public: //! in the trend_component model void updateVarAndTrendModel() const; - //! Add aux equations (and aux variables) for variables declared in var_model - //! at max order if they don't already exist - void addEquationsForVar(); - //! Get Pac equation parameter info map<pair<string, string>, pair<string, int>> walkPacParameters(const string &name); //! Add var_model info to pac_expectation nodes diff --git a/src/DynareBison.yy b/src/DynareBison.yy index 78ba1a46..cdade2eb 100644 --- a/src/DynareBison.yy +++ b/src/DynareBison.yy @@ -378,23 +378,13 @@ var : VAR var_list ';' ; var_model : VAR_MODEL '(' var_model_options_list ')' ';' { driver.var_model(); } - | VAR_MODEL '(' var_model_options_list ')' var_symbol_list ';' { driver.var_model(); } ; ; -var_symbol_list : var_symbol_list symbol - { driver.declare_var_endogenous($2); } - | var_symbol_list COMMA symbol - { driver.declare_var_endogenous($3); } - | symbol - { driver.declare_var_endogenous($1); } - ; - var_model_options_list : var_model_options_list COMMA var_model_options | var_model_options ; var_model_options : o_var_name - | o_var_order | o_var_eq_tags ; @@ -3236,7 +3226,6 @@ o_pac_steady_state_growth : STEADY_STATE_GROWTH EQUAL signed_number { driver.set | STEADY_STATE_GROWTH EQUAL symbol { driver.set_pac_steady_state_growth($3); } ; o_var_name : MODEL_NAME EQUAL symbol { driver.option_str("var.model_name", $3); }; -o_var_order : ORDER EQUAL INT_NUMBER { driver.option_num("var.order", $3); }; o_series : SERIES EQUAL symbol { driver.option_str("series", $3); }; o_datafile : DATAFILE EQUAL filename { driver.option_str("datafile", $3); }; o_filename : FILENAME EQUAL filename { driver.option_str("filename", $3); }; diff --git a/src/ExprNode.cc b/src/ExprNode.cc index e7acf59f..9982fcdd 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -286,11 +286,6 @@ ExprNode::isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_ar return false; } -void -ExprNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ -} - void ExprNode::fillErrorCorrectionRow(int eqn, const vector<int> &nontarget_lhs, @@ -674,11 +669,6 @@ NumConstNode::isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int la return false; } -void -NumConstNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ -} - bool NumConstNode::containsPacExpectation(const string &pac_model_name) const { @@ -715,12 +705,6 @@ NumConstNode::isParamTimesEndogExpr() const return false; } -bool -NumConstNode::isVarModelReferenced(const string &model_info_name) const -{ - return false; -} - expr_t NumConstNode::substituteStaticAuxiliaryVariable() const { @@ -774,7 +758,6 @@ VariableNode::prepareForDerivation() // Such a variable is never derived break; case SymbolType::externalFunction: - case SymbolType::endogenousVAR: case SymbolType::epilogue: cerr << "VariableNode::prepareForDerivation: impossible case" << endl; exit(EXIT_FAILURE); @@ -813,7 +796,6 @@ VariableNode::computeDerivative(int deriv_id) cerr << "unusedEndogenous is not derivable" << endl; exit(EXIT_FAILURE); case SymbolType::externalFunction: - case SymbolType::endogenousVAR: case SymbolType::epilogue: case SymbolType::excludedVariable: cerr << "VariableNode::computeDerivative: Impossible case!" << endl; @@ -872,9 +854,6 @@ VariableNode::writeJsonAST(ostream &output) const case SymbolType::unusedEndogenous: output << "unusedEndogenous"; break; - case SymbolType::endogenousVAR: - output << "endogenousVAR"; - break; case SymbolType::epilogue: output << "epilogue"; break; @@ -1149,7 +1128,6 @@ VariableNode::writeOutput(ostream &output, ExprNodeOutputType output_type, case SymbolType::trend: case SymbolType::logTrend: case SymbolType::statementDeclaredVariable: - case SymbolType::endogenousVAR: case SymbolType::excludedVariable: cerr << "VariableNode::writeOutput: Impossible case" << endl; exit(EXIT_FAILURE); @@ -1332,7 +1310,6 @@ VariableNode::getChainRuleDerivative(int deriv_id, const map<int, BinaryOpNode * cerr << "unusedEndogenous is not derivable" << endl; exit(EXIT_FAILURE); case SymbolType::externalFunction: - case SymbolType::endogenousVAR: case SymbolType::epilogue: case SymbolType::excludedVariable: cerr << "VariableNode::getChainRuleDerivative: Impossible case" << endl; @@ -1374,7 +1351,6 @@ VariableNode::computeXrefs(EquationInfo &ei) const case SymbolType::statementDeclaredVariable: case SymbolType::unusedEndogenous: case SymbolType::externalFunction: - case SymbolType::endogenousVAR: case SymbolType::epilogue: case SymbolType::excludedVariable: break; @@ -1936,29 +1912,6 @@ VariableNode::isParamTimesEndogExpr() const return false; } -bool -VariableNode::isVarModelReferenced(const string &model_info_name) const -{ - if (get_type() == SymbolType::modelLocalVariable) - return datatree.getLocalVariable(symb_id)->isVarModelReferenced(model_info_name); - - return false; -} - -void -VariableNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ - if (get_type() == SymbolType::modelLocalVariable) - return datatree.getLocalVariable(symb_id)->getEndosAndMaxLags(model_endos_and_lags); - - if (get_type() == SymbolType::endogenous) - if (string varname = datatree.symbol_table.getName(symb_id); - model_endos_and_lags.find(varname) == model_endos_and_lags.end()) - model_endos_and_lags[varname] = min(model_endos_and_lags[varname], lag); - else - model_endos_and_lags[varname] = lag; -} - expr_t VariableNode::replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const { @@ -3703,18 +3656,6 @@ UnaryOpNode::isParamTimesEndogExpr() const return arg->isParamTimesEndogExpr(); } -bool -UnaryOpNode::isVarModelReferenced(const string &model_info_name) const -{ - return arg->isVarModelReferenced(model_info_name); -} - -void -UnaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ - arg->getEndosAndMaxLags(model_endos_and_lags); -} - expr_t UnaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -5524,20 +5465,6 @@ BinaryOpNode::replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree); } -bool -BinaryOpNode::isVarModelReferenced(const string &model_info_name) const -{ - return arg1->isVarModelReferenced(model_info_name) - || arg2->isVarModelReferenced(model_info_name); -} - -void -BinaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ - arg1->getEndosAndMaxLags(model_endos_and_lags); - arg2->getEndosAndMaxLags(model_endos_and_lags); -} - expr_t BinaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -6400,22 +6327,6 @@ TrinaryOpNode::isParamTimesEndogExpr() const || arg3->isParamTimesEndogExpr(); } -bool -TrinaryOpNode::isVarModelReferenced(const string &model_info_name) const -{ - return arg1->isVarModelReferenced(model_info_name) - || arg2->isVarModelReferenced(model_info_name) - || arg3->isVarModelReferenced(model_info_name); -} - -void -TrinaryOpNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ - arg1->getEndosAndMaxLags(model_endos_and_lags); - arg2->getEndosAndMaxLags(model_endos_and_lags); - arg3->getEndosAndMaxLags(model_endos_and_lags); -} - expr_t TrinaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -6884,23 +6795,6 @@ AbstractExternalFunctionNode::isParamTimesEndogExpr() const return false; } -bool -AbstractExternalFunctionNode::isVarModelReferenced(const string &model_info_name) const -{ - for (auto argument : arguments) - if (!argument->isVarModelReferenced(model_info_name)) - return true; - return false; -} - -void -AbstractExternalFunctionNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ - for (auto argument : arguments) - argument->getEndosAndMaxLags(model_endos_and_lags); -} - - void AbstractExternalFunctionNode::computeSubExprContainingVariable(int symb_id, int lag, set<expr_t> &contain_var) const { @@ -8345,19 +8239,6 @@ VarExpectationNode::isInStaticForm() const exit(EXIT_FAILURE); } -bool -VarExpectationNode::isVarModelReferenced(const string &model_info_name) const -{ - /* TODO: should check here whether the var_expectation_model is equal to the - argument; we probably need a VarModelTable class to do that elegantly */ - return false; -} - -void -VarExpectationNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ -} - bool VarExpectationNode::isParamTimesEndogExpr() const { @@ -8716,17 +8597,6 @@ PacExpectationNode::isInStaticForm() const return false; } -bool -PacExpectationNode::isVarModelReferenced(const string &model_info_name) const -{ - return model_name == model_info_name; -} - -void -PacExpectationNode::getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const -{ -} - expr_t PacExpectationNode::substituteStaticAuxiliaryVariable() const { diff --git a/src/ExprNode.hh b/src/ExprNode.hh index dfa9755c..53446c2f 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -624,9 +624,6 @@ public: //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const = 0; - //! Returns true if model_info_name is referenced by a VarExpectationNode - virtual bool isVarModelReferenced(const string &model_info_name) const = 0; - //! Matches a linear combination of variables, where scalars can be constant*parameter /*! Returns a list of (variable_id, lag, param_id, constant) corresponding to the terms in the expression. When there is no @@ -662,9 +659,6 @@ public: //! Returns true if PacExpectationNode encountered virtual bool containsPacExpectation(const string &pac_model_name = "") const = 0; - //! Fills map - virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const = 0; - //! Decompose an expression into its additive terms /*! Returns a list of terms, with their sign (either 1 or -1, depending on whether the terms appears with a plus or a minus). @@ -788,8 +782,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; expr_t substituteStaticAuxiliaryVariable() const override; }; @@ -860,8 +852,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; //! Substitute auxiliary variables by their expression in static model expr_t substituteStaticAuxiliaryVariable() const override; void matchMatchedMoment(vector<int> &symb_ids, vector<int> &lags, vector<int> &powers) const override; @@ -963,8 +953,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; //! Substitute auxiliary variables by their expression in static model expr_t substituteStaticAuxiliaryVariable() const override; void decomposeAdditiveTerms(vector<pair<expr_t, int>> &terms, int current_sign) const override; @@ -1102,8 +1090,6 @@ public: pair<int, expr_t> getPacOptimizingShareAndExprNodesHelper(int lhs_symb_id, int lhs_orig_symb_id) const; expr_t getPacNonOptimizingPart(int optim_share_symb_id) const; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; //! Substitute auxiliary variables by their expression in static model expr_t substituteStaticAuxiliaryVariable() const override; //! Substitute auxiliary variables by their expression in static model auxiliary variable definition @@ -1203,8 +1189,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; //! Substitute auxiliary variables by their expression in static model expr_t substituteStaticAuxiliaryVariable() const override; }; @@ -1314,8 +1298,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; //! Substitute auxiliary variables by their expression in static model expr_t substituteStaticAuxiliaryVariable() const override; }; @@ -1495,8 +1477,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; expr_t substituteStaticAuxiliaryVariable() const override; void writeJsonAST(ostream &output) const override; void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, const deriv_node_temp_terms_t &tef_terms, bool isdynamic) const override; @@ -1567,8 +1547,6 @@ public: expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; bool containsPacExpectation(const string &pac_model_name = "") const override; bool isParamTimesEndogExpr() const override; - bool isVarModelReferenced(const string &model_info_name) const override; - void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const override; expr_t substituteStaticAuxiliaryVariable() const override; void writeJsonAST(ostream &output) const override; void writeJsonOutput(ostream &output, const temporary_terms_t &temporary_terms, const deriv_node_temp_terms_t &tef_terms, bool isdynamic) const override; diff --git a/src/ModFile.cc b/src/ModFile.cc index 530bc38c..bad563f3 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -495,8 +495,6 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool } dynamic_model.checkNoRemainingPacExpectation(); - dynamic_model.addEquationsForVar(); - // Create auxiliary vars for Expectation operator dynamic_model.substituteExpectation(mod_file_struct.partial_information); diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc index 63612168..9577a785 100644 --- a/src/ParsingDriver.cc +++ b/src/ParsingDriver.cc @@ -201,23 +201,6 @@ ParsingDriver::declare_endogenous(const string &name, const string &tex_name, co declare_symbol(name, SymbolType::endogenous, tex_name, partition_value); } -void -ParsingDriver::declare_var_endogenous(const string &name) -{ - if (mod_file->symbol_table.exists(name)) - { - SymbolType type = mod_file->symbol_table.getType(name); - if (type != SymbolType::endogenous && type != SymbolType::exogenous && type != SymbolType::exogenousDet) - error("Symbol " + name + " used in a VAR must be either endogenous or " - +"exogenous if it is also used elsewhere in the .mod file"); - add_in_symbol_list(name); - return; - } - - declare_symbol(name, SymbolType::endogenousVAR, "", {}); - add_in_symbol_list(name); -} - void ParsingDriver::declare_exogenous(const string &name, const string &tex_name, const vector<pair<string, string>> &partition_value) { @@ -1403,27 +1386,12 @@ ParsingDriver::var_model() error("You must pass the model_name option to the var_model statement."); auto name = its->second; - int order = 0; - auto itn = options_list.num_options.find("var.order"); - if (itn != options_list.num_options.end()) - order = stoi(itn->second); - else - if (!symbol_list.empty()) - error("You must pass the order option when passing a symbol list to the var_model statement"); - vector<string> eqtags; auto itvs = options_list.vector_str_options.find("var.eqtags"); if (itvs != options_list.vector_str_options.end()) - { - eqtags = itvs->second; - if (!symbol_list.empty()) - error("You cannot pass a symbol list when passing equation tags to the var_model statement"); - else if (itn != options_list.num_options.end()) - error("You cannot pass the order option when passing equation tags to the var_model statement"); - } + eqtags = itvs->second; - mod_file->var_model_table.addVarModel(name, eqtags, {symbol_list, order}); - symbol_list.clear(); + mod_file->var_model_table.addVarModel(name, eqtags); options_list.clear(); } diff --git a/src/ParsingDriver.hh b/src/ParsingDriver.hh index e10be031..74b66f09 100644 --- a/src/ParsingDriver.hh +++ b/src/ParsingDriver.hh @@ -359,8 +359,6 @@ public: void declare_exogenous_det(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); //! Declares a parameter void declare_parameter(const string &name, const string &tex_name = "", const vector<pair<string, string>> &partition_value = {}); - //! Declares a VAR variable and adds to symbol_list - void declare_var_endogenous(const string &name); //! Declares a model local variable void declare_model_local_variable(const string &name, const string &tex_name = ""); //! Declares a statement local variable diff --git a/src/SubModel.cc b/src/SubModel.cc index a41810a5..c18bc17e 100644 --- a/src/SubModel.cc +++ b/src/SubModel.cc @@ -428,8 +428,7 @@ VarModelTable::VarModelTable(SymbolTable &symbol_table_arg) : } void -VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg, - pair<SymbolList, int> symbol_list_and_order_arg) +VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg) { if (isExistingVarModelName(name_arg)) { @@ -438,16 +437,9 @@ VarModelTable::addVarModel(string name_arg, vector<string> eqtags_arg, } eqtags[name_arg] = move(eqtags_arg); - symbol_list_and_order[name_arg] = move(symbol_list_and_order_arg); names.insert(move(name_arg)); } -const map<string, pair<SymbolList, int>> & -VarModelTable::getSymbolListAndOrder() const -{ - return symbol_list_and_order; -} - void VarModelTable::writeOutput(const string &basename, ostream &output) const { @@ -469,12 +461,6 @@ VarModelTable::writeOutput(const string &basename, ostream &output) const for (const auto &name : names) { output << "M_.var." << name << ".model_name = '" << name << "';" << endl; - if (auto &[symbol_list, order] = symbol_list_and_order.at(name); - !symbol_list.empty()) - { - symbol_list.writeOutput("M_.var." + name + ".var_list_", output); - output << "M_.var." << name << ".order = " << order << ";" << endl; - } output << "M_.var." << name << ".eqtags = {"; for (const auto &it : eqtags.at(name)) output << "'" << it << "'; "; @@ -542,21 +528,15 @@ VarModelTable::writeJsonOutput(ostream &output) const if (name != *names.begin()) output << ", "; output << R"({"statementName": "var_model",)" - << R"("model_name": ")" << name << R"(",)"; - if (symbol_list_and_order.empty()) + << R"("model_name": ")" << name << R"(",)" + << R"("eqtags": [)"; + for (const auto &it : eqtags.at(name)) { - output << R"("eqtags": [)"; - for (const auto &it : eqtags.at(name)) - { - output << R"(")" << it << R"(")"; - if (&it != &eqtags.at(name).back()) - output << ", "; - } - output << "]"; + output << R"(")" << it << R"(")"; + if (&it != &eqtags.at(name).back()) + output << ", "; } - else - output << R"("order": ")" << symbol_list_and_order.at(name).second << R"(")"; - output << "}"; + output << "]}"; } } diff --git a/src/SubModel.hh b/src/SubModel.hh index b30a0c2a..627dbec6 100644 --- a/src/SubModel.hh +++ b/src/SubModel.hh @@ -116,7 +116,6 @@ class VarModelTable private: SymbolTable &symbol_table; set<string> names; - map<string, pair<SymbolList, int>> symbol_list_and_order; map<string, vector<string>> eqtags; map<string, vector<int>> eqnums, max_lags, lhs, lhs_orig_symb_ids, orig_diff_var; map<string, vector<set<pair<int, int>>>> rhs; // name -> for each equation: set of pairs (var, lag) @@ -127,8 +126,7 @@ public: explicit VarModelTable(SymbolTable &symbol_table_arg); //! Add a VAR model - void addVarModel(string name, vector<string> eqtags, - pair<SymbolList, int> symbol_list_and_order_arg); + void addVarModel(string name, vector<string> eqtags); inline bool isExistingVarModelName(const string &name_arg) const; inline bool empty() const; @@ -142,7 +140,6 @@ public: int getMaxLag(const string &name_arg) const; const vector<int> &getLhs(const string &name_arg) const; const vector<int> &getLhsOrigIds(const string &name_arg) const; - const map<string, pair<SymbolList, int>> &getSymbolListAndOrder() const; const vector<set<pair<int, int>>> &getRhs(const string &name_arg) const; const vector<expr_t> &getLhsExprT(const string &name_arg) const; diff --git a/src/SymbolList.cc b/src/SymbolList.cc index 2ba1e6ef..794095ff 100644 --- a/src/SymbolList.cc +++ b/src/SymbolList.cc @@ -1,5 +1,5 @@ /* - * Copyright © 2003-2020 Dynare Team + * Copyright © 2003-2021 Dynare Team * * This file is part of Dynare. * @@ -113,9 +113,6 @@ SymbolList::checkPass(WarningConsolidation &warnings, case SymbolType::unusedEndogenous: valid_types += "unusedEndogenous, "; break; - case SymbolType::endogenousVAR: - valid_types += "endogenousVAR, "; - break; case SymbolType::excludedVariable: valid_types += "excludedVariable, "; } diff --git a/src/SymbolTable.cc b/src/SymbolTable.cc index 75b870a7..a6979d6f 100644 --- a/src/SymbolTable.cc +++ b/src/SymbolTable.cc @@ -360,7 +360,6 @@ SymbolTable::writeOutput(ostream &output) const noexcept(false) break; case AuxVarType::endoLag: case AuxVarType::exoLag: - case AuxVarType::varModel: output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl; break; @@ -627,28 +626,6 @@ SymbolTable::addUnaryOpAuxiliaryVar(int index, expr_t expr_arg, string unary_op, return symb_id; } -int -SymbolTable::addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag, expr_t expr_arg) noexcept(false) -{ - int symb_id; - ostringstream varname; - varname << "AUX_VARMODEL_" << orig_symb_id << "_" << -orig_lead_lag; - - try - { - symb_id = addSymbol(varname.str(), SymbolType::endogenous); - } - catch (AlreadyDeclaredException &e) - { - cerr << "ERROR: you should rename your variable called " << varname.str() << ", this name is internally used by Dynare" << endl; - exit(EXIT_FAILURE); - } - - aux_vars.emplace_back(symb_id, AuxVarType::varModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg, ""); - - return symb_id; -} - int SymbolTable::addMultiplierAuxiliaryVar(int index) noexcept(false) { diff --git a/src/SymbolTable.hh b/src/SymbolTable.hh index 105c4ca9..c63719ee 100644 --- a/src/SymbolTable.hh +++ b/src/SymbolTable.hh @@ -46,7 +46,9 @@ enum class AuxVarType for the differentiate_forward_vars option. N.B.: nothing to do with the diff() operator! */ multiplier = 6, //!< Multipliers for FOC of Ramsey Problem - varModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model + + // Value 7 is unused for the time being (but could be reused) + diff = 8, //!< Variable for Diff operator diffLag = 9, //!< Variable for timing between Diff operators (lag) unaryOp = 10, //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x)) @@ -323,9 +325,6 @@ public: int getOrigLeadLagForDiffAuxVar(int diff_aux_var_symb_id) const noexcept(false); //! Searches for diff aux var and finds the symb id associated with this variable int getOrigSymbIdForDiffAuxVar(int diff_aux_var_symb_id) const noexcept(false); - //! Adds an auxiliary variable when var_model is used with an order that is greater in absolute value - //! than the largest lag present in the model. - int addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag, expr_t expr_arg) noexcept(false); //! Adds an auxiliary variable when the diff operator is encountered int addDiffAuxiliaryVar(int index, expr_t expr_arg) noexcept(false); int addDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag) noexcept(false); -- GitLab