From 7b6f23c55aabf6d6482188842cdef82712ecd71a Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan@dynare.org>
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
-- 
GitLab