diff --git a/src/ComputingTasks.cc b/src/ComputingTasks.cc index a400d9f29c23d384b8b2308ba62e296df9561976..d8911f6388fb42e6360b8826c5b4392b17881645 100644 --- a/src/ComputingTasks.cc +++ b/src/ComputingTasks.cc @@ -305,23 +305,6 @@ VarModelStatement::fillVarModelInfoFromEquations(vector<int> &eqnumber_arg, vect diff = diff_arg; orig_diff_var = orig_diff_var_arg; max_lag = max_lag_arg; - - // Order RHS vars by time (already ordered by equation tag) - for (vector<set<pair<int, int> > >::const_iterator it = rhs_by_eq.begin(); - it != rhs_by_eq.end(); it++) - for (set<pair<int, int> >::const_iterator it1 = it->begin(); - it1 != it->end(); it1++) - { - map<int, set<int> >::iterator mit = rhs.find(abs(it1->second)); - if (mit == rhs.end()) - { - set<int> si; - si.insert(it1->first); - rhs[abs(it1->second)] = si; - } - else - mit->second.insert(it1->first); - } } void @@ -330,12 +313,6 @@ VarModelStatement::getVarModelName(string &var_model_name) const var_model_name = name; } -void -VarModelStatement::getVarModelRHS(map<int, set<int > > &rhs_arg) const -{ - rhs_arg = rhs; -} - void VarModelStatement::checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) { diff --git a/src/ComputingTasks.hh b/src/ComputingTasks.hh index 0da427d788f575f2831b8b4de6785379a77eeb3f..360432d45d27111e7aee427280b6b97f5cd3cc3f 100644 --- a/src/ComputingTasks.hh +++ b/src/ComputingTasks.hh @@ -127,7 +127,6 @@ private: const string &name; const SymbolTable &symbol_table; vector<int> eqnumber, lhs, orig_diff_var; - map<int, set<int > > rhs; // lag -> set< symb_id > (all vars that appear at a given lag) vector<set<pair<int, int> > > rhs_by_eq; // rhs by equation vector<bool> nonstationary, diff; int max_lag; @@ -144,7 +143,6 @@ public: vector<bool> &diff_arg, vector<int> &orig_diff_var_arg, int max_lag_arg); void getVarModelName(string &var_model_name) const; - void getVarModelRHS(map<int, set<int > > &rhs_arg) const; virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings); virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const; void createVarModelMFunction(ostream &output, const map<string, set<int> > &var_expectation_functions_to_write) const; diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 42ccae5ca51627929a6a240b6095d9a6e9a88f98..83a068a31feb9fe8b743cdfc30dd6788f774a280 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -3415,11 +3415,11 @@ DynamicModel::walkPacParameters() void DynamicModel::fillPacExpectationVarInfo(string &var_model_name, vector<int> &lhs, - map<int, set<int > > &rhs, + int max_lag, vector<bool> &nonstationary) { for (size_t i = 0; i < equations.size(); i++) - equations[i]->fillPacExpectationVarInfo(var_model_name, lhs, rhs, nonstationary, i); + equations[i]->fillPacExpectationVarInfo(var_model_name, lhs, max_lag, nonstationary, i); } void diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 94a91d0f57b5c4df8ff133bccc3f854866522ab0..dd60739b5c093b15bc1ad5d899b376180ea747b9 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -306,7 +306,7 @@ public: //! Add var_model info to pac_expectation nodes void fillPacExpectationVarInfo(string &var_model_name, vector<int> &lhs, - map<int, set<int > > &rhs, + int max_lag, vector<bool> &nonstationary); //! Substitutes pac_expectation operator void substitutePacExpectation(); diff --git a/src/ExprNode.cc b/src/ExprNode.cc index baefd6c25361c2789623b327ff5b0041cb325f87..f2340b6508b48a5c7e6f95bb6a8611f68b8f2155 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -600,7 +600,7 @@ NumConstNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, } void -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) +NumConstNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -1702,7 +1702,7 @@ VariableNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, } void -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) +VariableNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -3171,9 +3171,9 @@ UnaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, } void -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) +UnaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { - arg->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, rhs_arg, nonstationary_arg, equation_number_arg); + arg->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); } bool @@ -4800,10 +4800,10 @@ BinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, } void -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) +BinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_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); + arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); + arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); } bool @@ -5606,11 +5606,11 @@ TrinaryOpNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int } void -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) +TrinaryOpNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_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); + arg1->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); + arg2->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); + arg3->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); } bool @@ -6011,10 +6011,10 @@ AbstractExternalFunctionNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pai } void -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) +AbstractExternalFunctionNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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, equation_number_arg); + (*it)->fillPacExpectationVarInfo(var_model_name_arg, lhs_arg, max_lag_arg, nonstationary_arg, equation_number_arg); } bool @@ -7503,7 +7503,7 @@ VarExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pai } void -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) +VarExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_arg) { } @@ -7959,13 +7959,13 @@ PacExpectationNode::addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pai void -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) +PacExpectationNode::fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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; + max_lag = max_lag_arg; equation_number = equation_number_arg; for (vector<bool>::const_iterator it = nonstationary_arg.begin(); @@ -7988,10 +7988,9 @@ PacExpectationNode::substitutePacExpectation(map<const PacExpectationNode *, con if (myit != subst_table.end()) return const_cast<BinaryOpNode *>(myit->second); - int maxlag = z_vec.size(); expr_t subExpr = datatree.AddNonNegativeConstant("0"); if (stationary_vars_present) - for (int i = 1; i < maxlag + 1; i++) + for (int i = 1; i < max_lag + 1; i++) for (vector<int>::const_iterator it = lhs.begin(); it != lhs.end(); it++) { stringstream param_name_h0; @@ -8006,7 +8005,7 @@ PacExpectationNode::substitutePacExpectation(map<const PacExpectationNode *, con } if (nonstationary_vars_present) - for (int i = 1; i < maxlag + 1; i++) + for (int i = 1; i < max_lag + 1; i++) for (vector<int>::const_iterator it = lhs.begin(); it != lhs.end(); it++) { stringstream param_name_h1; diff --git a/src/ExprNode.hh b/src/ExprNode.hh index 1ea6dbb5a48020dd1078e70b9776a724862ec312..4632653508f6d0b05c0c62ddcb3fe5bb05c60c06 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -506,7 +506,7 @@ class ExprNode virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_arg) = 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, int equation_number_arg) = 0; + virtual void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_arg, vector<bool> &nonstationary_arg, int equation_number_arg) = 0; //! Fills map virtual void getEndosAndMaxLags(map<string, int> &model_endos_and_lags) const = 0; @@ -580,7 +580,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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; @@ -663,7 +663,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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 @@ -768,7 +768,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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 @@ -895,7 +895,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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 @@ -987,7 +987,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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 @@ -1087,7 +1087,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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 @@ -1280,7 +1280,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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; @@ -1295,7 +1295,7 @@ private: bool stationary_vars_present, nonstationary_vars_present; vector<int> lhs; pair<int, int> lhs_pac_var; - map<int, set<int > > z_vec; // lag -> set< symb_id > (all vars that appear at a given lag) + int max_lag; vector<int> h0_indices, h1_indices; int growth_param_index, equation_number; set<pair<int, pair<int, int> > > params_and_vals; @@ -1357,7 +1357,7 @@ public: virtual void setVarExpectationIndex(map<string, pair<SymbolList, int> > &var_model_info); virtual void walkPacParameters(bool &pac_encountered, pair<int, int> &lhs, set<pair<int, pair<int, int> > > ¶ms_and_vals) const; virtual void addParamInfoToPac(pair<int, int> &lhs_arg, set<pair<int, pair<int, int> > > ¶ms_and_vals_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 void fillPacExpectationVarInfo(string &var_model_name_arg, vector<int> &lhs_arg, int max_lag_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; diff --git a/src/ModFile.cc b/src/ModFile.cc index 7948a540f3975f84332576223cb3e4f2b6c93468..042f19ce568b0dbdbb288e272ca37f80652c594b 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -389,11 +389,9 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const vms->fillVarModelInfoFromEquations(eqnumber, lhs, rhs, nonstationary, diff, orig_diff_var, max_lag); string var_model_name; - map<int, set<int > > rhs_pac; vms->getVarModelName(var_model_name); - vms->getVarModelRHS(rhs_pac); dynamic_model.walkPacParameters(); - dynamic_model.fillPacExpectationVarInfo(var_model_name, lhs, rhs_pac, nonstationary); + dynamic_model.fillPacExpectationVarInfo(var_model_name, lhs, max_lag, nonstationary); dynamic_model.substitutePacExpectation(); } }