Improve some function prototypes for better distinction between input and output arguments
parent
cd99bb3af9
commit
8e9f6e4c57
|
@ -4170,11 +4170,11 @@ DynamicModel::fillTrendComponentModelTable() const
|
|||
trend_component_model_table.setVals(eqnums, trend_eqnums, lhsr, lhs_expr_tr);
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::fillErrorComponentMatrix(map<string, map<tuple<int, int, int>, expr_t>> &A0r,
|
||||
map<string, map<tuple<int, int, int>, expr_t>> &A0starr,
|
||||
ExprNode::subst_table_t &diff_subst_table) const
|
||||
pair<map<string, map<tuple<int, int, int>, expr_t>>, map<string, map<tuple<int, int, int>, expr_t>>>
|
||||
DynamicModel::fillErrorComponentMatrix(const ExprNode::subst_table_t &diff_subst_table) const
|
||||
{
|
||||
map<string, map<tuple<int, int, int>, expr_t>> A0r, A0starr;
|
||||
|
||||
for (const auto & it : trend_component_model_table.getEqNums())
|
||||
{
|
||||
int i = 0;
|
||||
|
@ -4198,6 +4198,8 @@ DynamicModel::fillErrorComponentMatrix(map<string, map<tuple<int, int, int>, exp
|
|||
A0r[it.first] = A0;
|
||||
A0starr[it.first] = A0star;
|
||||
}
|
||||
|
||||
return { A0r, A0starr };
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -4268,12 +4270,12 @@ DynamicModel::fillTrendComponentModelTableFromOrigModel(StaticModel &static_mode
|
|||
}
|
||||
|
||||
void
|
||||
DynamicModel::fillTrendComponentmodelTableAREC(ExprNode::subst_table_t &diff_subst_table) const
|
||||
DynamicModel::fillTrendComponentmodelTableAREC(const ExprNode::subst_table_t &diff_subst_table) const
|
||||
{
|
||||
map<string, map<tuple<int, int, int>, expr_t>> ARr, A0r, A0starr;
|
||||
ARr = fillAutoregressiveMatrix(false);
|
||||
auto ARr = fillAutoregressiveMatrix(false);
|
||||
trend_component_model_table.setAR(ARr);
|
||||
fillErrorComponentMatrix(A0r, A0starr, diff_subst_table);
|
||||
map<string, map<tuple<int, int, int>, expr_t>> A0r, A0starr;
|
||||
tie(A0r, A0starr) = fillErrorComponentMatrix(diff_subst_table);
|
||||
trend_component_model_table.setA0(A0r, A0starr);
|
||||
}
|
||||
|
||||
|
@ -4337,7 +4339,7 @@ DynamicModel::addEquationsForVar()
|
|||
|
||||
vector<int>
|
||||
DynamicModel::getUndiffLHSForPac(const string &aux_model_name,
|
||||
ExprNode::subst_table_t &diff_subst_table) const
|
||||
const ExprNode::subst_table_t &diff_subst_table) const
|
||||
{
|
||||
vector<expr_t> lhs_expr_t = trend_component_model_table.getLhsExprT(aux_model_name);
|
||||
vector<int> lhs = trend_component_model_table.getLhs(aux_model_name);
|
||||
|
@ -4404,9 +4406,11 @@ DynamicModel::getUndiffLHSForPac(const string &aux_model_name,
|
|||
return lhs;
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::walkPacParameters(const string &name, map<pair<string, string>, pair<string, int>> &eqtag_and_lag)
|
||||
map<pair<string, string>, pair<string, int>>
|
||||
DynamicModel::walkPacParameters(const string &name)
|
||||
{
|
||||
map<pair<string, string>, pair<string, int>> eqtag_and_lag;
|
||||
|
||||
int i = 0;
|
||||
for (auto & equation : equations)
|
||||
{
|
||||
|
@ -4507,6 +4511,7 @@ DynamicModel::walkPacParameters(const string &name, map<pair<string, string>, pa
|
|||
eqtag_and_lag[{name, eqtag}] = {eq, 0};
|
||||
}
|
||||
}
|
||||
return eqtag_and_lag;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -6212,9 +6217,10 @@ DynamicModel::substituteAdl()
|
|||
equation = dynamic_cast<BinaryOpNode *>(equation->substituteAdl());
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::getEquationNumbersFromTags(vector<int> &eqnumbers, set<string> &eqtags) const
|
||||
vector<int>
|
||||
DynamicModel::getEquationNumbersFromTags(const set<string> &eqtags) const
|
||||
{
|
||||
vector<int> eqnumbers;
|
||||
for (auto & eqtag : eqtags)
|
||||
for (const auto & equation_tag : equation_tags)
|
||||
if (equation_tag.second.first == "name"
|
||||
|
@ -6223,6 +6229,7 @@ DynamicModel::getEquationNumbersFromTags(vector<int> &eqnumbers, set<string> &eq
|
|||
eqnumbers.push_back(equation_tag.first);
|
||||
break;
|
||||
}
|
||||
return eqnumbers;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -6238,26 +6245,28 @@ DynamicModel::findPacExpectationEquationNumbers(vector<int> &eqnumbers) const
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table)
|
||||
pair<diff_table_t, ExprNode::subst_table_t>
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model)
|
||||
{
|
||||
vector<int> eqnumbers(equations.size());
|
||||
iota(eqnumbers.begin(), eqnumbers.end(), 0);
|
||||
substituteUnaryOps(static_model, nodes, subst_table, eqnumbers);
|
||||
return substituteUnaryOps(static_model, eqnumbers);
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table, set<string> &var_model_eqtags)
|
||||
pair<diff_table_t, ExprNode::subst_table_t>
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model, const set<string> &var_model_eqtags)
|
||||
{
|
||||
vector<int> eqnumbers;
|
||||
getEquationNumbersFromTags(eqnumbers, var_model_eqtags);
|
||||
vector<int> eqnumbers = getEquationNumbersFromTags(var_model_eqtags);
|
||||
findPacExpectationEquationNumbers(eqnumbers);
|
||||
substituteUnaryOps(static_model, nodes, subst_table, eqnumbers);
|
||||
return substituteUnaryOps(static_model, eqnumbers);
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table, vector<int> &eqnumbers)
|
||||
pair<diff_table_t, ExprNode::subst_table_t>
|
||||
DynamicModel::substituteUnaryOps(StaticModel &static_model, const vector<int> &eqnumbers)
|
||||
{
|
||||
diff_table_t nodes;
|
||||
ExprNode::subst_table_t subst_table;
|
||||
|
||||
// Find matching unary ops that may be outside of diffs (i.e., those with different lags)
|
||||
set<int> used_local_vars;
|
||||
for (int eqnumber : eqnumbers)
|
||||
|
@ -6293,11 +6302,16 @@ DynamicModel::substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes,
|
|||
|
||||
if (subst_table.size() > 0)
|
||||
cout << "Substitution of Unary Ops: added " << neweqs.size() << " auxiliary variables and equations." << endl;
|
||||
|
||||
return { nodes, subst_table };
|
||||
}
|
||||
|
||||
void
|
||||
DynamicModel::substituteDiff(StaticModel &static_model, diff_table_t &diff_table, ExprNode::subst_table_t &diff_subst_table, vector<expr_t> &pac_growth)
|
||||
pair<diff_table_t, ExprNode::subst_table_t>
|
||||
DynamicModel::substituteDiff(StaticModel &static_model, vector<expr_t> &pac_growth)
|
||||
{
|
||||
diff_table_t diff_table;
|
||||
ExprNode::subst_table_t diff_subst_table;
|
||||
|
||||
set<int> used_local_vars;
|
||||
for (const auto & equation : equations)
|
||||
equation->collectVariables(SymbolType::modelLocalVariable, used_local_vars);
|
||||
|
@ -6359,6 +6373,8 @@ DynamicModel::substituteDiff(StaticModel &static_model, diff_table_t &diff_table
|
|||
|
||||
if (diff_subst_table.size() > 0)
|
||||
cout << "Substitution of Diff operator: added " << neweqs.size() << " auxiliary variables and equations." << endl;
|
||||
|
||||
return { diff_table, diff_subst_table };
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -251,7 +251,7 @@ private:
|
|||
//! Create a legacy *_dynamic.m file for Matlab/Octave not yet using the temporary terms array interface
|
||||
void writeDynamicMatlabCompatLayer(const string &basename) const;
|
||||
|
||||
void getEquationNumbersFromTags(vector<int> &eqnumber, set<string> &eqtags) const;
|
||||
vector<int> getEquationNumbersFromTags(const set<string> &eqtags) const;
|
||||
|
||||
void findPacExpectationEquationNumbers(vector<int> &eqnumber) const;
|
||||
|
||||
|
@ -323,12 +323,13 @@ public:
|
|||
map<string, map<tuple<int, int, int>, expr_t>> fillAutoregressiveMatrix(bool is_var) const;
|
||||
|
||||
//! Fill Error Component Matrix for trend_component_model
|
||||
void fillErrorComponentMatrix(map<string, map<tuple<int, int, int>, expr_t>> &A0r, map<string, map<tuple<int, int, int>, expr_t>> &A0starr, ExprNode::subst_table_t &diff_subst_table) const;
|
||||
/*! Returns a pair (A0r, A0starr) */
|
||||
pair<map<string, map<tuple<int, int, int>, expr_t>>, map<string, map<tuple<int, int, int>, expr_t>>> fillErrorComponentMatrix(const ExprNode::subst_table_t &diff_subst_table) const;
|
||||
|
||||
//! Fill the Trend Component Model Table
|
||||
void fillTrendComponentModelTable() const;
|
||||
void fillTrendComponentModelTableFromOrigModel(StaticModel &static_model) const;
|
||||
void fillTrendComponentmodelTableAREC(ExprNode::subst_table_t &diff_subst_table) const;
|
||||
void fillTrendComponentmodelTableAREC(const ExprNode::subst_table_t &diff_subst_table) const;
|
||||
|
||||
//! Fill the Var Model Table
|
||||
void fillVarModelTable() const;
|
||||
|
@ -344,7 +345,7 @@ public:
|
|||
void addEquationsForVar();
|
||||
|
||||
//! Get Pac equation parameter info
|
||||
void walkPacParameters(const string &name, map<pair<string, string>, pair<string, int>> &eqtag_and_lag);
|
||||
map<pair<string, string>, pair<string, int>> walkPacParameters(const string &name);
|
||||
//! Add var_model info to pac_expectation nodes
|
||||
void fillPacModelInfo(const string &pac_model_name,
|
||||
vector<int> lhs,
|
||||
|
@ -442,16 +443,16 @@ public:
|
|||
void substituteAdl();
|
||||
|
||||
//! Creates aux vars for all unary operators
|
||||
void substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table);
|
||||
pair<diff_table_t, ExprNode::subst_table_t> substituteUnaryOps(StaticModel &static_model);
|
||||
|
||||
//! Creates aux vars for certain unary operators: originally implemented for support of VARs
|
||||
void substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table, set<string> &eq_tags);
|
||||
pair<diff_table_t, ExprNode::subst_table_t> substituteUnaryOps(StaticModel &static_model, const set<string> &eq_tags);
|
||||
|
||||
//! Creates aux vars for certain unary operators: originally implemented for support of VARs
|
||||
void substituteUnaryOps(StaticModel &static_model, diff_table_t &nodes, ExprNode::subst_table_t &subst_table, vector<int> &eqnumbers);
|
||||
pair<diff_table_t, ExprNode::subst_table_t> substituteUnaryOps(StaticModel &static_model, const vector<int> &eqnumbers);
|
||||
|
||||
//! Substitutes diff operator
|
||||
void substituteDiff(StaticModel &static_model, diff_table_t &diff_table, ExprNode::subst_table_t &diff_subst_table, vector<expr_t> &pac_growth);
|
||||
pair<diff_table_t, ExprNode::subst_table_t> substituteDiff(StaticModel &static_model, vector<expr_t> &pac_growth);
|
||||
|
||||
//! Substitute VarExpectation operators
|
||||
void substituteVarExpectation(const map<string, expr_t> &subst_table);
|
||||
|
@ -498,7 +499,7 @@ public:
|
|||
|
||||
//! Table to undiff LHS variables for pac vector z
|
||||
vector<int> getUndiffLHSForPac(const string &aux_model_name,
|
||||
ExprNode::subst_table_t &diff_subst_table) const;
|
||||
const ExprNode::subst_table_t &diff_subst_table) const;
|
||||
|
||||
//! Transforms the model by replacing trend variables with a 1
|
||||
void removeTrendVariableFromEquations();
|
||||
|
|
|
@ -409,15 +409,15 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const
|
|||
diff_table_t unary_ops_nodes;
|
||||
ExprNode::subst_table_t unary_ops_subst_table;
|
||||
if (transform_unary_ops)
|
||||
dynamic_model.substituteUnaryOps(diff_static_model, unary_ops_nodes, unary_ops_subst_table);
|
||||
tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps(diff_static_model);
|
||||
else
|
||||
// substitute only those unary ops that appear in auxiliary model equations
|
||||
dynamic_model.substituteUnaryOps(diff_static_model, unary_ops_nodes, unary_ops_subst_table, eqtags);
|
||||
tie(unary_ops_nodes, unary_ops_subst_table) = dynamic_model.substituteUnaryOps(diff_static_model, eqtags);
|
||||
|
||||
// Create auxiliary variable and equations for Diff operators
|
||||
diff_table_t diff_table;
|
||||
ExprNode::subst_table_t diff_subst_table;
|
||||
dynamic_model.substituteDiff(diff_static_model, diff_table, diff_subst_table, pac_growth);
|
||||
tie(diff_table, diff_subst_table) = dynamic_model.substituteDiff(diff_static_model, pac_growth);
|
||||
|
||||
// Fill Trend Component Model Table
|
||||
dynamic_model.fillTrendComponentModelTable();
|
||||
|
@ -463,8 +463,7 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const
|
|||
cerr << "Error: aux_model_name not recognized as VAR model or Trend Component model" << endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
map<pair<string, string>, pair<string, int>> eqtag_and_lag;
|
||||
dynamic_model.walkPacParameters(pms->name, eqtag_and_lag);
|
||||
auto eqtag_and_lag = dynamic_model.walkPacParameters(pms->name);
|
||||
original_model.getPacMaxLag(pms->name, eqtag_and_lag);
|
||||
if (pms->aux_model_name == "")
|
||||
dynamic_model.addPacModelConsistentExpectationEquation(pms->name, symbol_table.getID(pms->discount),
|
||||
|
|
Loading…
Reference in New Issue