preprocessor: JSON output for statements, #1387

time-shift
Houtan Bastani 2017-02-08 18:29:57 +01:00
parent 181ffd65c5
commit 1007ea1301
14 changed files with 1607 additions and 38 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2003-2016 Dynare Team
* Copyright (C) 2003-2017 Dynare Team
*
* This file is part of Dynare.
*
@ -36,6 +36,7 @@ public:
SteadyStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class CheckStatement : public Statement
@ -46,6 +47,7 @@ public:
CheckStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SimulStatement : public Statement
@ -56,6 +58,7 @@ public:
SimulStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class PerfectForesightSetupStatement : public Statement
@ -65,6 +68,7 @@ private:
public:
PerfectForesightSetupStatement(const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class PerfectForesightSolverStatement : public Statement
@ -75,6 +79,7 @@ public:
PerfectForesightSolverStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class PriorPosteriorFunctionStatement : public Statement
@ -86,6 +91,7 @@ public:
PriorPosteriorFunctionStatement(const bool prior_func_arg, const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ModelInfoStatement : public Statement
@ -96,6 +102,7 @@ public:
ModelInfoStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class StochSimulStatement : public Statement
@ -108,6 +115,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ForecastStatement : public Statement
@ -119,6 +127,7 @@ public:
ForecastStatement(const SymbolList &symbol_list_arg,
const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class RamseyModelStatement : public Statement
@ -131,6 +140,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class RamseyConstraintsStatement : public Statement
@ -143,11 +153,13 @@ public:
};
typedef vector<Constraint> constraints_t;
private:
const SymbolTable &symbol_table;
const constraints_t constraints;
public:
RamseyConstraintsStatement(const constraints_t &constraints_arg);
RamseyConstraintsStatement(const SymbolTable &symbol_table_arg, const constraints_t &constraints_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
// virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
};
@ -164,6 +176,7 @@ public:
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
void checkRamseyPolicyList();
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class DiscretionaryPolicyStatement : public Statement
@ -176,6 +189,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class RplotStatement : public Statement
@ -185,6 +199,7 @@ private:
public:
RplotStatement(const SymbolList &symbol_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class UnitRootVarsStatement : public Statement
@ -192,6 +207,7 @@ class UnitRootVarsStatement : public Statement
public:
UnitRootVarsStatement(void);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class PeriodsStatement : public Statement
@ -201,6 +217,7 @@ private:
public:
PeriodsStatement(int periods_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class DsampleStatement : public Statement
@ -211,6 +228,7 @@ public:
DsampleStatement(int val1_arg);
DsampleStatement(int val1_arg, int val2_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class EstimationStatement : public Statement
@ -223,6 +241,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class DynareSensitivityStatement : public Statement
@ -233,6 +252,7 @@ public:
DynareSensitivityStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ObservationTrendsStatement : public Statement
@ -246,6 +266,7 @@ public:
ObservationTrendsStatement(const trend_elements_t &trend_elements_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class OsrParamsStatement : public Statement
@ -257,6 +278,7 @@ public:
OsrParamsStatement(const SymbolList &symbol_list_arg, const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class OsrStatement : public Statement
@ -269,6 +291,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
//! Temporary structure used when parsing estimation_params* statements
@ -295,6 +318,7 @@ public:
OsrParamsBoundsStatement(const vector<OsrParams> &osr_params_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class DynaTypeStatement : public Statement
@ -306,6 +330,7 @@ public:
DynaTypeStatement(const SymbolList &symbol_list_arg,
const string &filename_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class DynaSaveStatement : public Statement
@ -317,6 +342,7 @@ public:
DynaSaveStatement(const SymbolList &symbol_list_arg,
const string &filename_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ModelComparisonStatement : public Statement
@ -330,6 +356,7 @@ public:
ModelComparisonStatement(const filename_list_t &filename_list_arg,
const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
//! Temporary structure used when parsing estimation_params* statements
@ -369,6 +396,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class EstimatedParamsInitStatement : public Statement
@ -383,6 +411,7 @@ public:
const bool use_calibration_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class EstimatedParamsBoundsStatement : public Statement
@ -394,6 +423,7 @@ public:
EstimatedParamsBoundsStatement(const vector<EstimationParams> &estim_params_list_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class OptimWeightsStatement : public Statement
@ -411,6 +441,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
/*! \todo Make model_tree a member instead of a pointer */
@ -430,6 +461,7 @@ public:
/*! \todo allow for the possibility of disabling temporary terms */
virtual void computingPass();
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
//! Return the Planner Objective
StaticModel *getPlannerObjective() const;
};
@ -443,6 +475,7 @@ public:
BVARDensityStatement(int maxnlags_arg, const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class BVARForecastStatement : public Statement
@ -454,6 +487,7 @@ public:
BVARForecastStatement(int nlags_arg, const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SBVARStatement : public Statement
@ -464,6 +498,7 @@ public:
SBVARStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVAREstimationStatement : public Statement
@ -474,6 +509,7 @@ public:
MSSBVAREstimationStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARSimulationStatement : public Statement
@ -484,6 +520,7 @@ public:
MSSBVARSimulationStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARComputeMDDStatement : public Statement
@ -494,6 +531,7 @@ public:
MSSBVARComputeMDDStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARComputeProbabilitiesStatement : public Statement
@ -504,6 +542,7 @@ public:
MSSBVARComputeProbabilitiesStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARIrfStatement : public Statement
@ -516,6 +555,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARForecastStatement : public Statement
@ -526,6 +566,7 @@ public:
MSSBVARForecastStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MSSBVARVarianceDecompositionStatement : public Statement
@ -536,6 +577,7 @@ public:
MSSBVARVarianceDecompositionStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class IdentificationStatement : public Statement
@ -546,6 +588,7 @@ public:
IdentificationStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class WriteLatexDynamicModelStatement : public Statement
@ -555,6 +598,7 @@ private:
public:
WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class WriteLatexStaticModelStatement : public Statement
@ -564,6 +608,7 @@ private:
public:
WriteLatexStaticModelStatement(const StaticModel &static_model_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class WriteLatexOriginalModelStatement : public Statement
@ -573,6 +618,7 @@ private:
public:
WriteLatexOriginalModelStatement(const DynamicModel &original_model_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ShockDecompositionStatement : public Statement
@ -584,6 +630,7 @@ public:
ShockDecompositionStatement(const SymbolList &symbol_list_arg,
const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ConditionalForecastStatement : public Statement
@ -593,6 +640,7 @@ private:
public:
ConditionalForecastStatement(const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class PlotConditionalForecastStatement : public Statement
@ -604,6 +652,7 @@ private:
public:
PlotConditionalForecastStatement(int periods_arg, const SymbolList &symbol_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class CalibSmootherStatement : public Statement
@ -616,6 +665,7 @@ public:
const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ExtendedPathStatement : public Statement
@ -626,6 +676,7 @@ public:
ExtendedPathStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SvarIdentificationStatement : public Statement
@ -657,6 +708,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MarkovSwitchingStatement : public Statement
@ -669,6 +721,7 @@ public:
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class SvarStatement : public Statement
@ -679,6 +732,7 @@ public:
SvarStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SvarGlobalIdentificationCheckStatement : public Statement
@ -686,6 +740,7 @@ class SvarGlobalIdentificationCheckStatement : public Statement
public:
SvarGlobalIdentificationCheckStatement();
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SetTimeStatement : public Statement
@ -695,6 +750,7 @@ private:
public:
SetTimeStatement(const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class EstimationDataStatement : public Statement
@ -705,6 +761,7 @@ public:
EstimationDataStatement(const OptionsList &options_list_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SubsamplesStatement : public Statement
@ -724,6 +781,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SubsamplesEqualStatement : public Statement
@ -741,6 +799,7 @@ public:
const string &from_name2_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class JointPriorStatement : public Statement
@ -756,6 +815,7 @@ public:
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const;
virtual void writeJsonOutput(ostream &output) const;
};
@ -788,6 +848,8 @@ protected:
void writeCShape(ostream &output) const;
void writeCVarianceOption(ostream &output) const;
void writeCDomain(ostream &output) const;
void writeJsonShape(ostream &output) const;
void writeJsonPriorOutput(ostream &output) const;
};
class PriorStatement : public BasicPriorStatement
@ -800,6 +862,7 @@ public:
const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class StdPriorStatement : public BasicPriorStatement
@ -815,6 +878,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class CorrPriorStatement : public BasicPriorStatement
@ -833,6 +897,7 @@ public:
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class PriorEqualStatement : public Statement
@ -860,6 +925,7 @@ public:
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class BasicOptionsStatement : public Statement
@ -882,6 +948,7 @@ protected:
void writeOptionsIndex(ostream &output, const string &lhs_field) const;
void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const;
void writeCOutputHelper(ostream &output, const string &field) const;
void writeJsonOptionsOutput(ostream &output) const;
};
class OptionsStatement : public BasicOptionsStatement
@ -890,6 +957,7 @@ public:
OptionsStatement(const string &name_arg, const string &subsample_name_arg, const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class StdOptionsStatement : public BasicOptionsStatement
@ -903,6 +971,7 @@ public:
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class CorrOptionsStatement : public BasicOptionsStatement
@ -918,6 +987,7 @@ public:
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeCOutput(ostream &output, const string &basename);
virtual void writeJsonOutput(ostream &output) const;
};
class OptionsEqualStatement : public Statement
@ -945,6 +1015,7 @@ public:
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ModelDiagnosticsStatement : public Statement
@ -952,6 +1023,7 @@ class ModelDiagnosticsStatement : public Statement
public:
ModelDiagnosticsStatement();
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class Smoother2histvalStatement : public Statement
@ -961,6 +1033,7 @@ private:
public:
Smoother2histvalStatement(const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
#endif

View File

@ -1259,29 +1259,12 @@ ModFile::writeJsonOutput(const string &basename, JsonFileOutputType json_output_
if (!statements.empty())
{
output << ",\"statements\": [";
bool printed_statement = false;
for (vector<Statement *>::const_iterator it = statements.begin();
it != statements.end();)
it != statements.end(); it++)
{
if (it != statements.begin())
output << ", " << endl;
(*it)->writeJsonOutput(output);
if (dynamic_cast<InitParamStatement *>(*it) != NULL ||
dynamic_cast<InitValStatement *>(*it) != NULL ||
dynamic_cast<EndValStatement *>(*it) != NULL ||
dynamic_cast<HistValStatement *>(*it) != NULL)
printed_statement = true;
if (++it == statements.end())
break;
// tests to see if the next statement will be one for which we support writing JSON files
// to be deleted once we support all statements
if (printed_statement &&
(dynamic_cast<InitParamStatement *>(*it) != NULL ||
dynamic_cast<InitValStatement *>(*it) != NULL ||
dynamic_cast<EndValStatement *>(*it) != NULL ||
dynamic_cast<HistValStatement *>(*it) != NULL))
output << "," << endl;
}
output << "]" << endl;
}

View File

@ -177,16 +177,15 @@ InitOrEndValStatement::writeInitValues(ostream &output) const
void
InitOrEndValStatement::writeJsonInitValues(ostream &output) const
{
int i = 0;
deriv_node_temp_terms_t tef_terms;
for (init_values_t::const_iterator it = init_values.begin();
it != init_values.end(); it++, i++)
it != init_values.end(); it++)
{
if (it != init_values.begin())
output << ", ";
output << "{\"name\": \"" << symbol_table.getName(it->first) << "\", " << "\"value\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
if (i < init_values.size() - 1)
output << ", ";
}
}
@ -419,19 +418,18 @@ HistValStatement::writeOutput(ostream &output, const string &basename, bool mini
void
HistValStatement::writeJsonOutput(ostream &output) const
{
int i = 0;
deriv_node_temp_terms_t tef_terms;
output << "{\"statementName\": \"hist_val\", \"vals\": [";
for (hist_values_t::const_iterator it = hist_values.begin();
it != hist_values.end(); it++)
{
if (it != hist_values.begin())
output << ", ";
output << "{ \"name\": \"" << symbol_table.getName(it->first.first) << "\""
<< ", \"lag\": " << it->first.second
<< ", \"value\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
if (i < hist_values.size() - 1)
output << ", ";
}
output << "]}";
}
@ -451,6 +449,14 @@ InitvalFileStatement::writeOutput(ostream &output, const string &basename, bool
<< "initvalf('" << filename << "');" << endl;
}
void
InitvalFileStatement::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"init_val_file\""
<< ", \"filename\": \"" << filename << "\""
<< "}";
}
HistvalFileStatement::HistvalFileStatement(const string &filename_arg) :
filename(filename_arg)
{
@ -462,6 +468,14 @@ HistvalFileStatement::writeOutput(ostream &output, const string &basename, bool
output << "histvalf('" << filename << "');" << endl;
}
void
HistvalFileStatement::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"hist_val_file\""
<< ", \"filename\": \"" << filename << "\""
<< "}";
}
HomotopyStatement::HomotopyStatement(const homotopy_values_t &homotopy_values_arg,
const SymbolTable &symbol_table_arg) :
homotopy_values(homotopy_values_arg),
@ -498,6 +512,31 @@ HomotopyStatement::writeOutput(ostream &output, const string &basename, bool min
}
}
void
HomotopyStatement::writeJsonOutput(ostream &output) const
{
deriv_node_temp_terms_t tef_terms;
output << "{\"statementName\": \"homotopy\", "
<< "\"values\": [";
for (homotopy_values_t::const_iterator it = homotopy_values.begin();
it != homotopy_values.end(); it++)
{
if (it != homotopy_values.begin())
output << ", ";
output << "{\"name\": \"" << symbol_table.getName(it->first) << "\""
<< ", \"initial_value\": \"";
if (it->second.first != NULL)
it->second.first->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
else
output << "NaN";
output << "\", \"final_value\": \"";
it->second.second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]"
<< "}";
}
SaveParamsAndSteadyStateStatement::SaveParamsAndSteadyStateStatement(const string &filename_arg) :
filename(filename_arg)
{
@ -509,6 +548,14 @@ SaveParamsAndSteadyStateStatement::writeOutput(ostream &output, const string &ba
output << "save_params_and_steady_state('" << filename << "');" << endl;
}
void
SaveParamsAndSteadyStateStatement::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"save_params_and_steady_state\""
<< ", \"filename\": \"" << filename << "\""
<< "}";
}
LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const string &filename,
const SymbolTable &symbol_table_arg,
WarningConsolidation &warnings) :
@ -574,6 +621,24 @@ LoadParamsAndSteadyStateStatement::writeOutput(ostream &output, const string &ba
}
}
void
LoadParamsAndSteadyStateStatement::writeJsonOutput(ostream &output) const
{
deriv_node_temp_terms_t tef_terms;
output << "{\"statementName\": \"load_params_and_steady_state\""
<< "\"values\": [";
for (map<int, string>::const_iterator it = content.begin();
it != content.end(); it++)
{
if (it != content.begin())
output << ", ";
output << "{\"name\": \"" << symbol_table.getName(it->first) << "\""
<< ", \"value\": \"" << it->second << "\"}";
}
output << "]"
<< "}";
}
void
LoadParamsAndSteadyStateStatement::fillEvalContext(eval_context_t &eval_context) const
{

View File

@ -128,6 +128,7 @@ private:
public:
InitvalFileStatement(const string &filename_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class HistvalFileStatement : public Statement
@ -137,6 +138,7 @@ private:
public:
HistvalFileStatement(const string &filename_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class HomotopyStatement : public Statement
@ -152,6 +154,7 @@ public:
HomotopyStatement(const homotopy_values_t &homotopy_values_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class SaveParamsAndSteadyStateStatement : public Statement
@ -161,6 +164,7 @@ private:
public:
SaveParamsAndSteadyStateStatement(const string &filename_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class LoadParamsAndSteadyStateStatement : public Statement
@ -177,6 +181,7 @@ public:
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
//! Fill eval context with parameters/variables values
void fillEvalContext(eval_context_t &eval_context) const;
virtual void writeJsonOutput(ostream &output) const;
};
#endif

View File

@ -2934,7 +2934,7 @@ ParsingDriver::prior_posterior_function(bool prior_func)
void
ParsingDriver::add_ramsey_constraints_statement()
{
mod_file->addStatement(new RamseyConstraintsStatement(ramsey_constraints));
mod_file->addStatement(new RamseyConstraintsStatement(mod_file->symbol_table, ramsey_constraints));
ramsey_constraints.clear();
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2003-2016 Dynare Team
* Copyright (C) 2003-2017 Dynare Team
*
* This file is part of Dynare.
*
@ -67,6 +67,34 @@ AbstractShocksStatement::writeDetShocks(ostream &output) const
output << "M_.exo_det_length = " << exo_det_length << ";\n";
}
void
AbstractShocksStatement::writeJsonDetShocks(ostream &output) const
{
deriv_node_temp_terms_t tef_terms;
output << "\"deterministic_shocks\": [";
for (det_shocks_t::const_iterator it = det_shocks.begin();
it != det_shocks.end(); it++)
{
if (it != det_shocks.begin())
output << ", ";
output << "{\"var\": \"" << symbol_table.getName(it->first) << "\", "
<< "\"values\": [";
for (vector<DetShockElement>::const_iterator it1 = it->second.begin();
it1 != it->second.end(); it1++)
{
if (it1 != it->second.begin())
output << ", ";
output << "{\"period1\": " << it1->period1 << ", "
<< "\"period2\": " << it1->period2 << ", "
<< "\"value\": \"";
it1->value->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]}";
}
output << "]";
}
ShocksStatement::ShocksStatement(bool overwrite_arg,
const det_shocks_t &det_shocks_arg,
const var_and_std_shocks_t &var_shocks_arg,
@ -123,6 +151,73 @@ ShocksStatement::writeOutput(ostream &output, const string &basename, bool minim
output << "M_.sigma_e_is_diagonal = 1;" << endl;
}
void
ShocksStatement::writeJsonOutput(ostream &output) const
{
deriv_node_temp_terms_t tef_terms;
output << "{\"statementName\": \"shocks\""
<< ", \"overwrite\": ";
if (overwrite)
output << "true";
else
output << "false";
if (!det_shocks.empty())
{
output << ", ";
writeJsonDetShocks(output);
}
output<< ", \"variance\": [";
for (var_and_std_shocks_t::const_iterator it = var_shocks.begin(); it != var_shocks.end(); it++)
{
if (it != var_shocks.begin())
output << ", ";
output << "{\"name\": \"" << symbol_table.getName(it->first) << "\", "
<< "\"variance\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]"
<< ", \"stderr\": [";
for (var_and_std_shocks_t::const_iterator it = std_shocks.begin(); it != std_shocks.end(); it++)
{
if (it != std_shocks.begin())
output << ", ";
output << "{\"name\": \"" << symbol_table.getName(it->first) << "\", "
<< "\"stderr\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]"
<< ", \"covariance\": [";
for (covar_and_corr_shocks_t::const_iterator it = covar_shocks.begin(); it != covar_shocks.end(); it++)
{
if (it != covar_shocks.begin())
output << ", ";
output << "{"
<< "\"name\": \"" << symbol_table.getName(it->first.first) << "\", "
<< "\"name2\": \"" << symbol_table.getName(it->first.second) << "\", "
<< "\"covariance\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]"
<< ", \"correlation\": [";
for (covar_and_corr_shocks_t::const_iterator it = corr_shocks.begin(); it != corr_shocks.end(); it++)
{
if (it != corr_shocks.begin())
output << ", ";
output << "{"
<< "\"name\": \"" << symbol_table.getName(it->first.first) << "\", "
<< "\"name2\": \"" << symbol_table.getName(it->first.second) << "\", "
<< "\"correlation\": \"";
it->second->writeJsonOutput(output, oMatlabOutsideModel, temporary_terms_t(), tef_terms);
output << "\"}";
}
output << "]"
<< "}";
}
void
ShocksStatement::writeVarOrStdShock(ostream &output, var_and_std_shocks_t::const_iterator &it,
bool stddev) const
@ -430,6 +525,26 @@ MomentCalibration::writeOutput(ostream &output, const string &basename, bool min
output << "};" << endl;
}
void
MomentCalibration::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"moment_calibration\""
<< ", \"moment_calibration_criteria\": [";
for (constraints_t::const_iterator it = constraints.begin(); it != constraints.end(); it++)
{
if (it != constraints.begin())
output << ", ";
output << "{\"endogenous1\": \"" << symbol_table.getName(it->endo1) << "\""
<< ", \"endogenous2\": \"" << symbol_table.getName(it->endo2) << "\""
<< ", \"lags\": \"" << it->lags << "\""
<< ", \"lower_bound\": \"" << it->lower_bound << "\""
<< ", \"upper_bound\": \"" << it->upper_bound << "\""
<< "}";
}
output << "]"
<< "}";
}
IrfCalibration::IrfCalibration(const constraints_t &constraints_arg,
const SymbolTable &symbol_table_arg,
const OptionsList &options_list_arg)
@ -455,6 +570,32 @@ IrfCalibration::writeOutput(ostream &output, const string &basename, bool minima
output << "};" << endl;
}
void
IrfCalibration::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"irf_calibration\"";
if (options_list.getNumberOfOptions())
{
output << ", ";
options_list.writeJsonOutput(output);
}
output << ", \"irf_restrictions\": [";
for (constraints_t::const_iterator it = constraints.begin(); it != constraints.end(); it++)
{
if (it != constraints.begin())
output << ", ";
output << "{\"endogenous\": \"" << symbol_table.getName(it->endo) << "\""
<< ", \"exogenous\": \"" << symbol_table.getName(it->exo) << "\""
<< ", \"periods\": \"" << it->periods << "\""
<< ", \"lower_bound\": \"" << it->lower_bound << "\""
<< ", \"upper_bound\": \"" << it->upper_bound << "\""
<< "}";
}
output << "]"
<< "}";
}
ShockGroupsStatement::ShockGroupsStatement(const group_t &shock_groups_arg, const string &name_arg)
: shock_groups(shock_groups_arg), name(name_arg)
{

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2003-2016 Dynare Team
* Copyright (C) 2003-2017 Dynare Team
*
* This file is part of Dynare.
*
@ -50,6 +50,7 @@ protected:
const det_shocks_t det_shocks;
const SymbolTable &symbol_table;
void writeDetShocks(ostream &output) const;
void writeJsonDetShocks(ostream &output) const;
AbstractShocksStatement(bool mshocks_arg, bool overwrite_arg,
const det_shocks_t &det_shocks_arg,
@ -77,8 +78,9 @@ public:
const covar_and_corr_shocks_t &covar_shocks_arg,
const covar_and_corr_shocks_t &corr_shocks_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class MShocksStatement : public AbstractShocksStatement
@ -120,6 +122,7 @@ public:
MomentCalibration(const constraints_t &constraints_arg,
const SymbolTable &symbol_table_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class IrfCalibration : public Statement
@ -141,6 +144,7 @@ public:
const SymbolTable &symbol_table_arg,
const OptionsList &options_list_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class ShockGroupsStatement : public Statement

View File

@ -109,6 +109,14 @@ NativeStatement::writeOutput(ostream &output, const string &basename, bool minim
output << ns << endl;
}
void
NativeStatement::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"native\""
<< ", \"string\": \"" << native_statement << "\""
<< "}";
}
VerbatimStatement::VerbatimStatement(const string &verbatim_statement_arg) :
verbatim_statement(verbatim_statement_arg)
{
@ -120,6 +128,14 @@ VerbatimStatement::writeOutput(ostream &output, const string &basename, bool min
output << verbatim_statement << endl;
}
void
VerbatimStatement::writeJsonOutput(ostream &output) const
{
output << "{\"statementName\": \"verbatim\""
<< ", \"string\": \"" << verbatim_statement << "\""
<< "}";
}
void
OptionsList::writeOutput(ostream &output) const
{
@ -213,6 +229,100 @@ OptionsList::writeOutput(ostream &output, const string &option_group) const
}
}
void
OptionsList::writeJsonOutput(ostream &output) const
{
if (getNumberOfOptions() == 0)
return;
output << "\"options\": {";
for (num_options_t::const_iterator it = num_options.begin();
it != num_options.end();)
{
output << "\""<< it->first << "\": " << it->second;
it++;
if (it != num_options.end() ||
!(paired_num_options.empty() &&
string_options.empty() &&
date_options.empty() &&
symbol_list_options.empty() &&
vector_int_options.empty()))
output << ", ";
}
for (paired_num_options_t::const_iterator it = paired_num_options.begin();
it != paired_num_options.end();)
{
output << "\""<< it->first << "\": [" << it->second.first << " " << it->second.second << "]";
it++;
if (it != paired_num_options.end() ||
!(string_options.empty() &&
date_options.empty() &&
symbol_list_options.empty() &&
vector_int_options.empty()))
output << ", ";
}
for (string_options_t::const_iterator it = string_options.begin();
it != string_options.end();)
{
output << "\""<< it->first << "\": \"" << it->second << "\"";
it++;
if (it != string_options.end() ||
!(date_options.empty() &&
symbol_list_options.empty() &&
vector_int_options.empty()))
output << ", ";
}
for (date_options_t::const_iterator it = date_options.begin();
it != date_options.end();)
{
output << "\""<< it->first << "\": \"" << it->second << "\"";
it++;
if (it != date_options.end() ||
!(symbol_list_options.empty() &&
vector_int_options.empty()))
output << ", ";
}
for (symbol_list_options_t::const_iterator it = symbol_list_options.begin();
it != symbol_list_options.end(); it++)
{
output << "\""<< it->first << "\":";
it->second.writeJsonOutput(output);
it++;
if (it != symbol_list_options.end() ||
!vector_int_options.empty())
output << ", ";
}
for (vec_int_options_t::const_iterator it = vector_int_options.begin();
it != vector_int_options.end();)
{
output << "\""<< it->first << "\": [";
if (it->second.size() > 1)
{
for (vector<int>::const_iterator viit = it->second.begin();
viit != it->second.end();)
{
output << *viit;
viit++;
if (viit != it->second.end())
output << ", ";
}
}
else
output << it->second.front() << endl;
output << "]";
it++;
if (it != vector_int_options.end())
output << ", ";
}
output << "}";
}
void
OptionsList::clear()
{
@ -223,3 +333,14 @@ OptionsList::clear()
symbol_list_options.clear();
vector_int_options.clear();
}
int
OptionsList::getNumberOfOptions() const
{
return num_options.size()
+ paired_num_options.size()
+ string_options.size()
+ date_options.size()
+ symbol_list_options.size()
+ vector_int_options.size();
}

View File

@ -154,6 +154,7 @@ private:
public:
NativeStatement(const string &native_statement_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class VerbatimStatement : public Statement
@ -163,6 +164,7 @@ private:
public:
VerbatimStatement(const string &verbatim_statement_arg);
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
virtual void writeJsonOutput(ostream &output) const;
};
class OptionsList
@ -180,8 +182,10 @@ public:
date_options_t date_options;
symbol_list_options_t symbol_list_options;
vec_int_options_t vector_int_options;
int getNumberOfOptions() const;
void writeOutput(ostream &output) const;
void writeOutput(ostream &output, const string &option_group) const;
void writeJsonOutput(ostream &output) const;
void clear();
};

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2003-2014 Dynare Team
* Copyright (C) 2003-2017 Dynare Team
*
* This file is part of Dynare.
*
@ -39,6 +39,20 @@ SymbolList::writeOutput(const string &varname, ostream &output) const
output << ");" << endl;
}
void
SymbolList::writeJsonOutput(ostream &output) const
{
output << "\"symbol_list\": [";
for (vector<string>::const_iterator it = symbols.begin();
it != symbols.end(); ++it)
{
if (it != symbols.begin())
output << ",";
output << "\"" << *it << "\"";
}
output << "]";
}
void
SymbolList::clear()
{

View File

@ -1,5 +1,5 @@
/*
* Copyright (C) 2003-2011 Dynare Team
* Copyright (C) 2003-2017 Dynare Team
*
* This file is part of Dynare.
*
@ -39,6 +39,8 @@ public:
//! Output content in Matlab format
/*! Creates a string array for Matlab, stored in variable "varname" */
void writeOutput(const string &varname, ostream &output) const;
//! Write JSON output
void writeJsonOutput(ostream &output) const;
//! Clears all content
void clear();
//! Get a copy of the string vector

1
tests/.gitignore vendored
View File

@ -12,6 +12,7 @@
*.prn
*_simul
*-macroexp.mod
*.json
wsOct
/run_test_octave_output.txt

View File

@ -893,7 +893,11 @@ clean-local:
$(patsubst %.trs, %.log, $(M_TRS_FILES)) \
$(patsubst %.trs, %.log, $(M_XFAIL_TRS_FILES)) \
$(patsubst %.trs, %.log, $(O_TRS_FILES)) \
$(patsubst %.trs, %.log, $(O_XFAIL_TRS_FILES))
$(patsubst %.trs, %.log, $(O_XFAIL_TRS_FILES)) \
$(patsubst %.trs, %.json, $(M_TRS_FILES)) \
$(patsubst %.trs, %.json, $(M_XFAIL_TRS_FILES)) \
$(patsubst %.trs, %.json, $(O_TRS_FILES)) \
$(patsubst %.trs, %.json, $(O_XFAIL_TRS_FILES))
rm -f $(patsubst %.mod, %.m, $(MODFILES)) \
$(patsubst %.mod, %_static.*, $(MODFILES)) \