diff --git a/DynamicModel.cc b/DynamicModel.cc index 615d0232ebb671d04f0ea6c0b5e09d30c022a9e5..74235425206f0ba2e0bf4ee9933f9f2951c5c4dd 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -3389,7 +3389,7 @@ DynamicModel::fillPacExpectationVarInfo(string &var_model_name, vector<bool> &nonstationary) { for (size_t i = 0; i < equations.size(); i++) - equations[i]->fillPacExpectationVarInfo(var_model_name, lhs, rhs, nonstationary); + equations[i]->fillPacExpectationVarInfo(var_model_name, lhs, rhs, nonstationary, i); } void diff --git a/ExprNode.cc b/ExprNode.cc index 6af8caf517d070cec1c7613a7349b83b8f710560..7bb79e13996e7b00c1acf0dc792313966fb5fb77 100644 --- a/ExprNode.cc +++ b/ExprNode.cc @@ -579,7 +579,7 @@ NumConstNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo } void -NumConstNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +NumConstNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -1635,7 +1635,7 @@ VariableNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo } void -VariableNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +VariableNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -3032,9 +3032,9 @@ UnaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mod } void -UnaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +UnaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { - arg->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); + arg->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); } bool @@ -4568,10 +4568,10 @@ BinaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_mo } void -BinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +BinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { - arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); - arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); + arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); + arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); } bool @@ -5344,11 +5344,11 @@ TrinaryOpNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_m } void -TrinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +TrinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { - arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); - arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); - arg3->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); + arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); + arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); + arg3->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); } bool @@ -5718,10 +5718,10 @@ AbstractExternalFunctionNode::setVarExpectationIndex(map<string, pair<SymbolList } void -AbstractExternalFunctionNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +AbstractExternalFunctionNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++) - (*it)->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg); + (*it)->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); } bool @@ -7189,7 +7189,7 @@ VarExpectationNode::setVarExpectationIndex(map<string, pair<SymbolList, int> > & } void -VarExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +VarExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -7282,7 +7282,8 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output <<"M_.pac_expectation." << model_name << ".var_model_name = '" << var_model_name << "';" << endl << "M_.pac_expectation." << model_name << ".discount_param_index = " - << datatree.symbol_table.getTypeSpecificID(discount_symb_id) + 1 << ";" << endl; + << datatree.symbol_table.getTypeSpecificID(discount_symb_id) + 1 << ";" << endl + << "M_.pac_expectation." << model_name << ".equation_number = " << equation_number + 1 << ";" << endl; if (growth_symb_id >= 0) output << "M_.pac_expectation." << model_name << ".growth_name = '" @@ -7559,14 +7560,14 @@ PacExpectationNode::writeJsonOutput(ostream &output, } void -PacExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, - map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) +PacExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { if (var_model_name != var_model_name_arg) return; lhs = lhs_arg; z_vec = rhs_arg; + equation_number = equation_number_arg; for (vector<bool>::const_iterator it = nonstationary_arg.begin(); it != nonstationary_arg.end(); it++) diff --git a/ExprNode.hh b/ExprNode.hh index 37cc2c5862994cd8f72c28efdf9c247b8e99b2df..1d3a2392f52207d50ecdbc8720cf0a4bca64d6e3 100644 --- a/ExprNode.hh +++ b/ExprNode.hh @@ -490,7 +490,7 @@ class ExprNode virtual bool isVarModelReferenced(const string &model_info_name) const = 0; //! Fills var_model info for pac_expectation node - virtual void fillPacExpectationVarInfo(string &var_model_name, vector<int> &lhs, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg) = 0; + virtual void fillPacExpectationVarInfo(string &var_model_name, vector<int> &lhs, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg) = 0; //! Fills map virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const = 0; @@ -560,7 +560,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; virtual expr_t substituteStaticAuxiliaryVariable() const; @@ -639,7 +639,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; //! Substitute auxiliary variables by their expression in static model @@ -741,7 +741,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; //! Substitute auxiliary variables by their expression in static model @@ -861,7 +861,7 @@ public: expr_t getNonZeroPartofEquation() const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; //! Substitute auxiliary variables by their expression in static model @@ -949,7 +949,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; //! Substitute auxiliary variables by their expression in static model @@ -1045,7 +1045,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; //! Substitute auxiliary variables by their expression in static model @@ -1234,7 +1234,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; virtual expr_t substituteStaticAuxiliaryVariable() const; @@ -1250,7 +1250,7 @@ private: vector<int> lhs; map<int, set<int > > z_vec; // lag -> set< symb_id > (all vars that appear at a given lag) vector<int> h0_indices, h1_indices; - int growth_param_index; + int growth_param_index, equation_number; public: PacExpectationNode(DataTree &datatree_arg, const string &model_name, const string &var_model_name, const int discount_arg, const int growth_arg); @@ -1305,7 +1305,7 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); - virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg); + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, map<int, set<int > > &rhs_arg, vector<bool> &nonstationary_arg, int equation_number_arg); virtual bool isVarModelReferenced(const string &model_info_name) const; virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const; virtual expr_t substituteStaticAuxiliaryVariable() const;