From 7b6f23c55aabf6d6482188842cdef82712ecd71a Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Fri, 29 Mar 2019 17:02:29 +0100 Subject: [PATCH] conditional_forecast_paths: add support to write JSON output --- src/Shocks.cc | 28 +++++++++++++++++++++++++++- src/Shocks.hh | 3 ++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/Shocks.cc b/src/Shocks.cc index 0af4541b..e377984f 100644 --- a/src/Shocks.cc +++ b/src/Shocks.cc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2017 Dynare Team + * Copyright (C) 2003-2019 Dynare Team * * This file is part of Dynare. * @@ -484,6 +484,32 @@ ConditionalForecastPathsStatement::writeOutput(ostream &output, const string &ba } } +void +ConditionalForecastPathsStatement::writeJsonOutput(ostream &output) const +{ + output << "{\"statementName\": \"conditional_forecast_paths\"" + << ", \"paths\": ["; + for (auto it = paths.begin(); it != paths.end(); it++) + { + if (it != paths.begin()) + output << ", "; + output << "{\"var\": \"" << symbol_table.getName(it->first) << "\", " + << "\"values\": ["; + for (auto 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, {}, {}); + output << "\"}"; + } + output << "]}"; + } + output << "]}"; +} + MomentCalibration::MomentCalibration(constraints_t constraints_arg, const SymbolTable &symbol_table_arg) : constraints{move(constraints_arg)}, symbol_table{symbol_table_arg} diff --git a/src/Shocks.hh b/src/Shocks.hh index 0b15062e..6a02e1e3 100644 --- a/src/Shocks.hh +++ b/src/Shocks.hh @@ -1,5 +1,5 @@ /* - * Copyright (C) 2003-2017 Dynare Team + * Copyright (C) 2003-2019 Dynare Team * * This file is part of Dynare. * @@ -103,6 +103,7 @@ public: const SymbolTable &symbol_table_arg); void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; + void writeJsonOutput(ostream &output) const override; }; class MomentCalibration : public Statement