From 6ba10b88f22e5a3bf429b60a74c12eb1f180b3eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 18 Dec 2019 11:55:53 +0100
Subject: [PATCH] Preprocessor: various provisions for improvements to shock
 decomposition
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Accordingly update the MATLAB routines, the testsuite, and the manual.

In particular, “squeeze_shock_decomp” has been renamed to
“squeeze_shock_decomposition” for consistency with other commands.

Ref. #1687, !1655
---
 doc/manual/source/the-model-file.rst          | 21 +++++++++++++++++++
 matlab/graph_decomp_detail.m                  |  6 +-----
 matlab/initial_condition_decomposition.m      |  1 +
 ..._initial_condition_decomposition_options.m |  1 +
 ...default_plot_shock_decomposition_options.m |  1 +
 ...decomp.m => squeeze_shock_decomposition.m} |  2 +-
 preprocessor                                  |  2 +-
 scripts/dynare.el                             |  3 ++-
 tests/shock_decomposition/ls2003_plot.mod     |  6 +++---
 9 files changed, 32 insertions(+), 11 deletions(-)
 rename matlab/{squeeze_shock_decomp.m => squeeze_shock_decomposition.m} (96%)

diff --git a/doc/manual/source/the-model-file.rst b/doc/manual/source/the-model-file.rst
index dedafd797f..6ed77ce8de 100644
--- a/doc/manual/source/the-model-file.rst
+++ b/doc/manual/source/the-model-file.rst
@@ -7373,6 +7373,11 @@ Shock Decomposition
         If used in combination with :opt:`diff`, the ``diff`` operator is first applied. 
         Default: not activated
 
+    .. option:: max_nrows
+
+        Maximum number of rows in the subplot layout of detailed shock
+        decomposition graphs. Note that columns are always 3. Default: 6
+
 .. command:: initial_condition_decomposition [VARIABLE_NAME]...;
              initial_condition_decomposition (OPTIONS...) [VARIABLE_NAME]...;
 
@@ -7459,6 +7464,22 @@ Shock Decomposition
         If used in combination with :opt:`diff`, the ``diff`` operator is first applied. 
         Default: not activated
 
+.. command:: squeeze_shock_decomposition [VARIABLE_NAME]...;
+
+    |br| For large models, the size of the information stored by shock
+    decompositions (especially various settings of realtime decompositions) may
+    become huge. This command allows to squeeze this information in two
+    possible ways:
+
+        * Automatic (default): only the variables for which plotting has been
+          explicitly required with `plot_shock_decomposition` will have their
+          decomposition left in `oo_` after this command is run;
+
+        * If a list of variables is passed to the command, then only those
+          variables will have their decomposition left in `oo_` after this
+          command is run.
+
+
 Calibrated Smoother
 ===================
 
diff --git a/matlab/graph_decomp_detail.m b/matlab/graph_decomp_detail.m
index 448abae6c7..a928a1657e 100644
--- a/matlab/graph_decomp_detail.m
+++ b/matlab/graph_decomp_detail.m
@@ -60,11 +60,7 @@ if isfield(opts_decomp,'init_cond_decomp')
 else
     init_cond_decomp = 0;
 end
-if isfield(opts_decomp,'min_nrows')
-    min_nrows = opts_decomp.min_nrows ;
-else
-    max_nrows = 6;
-end
+max_nrows = opts_decomp.max_nrows;
 screen_shocks = opts_decomp.screen_shocks;
 if ~isempty(DynareOptions.plot_shock_decomp.use_shock_groups) || comp_nbr<=18
     screen_shocks=0;
diff --git a/matlab/initial_condition_decomposition.m b/matlab/initial_condition_decomposition.m
index 12e39691a2..db35777ae1 100644
--- a/matlab/initial_condition_decomposition.m
+++ b/matlab/initial_condition_decomposition.m
@@ -51,6 +51,7 @@ options_.plot_shock_decomp.plot_init_date = options_.initial_condition_decomp.pl
 options_.plot_shock_decomp.plot_end_date = options_.initial_condition_decomp.plot_end_date;
 options_.plot_shock_decomp.diff = options_.initial_condition_decomp.diff;
 options_.plot_shock_decomp.flip = options_.initial_condition_decomp.flip;
+options_.plot_shock_decomp.max_nrows = options_.initial_condition_decomp.max_nrows;
 
 if isfield(options_.initial_condition_decomp,'init2shocks') % private trap for uimenu calls
     init2shocks=options_.initial_condition_decomp.init2shocks;
diff --git a/matlab/set_default_initial_condition_decomposition_options.m b/matlab/set_default_initial_condition_decomposition_options.m
index 58ecfff142..167addad5a 100644
--- a/matlab/set_default_initial_condition_decomposition_options.m
+++ b/matlab/set_default_initial_condition_decomposition_options.m
@@ -41,4 +41,5 @@ options.initial_condition_decomp.plot_init_date = [];
 options.initial_condition_decomp.plot_end_date = [];
 options.initial_condition_decomp.diff = false;
 options.initial_condition_decomp.flip = false;
+options.initial_condition_decomp.max_nrows = 6;
 end
diff --git a/matlab/set_default_plot_shock_decomposition_options.m b/matlab/set_default_plot_shock_decomposition_options.m
index ecef090bf7..385884e970 100644
--- a/matlab/set_default_plot_shock_decomposition_options.m
+++ b/matlab/set_default_plot_shock_decomposition_options.m
@@ -51,4 +51,5 @@ options.plot_shock_decomp.plot_init_date = [];
 options.plot_shock_decomp.plot_end_date = [];
 options.plot_shock_decomp.diff = false;
 options.plot_shock_decomp.flip = false;
+options.plot_shock_decomp.max_nrows = 6;
 end
diff --git a/matlab/squeeze_shock_decomp.m b/matlab/squeeze_shock_decomposition.m
similarity index 96%
rename from matlab/squeeze_shock_decomp.m
rename to matlab/squeeze_shock_decomposition.m
index 49073ee082..3fbfa13617 100644
--- a/matlab/squeeze_shock_decomp.m
+++ b/matlab/squeeze_shock_decomposition.m
@@ -1,4 +1,4 @@
-function oo_ = squeeze_shock_decomp(M_,oo_,options_,var_list_)
+function oo_ = squeeze_shock_decomposition(M_,oo_,options_,var_list_)
 
 if isfield(oo_,'plot_shock_decomposition_info') && isfield(oo_.plot_shock_decomposition_info','i_var')
     my_vars = oo_.plot_shock_decomposition_info.i_var;
diff --git a/preprocessor b/preprocessor
index 031c0cff5f..c2461981d2 160000
--- a/preprocessor
+++ b/preprocessor
@@ -1 +1 @@
-Subproject commit 031c0cff5fca274ea1e75c70623a8e8be93269bb
+Subproject commit c2461981d2917c69c3decfc55bf2aaf006057c52
diff --git a/scripts/dynare.el b/scripts/dynare.el
index 3be0998a85..debcafaea1 100644
--- a/scripts/dynare.el
+++ b/scripts/dynare.el
@@ -68,7 +68,8 @@
     "discretionary_policy" "identification" "bvar_density" "bvar_forecast"
     "dynare_sensitivity" "initval_file" "histval_file" "forecast"
     "shock_decomposition" "realtime_shock_decomposition"
-    "plot_shock_decomposition" "initial_condition_decomposition" "sbvar"
+    "plot_shock_decomposition" "initial_condition_decomposition"
+    "squeeze_shock_decomposition" "sbvar"
     "ms_estimation" "ms_simulation" "ms_compute_mdd" "ms_compute_probabilities"
     "ms_forecast" "ms_irf" "ms_variance_decomposition" "conditional_forecast"
     "plot_conditional_forecast" "gmm_estimation" "smm_estimation"
diff --git a/tests/shock_decomposition/ls2003_plot.mod b/tests/shock_decomposition/ls2003_plot.mod
index 3ef63d277e..a3134d2faa 100644
--- a/tests/shock_decomposition/ls2003_plot.mod
+++ b/tests/shock_decomposition/ls2003_plot.mod
@@ -85,7 +85,7 @@ end;
 options_.initial_date=dates('1989Q4'); % date arbitrarily set for testing purposes
 shock_decomposition(nograph);
 // test for nothing to squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 // standard plot
 plot_shock_decomposition y_obs R_obs pie_obs dq de;
@@ -112,7 +112,7 @@ close all,
 realtime_shock_decomposition(forecast=8, save_realtime=[5 9 13 17 21 25 29 33 37 41 45 49 53 57 61 65 69 73 77]) y_obs R_obs pie_obs dq de;
 
 // test squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 //realtime pooled
 plot_shock_decomposition(realtime = 1) y_obs R_obs pie_obs dq de;
@@ -157,7 +157,7 @@ close all,
 realtime_shock_decomposition(fast_realtime=75) y_obs R_obs pie_obs dq de;
 
 // re-test squeeze
-oo_ = squeeze_shock_decomp(M_,oo_,options_);
+squeeze_shock_decomposition;
 
 collect_latex_files;
 if system(['pdflatex -halt-on-error -interaction=batchmode ' M_.fname '_TeX_binder.tex'])
-- 
GitLab