Revert "preprocessor: write equation cross references in JSON. #1387"

This reverts commit 0ccc82300c3046d159554c24027ded09a93b687e.
issue#70
Houtan Bastani 2017-03-10 17:18:41 +01:00
parent 2a3ef9d168
commit cde54d7ad4
5 changed files with 1 additions and 240 deletions

View File

@ -5342,127 +5342,6 @@ void
DynamicModel::writeJsonOutput(ostream &output) const
{
writeJsonModelEquations(output, false);
output << ", ";
writeJsonXrefs(output);
}
void
DynamicModel::writeJsonXrefs(ostream &output) const
{
output << "\"xrefs\": {"
<< "\"parameters\": [";
for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_param.begin();
it != json_xref_param.end(); it++)
{
if (it != json_xref_param.begin())
output << ", ";
output << "{\"parameter\": \"" << symbol_table.getName(it->first.first) << "\""
<< ", \"equations\": [";
for (set<int>::const_iterator it1 = it->second.begin();
it1 != it->second.end(); it1++)
{
if (it1 != it->second.begin())
output << ", ";
output << *it1 + 1;
}
output << "]}";
}
output << "]"
<< ", \"endogenous\": [";
for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_endo.begin();
it != json_xref_endo.end(); it++)
{
if (it != json_xref_endo.begin())
output << ", ";
output << "{\"endogenous\": \"" << symbol_table.getName(it->first.first) << "\""
<< ", \"shift\": " << it->first.second
<< ", \"equations\": [";
for (set<int>::const_iterator it1 = it->second.begin();
it1 != it->second.end(); it1++)
{
if (it1 != it->second.begin())
output << ", ";
output << *it1 + 1;
}
output << "]}";
}
output << "]"
<< ", \"exogenous\": [";
for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_exo.begin();
it != json_xref_exo.end(); it++)
{
if (it != json_xref_exo.begin())
output << ", ";
output << "{\"exogenous\": \"" << symbol_table.getName(it->first.first) << "\""
<< ", \"shift\": " << it->first.second
<< ", \"equations\": [";
for (set<int>::const_iterator it1 = it->second.begin();
it1 != it->second.end(); it1++)
{
if (it1 != it->second.begin())
output << ", ";
output << *it1 + 1;
}
output << "]}";
}
output << "]"
<< ", \"exogenous_deterministic\": [";
for (map<pair<int, int>, set<int> >::const_iterator it = json_xref_exo_det.begin();
it != json_xref_exo_det.end(); it++)
{
if (it != json_xref_exo_det.begin())
output << ", ";
output << "{\"exogenous_det\": \"" << symbol_table.getName(it->first.first) << "\""
<< ", \"shift\": " << it->first.second
<< ", \"equations\": [";
for (set<int>::const_iterator it1 = it->second.begin();
it1 != it->second.end(); it1++)
{
if (it1 != it->second.begin())
output << ", ";
output << *it1 + 1;
}
output << "]}";
}
output << "]}" << endl;
}
void
DynamicModel::computeJsonXrefs()
{
map<int, ExprNode::JsonEquationInfo> xrefs;
int i = 0;
for (vector<BinaryOpNode *>::iterator it = equations.begin();
it != equations.end(); it++)
{
ExprNode::JsonEquationInfo ei;
(*it)->computeJsonXrefs(ei);
xrefs[i++] = ei;
}
i = 0;
for (map<int, ExprNode::JsonEquationInfo>::const_iterator it = xrefs.begin();
it != xrefs.end(); it++, i++)
{
computeJsonRevXref(json_xref_param, it->second.param, i);
computeJsonRevXref(json_xref_endo, it->second.endo, i);
computeJsonRevXref(json_xref_exo, it->second.exo, i);
computeJsonRevXref(json_xref_exo_det, it->second.exo_det, i);
}
}
void
DynamicModel::computeJsonRevXref(map<pair<int, int>, set<int> > &xrefset, const set<pair<int, int> > &eiref, int eqn)
{
for (set<pair<int, int> >::const_iterator it = eiref.begin();
it != eiref.end(); it++)
{
set<int> eq;
if (xrefset.find(*it) != xrefset.end())
eq = xrefset[*it];
eq.insert(eqn);
xrefset[*it] = eq;
}
}
void
@ -5842,4 +5721,3 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<< ", " << third_derivs1_output.str()
<< "}";
}

View File

@ -62,12 +62,6 @@ private:
/*! Set by computeDerivIDs() */
int max_exo_det_lag, max_exo_det_lead;
//! Cross references WITH lags (for #1387, potentially combine with cross references above upon decision by @michel)
map<pair<int, int>, set<int> > json_xref_param;
map<pair<int, int>, set<int> > json_xref_endo;
map<pair<int, int>, set<int> > json_xref_exo;
map<pair<int, int>, set<int> > json_xref_exo_det;
//! Number of columns of dynamic jacobian
/*! Set by computeDerivID()s and computeDynJacobianCols() */
int dynJacobianColsNbr;
@ -195,9 +189,6 @@ private:
/*! pair< pair<static, forward>, pair<backward,mixed> > */
vector<pair< pair<int, int>, pair<int, int> > > block_col_type;
//! Related to public function computeJsonXref
void computeJsonRevXref(map<pair<int, int>, set<int> > &xrefset, const set<pair<int, int> > &eiref, int eqn);
//! List for each variable its block number and its maximum lag and lead inside the block
vector<pair<int, pair<int, int> > > variable_block_lead_lag;
//! List for each equation its block number
@ -211,10 +202,7 @@ public:
//! Adds a variable node
/*! This implementation allows for non-zero lag */
virtual VariableNode *AddVariable(int symb_id, int lag = 0);
//! For computing cross references for json output (i.e. that contains lag information) #1387
void computeJsonXrefs();
//! Execute computations (variable sorting + derivation)
/*!
\param jacobianExo whether derivatives w.r. to exo and exo_det should be in the Jacobian (derivatives w.r. to endo are always computed)
@ -232,9 +220,6 @@ public:
//! Write JSON Output
void writeJsonOutput(ostream &output) const;
//! Write cross reference output if the xref maps have been filed
void writeJsonXrefs(ostream &output) const;
//! Write JSON Output representation of dynamic model after computing pass
void writeJsonComputingPassOutput(ostream &output, bool writeDetails) const;

View File

@ -396,11 +396,6 @@ NumConstNode::computeXrefs(EquationInfo &ei) const
{
}
void
NumConstNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
}
expr_t
NumConstNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -1136,34 +1131,6 @@ VariableNode::computeXrefs(EquationInfo &ei) const
}
}
void
VariableNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
switch (type)
{
case eEndogenous:
ei.endo.insert(make_pair(symb_id, lag));
break;
case eExogenous:
ei.exo.insert(make_pair(symb_id, lag));
break;
case eExogenousDet:
ei.exo_det.insert(make_pair(symb_id, lag));
break;
case eParameter:
ei.param.insert(make_pair(symb_id, 0));
break;
case eTrend:
case eLogTrend:
case eModelLocalVariable:
case eModFileLocalVariable:
case eStatementDeclaredVariable:
case eUnusedEndogenous:
case eExternalFunction:
break;
}
}
expr_t
VariableNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -2591,12 +2558,6 @@ UnaryOpNode::computeXrefs(EquationInfo &ei) const
arg->computeXrefs(ei);
}
void
UnaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
arg->computeJsonXrefs(ei);
}
expr_t
UnaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -4033,13 +3994,6 @@ BinaryOpNode::computeXrefs(EquationInfo &ei) const
arg2->computeXrefs(ei);
}
void
BinaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
arg1->computeJsonXrefs(ei);
arg2->computeJsonXrefs(ei);
}
expr_t
BinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -4807,14 +4761,6 @@ TrinaryOpNode::computeXrefs(EquationInfo &ei) const
arg3->computeXrefs(ei);
}
void
TrinaryOpNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
arg1->computeJsonXrefs(ei);
arg2->computeJsonXrefs(ei);
arg3->computeJsonXrefs(ei);
}
expr_t
TrinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -5698,15 +5644,6 @@ ExternalFunctionNode::computeXrefs(EquationInfo &ei) const
(*it)->computeXrefs(ei);
}
void
ExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
vector<expr_t> dynamic_arguments;
for (vector<expr_t>::const_iterator it = arguments.begin();
it != arguments.end(); it++)
(*it)->computeJsonXrefs(ei);
}
expr_t
ExternalFunctionNode::cloneDynamic(DataTree &dynamic_datatree) const
{
@ -6107,15 +6044,6 @@ FirstDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
(*it)->computeXrefs(ei);
}
void
FirstDerivExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
vector<expr_t> dynamic_arguments;
for (vector<expr_t>::const_iterator it = arguments.begin();
it != arguments.end(); it++)
(*it)->computeJsonXrefs(ei);
}
SecondDerivExternalFunctionNode::SecondDerivExternalFunctionNode(DataTree &datatree_arg,
int top_level_symb_id_arg,
const vector<expr_t> &arguments_arg,
@ -6431,15 +6359,6 @@ SecondDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const
(*it)->computeXrefs(ei);
}
void
SecondDerivExternalFunctionNode::computeJsonXrefs(JsonEquationInfo &ei) const
{
vector<expr_t> dynamic_arguments;
for (vector<expr_t>::const_iterator it = arguments.begin();
it != arguments.end(); it++)
(*it)->computeJsonXrefs(ei);
}
void
SecondDerivExternalFunctionNode::compile(ostream &CompileCode, unsigned int &instruction_number,
bool lhs_rhs, const temporary_terms_t &temporary_terms,

View File

@ -171,14 +171,6 @@ protected:
set<int> exo_det;
};
struct JsonEquationInfo
{
set<pair<int, int> > param;
set<pair<int, int> > endo;
set<pair<int, int> > exo;
set<pair<int, int> > exo_det;
};
public:
ExprNode(DataTree &datatree_arg);
virtual ~ExprNode();
@ -318,7 +310,6 @@ public:
*/
// virtual void computeXrefs(set<int> &param, set<int> &endo, set<int> &exo, set<int> &exo_det) const = 0;
virtual void computeXrefs(EquationInfo &ei) const = 0;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const = 0;
//! Try to normalize an equation linear in its endogenous variable
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const = 0;
@ -506,7 +497,6 @@ public:
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const;
virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
virtual int maxEndoLead() const;
@ -563,7 +553,6 @@ public:
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
SymbolType
get_type() const
{
@ -663,7 +652,6 @@ public:
};
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const;
virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
virtual int maxEndoLead() const;
@ -768,7 +756,6 @@ public:
}
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const;
virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
virtual int maxEndoLead() const;
@ -854,7 +841,6 @@ public:
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const;
virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
virtual int maxEndoLead() const;
@ -942,7 +928,6 @@ public:
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const = 0;
virtual expr_t toStatic(DataTree &static_datatree) const = 0;
virtual void computeXrefs(EquationInfo &ei) const = 0;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const = 0;
virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const;
virtual expr_t getChainRuleDerivative(int deriv_id, const map<int, expr_t> &recursive_variables);
virtual int maxEndoLead() const;
@ -1004,7 +989,6 @@ public:
virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
};
@ -1046,7 +1030,6 @@ public:
deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
};
@ -1090,7 +1073,6 @@ public:
deriv_node_temp_terms_t &tef_terms) const;
virtual expr_t toStatic(DataTree &static_datatree) const;
virtual void computeXrefs(EquationInfo &ei) const;
virtual void computeJsonXrefs(JsonEquationInfo &ei) const;
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
};

View File

@ -414,9 +414,6 @@ ModFile::transformPass(bool nostrict)
// Freeze the symbol table
symbol_table.freeze();
//! Need access to this info after transform pass so calculate it here
dynamic_model.computeJsonXrefs();
/*
Enforce the same number of equations and endogenous, except in three cases:
- ramsey_model, ramsey_policy or discretionary_policy is used