preprocessor: JSON output aesthetic fixes, support planner objective. #1387

issue#70
Houtan Bastani 2017-02-27 15:40:34 +01:00
parent 236f1ca7d0
commit 301c9691d9
8 changed files with 43 additions and 65 deletions

View File

@ -668,9 +668,8 @@ RamseyPolicyStatement::writeJsonOutput(ostream &output) const
{ {
output << ", "; output << ", ";
options_list.writeJsonOutput(output); options_list.writeJsonOutput(output);
output << ", ";
} }
output << "\"ramsey_policy_list\": ["; output << ", \"ramsey_policy_list\": [";
for (vector<string>::const_iterator it = ramsey_policy_list.begin(); for (vector<string>::const_iterator it = ramsey_policy_list.begin();
it != ramsey_policy_list.end(); ++it) it != ramsey_policy_list.end(); ++it)
{ {
@ -1827,7 +1826,8 @@ ModelComparisonStatement::writeJsonOutput(ostream &output) const
} }
PlannerObjectiveStatement::PlannerObjectiveStatement(StaticModel *model_tree_arg) : PlannerObjectiveStatement::PlannerObjectiveStatement(StaticModel *model_tree_arg) :
model_tree(model_tree_arg) model_tree(model_tree_arg),
computing_pass_called(false)
{ {
} }
@ -1860,6 +1860,7 @@ void
PlannerObjectiveStatement::computingPass() PlannerObjectiveStatement::computingPass()
{ {
model_tree->computingPass(eval_context_t(), false, true, true, none, false, false); model_tree->computingPass(eval_context_t(), false, true, true, none, false, false);
computing_pass_called = true;
} }
void void
@ -1871,9 +1872,14 @@ PlannerObjectiveStatement::writeOutput(ostream &output, const string &basename,
void void
PlannerObjectiveStatement::writeJsonOutput(ostream &output) const PlannerObjectiveStatement::writeJsonOutput(ostream &output) const
{ {
cerr << "ERROR: writeJsonOutput not yet implemented for Planner Objective Statement" << endl; output << "{\"statementName\": \"planner_objective\""
exit(EXIT_FAILURE); << ", ";
// model_tree->writeStaticJsonFile(basename + "_objective", false, false, false, false); if (computing_pass_called)
model_tree->writeJsonComputingPassOutput(output);
else
model_tree->writeJsonOutput(output);
output << "}";
} }
BVARDensityStatement::BVARDensityStatement(int maxnlags_arg, const OptionsList &options_list_arg) : BVARDensityStatement::BVARDensityStatement(int maxnlags_arg, const OptionsList &options_list_arg) :

View File

@ -449,6 +449,7 @@ class PlannerObjectiveStatement : public Statement
{ {
private: private:
StaticModel *model_tree; StaticModel *model_tree;
bool computing_pass_called;
public: public:
//! Constructor //! Constructor
/*! \param model_tree_arg the model tree used to store the objective function. /*! \param model_tree_arg the model tree used to store the objective function.

View File

@ -5364,7 +5364,7 @@ DynamicModel::writeJsonComputingPassOutput(ostream &output) const
writeJsonModelLocalVariables(model_local_vars_output, tef_terms); writeJsonModelLocalVariables(model_local_vars_output, tef_terms);
writeJsonTemporaryTerms(temporary_terms_res, temp_term_union_m_1, model_output, tef_terms, concat); writeJsonTemporaryTerms(temporary_terms_res, temp_term_union_m_1, model_output, tef_terms, concat);
model_output << ", ";
writeJsonModelEquations(model_output, true); writeJsonModelEquations(model_output, true);
// Writing Jacobian // Writing Jacobian

View File

@ -1291,11 +1291,12 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType
output << "{" << endl; output << "{" << endl;
symbol_table.writeJsonOutput(output); symbol_table.writeJsonOutput(output);
output << ", ";
dynamic_model.writeJsonOutput(output); dynamic_model.writeJsonOutput(output);
if (!statements.empty()) if (!statements.empty())
{ {
output << ",\"statements\": ["; output << ", \"statements\": [";
for (vector<Statement *>::const_iterator it = statements.begin(); for (vector<Statement *>::const_iterator it = statements.begin();
it != statements.end(); it++) it != statements.end(); it++)
{ {
@ -1305,7 +1306,6 @@ ModFile::writeJsonOutputParsingCheck(const string &basename, JsonFileOutputType
} }
output << "]" << endl; output << "]" << endl;
} }
output << "}" << endl; output << "}" << endl;
if (json_output_mode == standardout) if (json_output_mode == standardout)

View File

@ -2028,9 +2028,9 @@ ModelTree::writeJsonModelEquations(ostream &output, bool residuals) const
vector<pair<string,string> > eqtags; vector<pair<string,string> > eqtags;
temporary_terms_t tt_empty; temporary_terms_t tt_empty;
if (residuals) if (residuals)
output << endl << ",\"residuals\":[" << endl; output << endl << "\"residuals\":[" << endl;
else else
output << endl << ",\"model\":[" << endl; output << endl << "\"model\":[" << endl;
for (int eq = 0; eq < (int) equations.size(); eq++) for (int eq = 0; eq < (int) equations.size(); eq++)
{ {
if (eq > 0) if (eq > 0)

View File

@ -2415,6 +2415,12 @@ StaticModel::writeParamsDerivativesFile(const string &basename, bool julia) cons
paramsDerivsFile.close(); paramsDerivsFile.close();
} }
void
StaticModel::writeJsonOutput(ostream &output) const
{
writeJsonModelEquations(output, false);
}
void void
StaticModel::writeJsonComputingPassOutput(ostream &output) const StaticModel::writeJsonComputingPassOutput(ostream &output) const
{ {
@ -2434,7 +2440,7 @@ StaticModel::writeJsonComputingPassOutput(ostream &output) const
writeJsonModelLocalVariables(model_local_vars_output, tef_terms); writeJsonModelLocalVariables(model_local_vars_output, tef_terms);
writeJsonTemporaryTerms(temporary_terms_res, temp_term_union_m_1, model_output, tef_terms, concat); writeJsonTemporaryTerms(temporary_terms_res, temp_term_union_m_1, model_output, tef_terms, concat);
model_output << ", ";
writeJsonModelEquations(model_output, true); writeJsonModelEquations(model_output, true);
int nrows = equations.size(); int nrows = equations.size();

View File

@ -173,6 +173,9 @@ public:
//! Writes static model file //! Writes static model file
void writeStaticFile(const string &basename, bool block, bool bytecode, bool use_dll, bool julia) const; void writeStaticFile(const string &basename, bool block, bool bytecode, bool use_dll, bool julia) const;
//! Write JSON Output (used by PlannerObjectiveStatement)
void writeJsonOutput(ostream &output) const;
//! Write JSON representation of static model //! Write JSON representation of static model
void writeJsonComputingPassOutput(ostream &output) const; void writeJsonComputingPassOutput(ostream &output) const;

View File

@ -965,57 +965,18 @@ SymbolTable::writeJuliaOutput(ostream &output) const throw (NotYetFrozenExceptio
void void
SymbolTable::writeJsonOutput(ostream &output) const SymbolTable::writeJsonOutput(ostream &output) const
{/* {
vector<int> endos, exos, exo_dets, params; output << "\"endogenous\": ";
for (int i = 0; i < size; i++) writeJsonVarVector(output, endo_ids);
{
switch (getType(i))
{
case eEndogenous:
endos.push_back(i);
break;
case eExogenous:
exos.push_back(i);
break;
case eExogenousDet:
exo_dets.push_back(i);
break;
case eParameter:
params.push_back(i);
break;
default:
break;
}
}
*/
if (!endo_ids.empty()) output << ", \"exogenous\":" ;
{ writeJsonVarVector(output, exo_ids);
output << "\"endogenous\":";
writeJsonVarVector(output, endo_ids);
output << endl;
}
if (!exo_ids.empty()) output << ", \"exogenous_deterministic\": ";
{ writeJsonVarVector(output, exo_det_ids);
output << ",\"exogenous\":";
writeJsonVarVector(output, exo_ids);
output << endl;
}
if (!exo_det_ids.empty()) output << ", \"parameters\": ";
{ writeJsonVarVector(output, param_ids);
output << ",\"exogenous_deterministic\":";
writeJsonVarVector(output, exo_det_ids);
output << endl;
}
if (!param_ids.empty())
{
output << ",\"parameters\":";
writeJsonVarVector(output, param_ids);
cout << endl;
}
} }
void void
@ -1024,12 +985,13 @@ SymbolTable::writeJsonVarVector(ostream &output, const vector<int> &varvec) cons
output << "["; output << "[";
for (size_t i = 0; i < varvec.size(); i++) for (size_t i = 0; i < varvec.size(); i++)
{ {
output << endl << "{" if (i != 0)
output << ", ";
output << "{"
<< "\"name\":\"" << getName(varvec[i]) << "\", " << "\"name\":\"" << getName(varvec[i]) << "\", "
<< "\"texName\":\"" << boost::replace_all_copy(getTeXName(varvec[i]), "\\", "\\\\") << "\", " << "\"texName\":\"" << boost::replace_all_copy(getTeXName(varvec[i]), "\\", "\\\\") << "\", "
<< "\"longName\":\"" << boost::replace_all_copy(getLongName(varvec[i]), "\\", "\\\\") << "\"}"; << "\"longName\":\"" << boost::replace_all_copy(getLongName(varvec[i]), "\\", "\\\\") << "\"}"
if (i < varvec.size() - 1) << endl;
output << ", ";
} }
output << endl << "]"; output << "]" << endl;
} }