From f3843b492188eeb2d0d07be146da142002de7d96 Mon Sep 17 00:00:00 2001
From: Houtan Bastani <houtan@dynare.org>
Date: Wed, 4 May 2016 15:17:54 +0200
Subject: [PATCH] preprocessor: support sub lists in posterior_sampling_opt
 option, hence removing tarb_optim. #1177

---
 preprocessor/DynareBison.yy   | 45 +++++++++++++++++++++++++----------
 preprocessor/DynareFlex.ll    |  1 -
 preprocessor/ParsingDriver.cc | 28 ----------------------
 preprocessor/ParsingDriver.hh |  5 ----
 4 files changed, 33 insertions(+), 46 deletions(-)

diff --git a/preprocessor/DynareBison.yy b/preprocessor/DynareBison.yy
index 17bd9ed204..56da1fdf06 100644
--- a/preprocessor/DynareBison.yy
+++ b/preprocessor/DynareBison.yy
@@ -86,7 +86,7 @@ class ParsingDriver;
 %token AIM_SOLVER ANALYTIC_DERIVATION AR AUTOCORR POSTERIOR_SAMPLING_METHOD
 %token BAYESIAN_IRF BETA_PDF BLOCK USE_CALIBRATION SILENT_OPTIMIZER
 %token BVAR_DENSITY BVAR_FORECAST NODECOMPOSITION DR_DISPLAY_TOL HUGE_NUMBER
-%token BVAR_PRIOR_DECAY BVAR_PRIOR_FLAT BVAR_PRIOR_LAMBDA TARB_OPTIM
+%token BVAR_PRIOR_DECAY BVAR_PRIOR_FLAT BVAR_PRIOR_LAMBDA
 %token BVAR_PRIOR_MU BVAR_PRIOR_OMEGA BVAR_PRIOR_TAU BVAR_PRIOR_TRAIN
 %token BVAR_REPLIC BYTECODE ALL_VALUES_REQUIRED PROPOSAL_DISTRIBUTION
 %token CALIB_SMOOTHER CHANGE_TYPE CHECK CONDITIONAL_FORECAST CONDITIONAL_FORECAST_PATHS CONF_SIG CONSTANT CONTROLLED_VAREXO CORR COVAR CUTOFF CYCLE_REDUCTION LOGARITHMIC_REDUCTION
@@ -180,7 +180,7 @@ class ParsingDriver;
 %type <string_val> filename symbol vec_of_vec_value vec_value_list date_expr
 %type <string_val> vec_value_1 vec_value signed_inf signed_number_w_inf
 %type <string_val> range vec_value_w_inf vec_value_1_w_inf
-%type <string_val> integer_range signed_integer_range
+%type <string_val> integer_range signed_integer_range sub_sampling_options list_sub_sampling_option
 %type <string_pair_val> named_var
 %type <symbol_type_val> change_type_arg
 %type <vector_string_val> change_type_var_list subsamples_eq_opt prior_eq_opt options_eq_opt calibration_range
@@ -1757,7 +1757,6 @@ estimation_options : o_datafile
 		   | o_distribution_approximation
                    | o_dirname
                    | o_huge_number
-                   | o_tarb_optim
                    | o_silent_optimizer
                    | o_proposal_distribution
                    | o_no_posterior_kernel_density
@@ -1775,20 +1774,43 @@ optim_options : list_optim_option
               | optim_options COMMA list_optim_option;
               ;
 
-list_tarb_optim_option : QUOTED_STRING COMMA QUOTED_STRING
-                         { driver.tarb_optim_options_string($1, $3); }
-                       | QUOTED_STRING COMMA signed_number
-                         { driver.tarb_optim_options_num($1, $3); }
-                       ;
+list_sub_sampling_option : QUOTED_STRING COMMA QUOTED_STRING
+                           {
+                             $1->insert(0, "''");
+                             $1->append("'', ''");
+                             $1->append(*$3);
+                             $1->append("''");
+                             $$ = $1;
+                           }
+                         | QUOTED_STRING COMMA signed_number
+                           {
+                             $1->insert(0, "''");
+                             $1->append("'',");
+                             $1->append(*$3);
+                             $$ = $1;
+                           }
+                         ;
 
-tarb_optim_options : list_tarb_optim_option
-                   | tarb_optim_options COMMA list_tarb_optim_option;
-                   ;
+sub_sampling_options : list_sub_sampling_option
+                       { $$ = $1; }
+                     | sub_sampling_options COMMA list_sub_sampling_option
+                       {
+                         $1->append(",");
+                         $1->append(*$3);
+                         $$ = $1;
+                       }
+                     ;
 
 list_sampling_option : QUOTED_STRING COMMA QUOTED_STRING
                        { driver.sampling_options_string($1, $3); }
                      | QUOTED_STRING COMMA signed_number
                        { driver.sampling_options_num($1, $3); }
+                     | QUOTED_STRING COMMA '(' sub_sampling_options ')'
+                       {
+                         $4->insert(0,"(");
+                         $4->append(")");
+                         driver.sampling_options_string($1, $4);
+                       }
                      ;
 
 sampling_options : list_sampling_option
@@ -2745,7 +2767,6 @@ o_posterior_max_subsample_draws : POSTERIOR_MAX_SUBSAMPLE_DRAWS EQUAL INT_NUMBER
 o_mh_drop : MH_DROP EQUAL non_negative_number { driver.option_num("mh_drop", $3); };
 o_mh_jscale : MH_JSCALE EQUAL non_negative_number { driver.option_num("mh_jscale", $3); };
 o_optim : OPTIM  EQUAL '(' optim_options ')';
-o_tarb_optim : TARB_OPTIM  EQUAL '(' tarb_optim_options ')';
 o_posterior_sampler_options : POSTERIOR_SAMPLER_OPTIONS EQUAL '(' sampling_options ')' ;
 o_proposal_distribution : PROPOSAL_DISTRIBUTION EQUAL symbol { driver.option_str("posterior_sampler_options.posterior_sampling_method.proposal_distribution", $3); };
 o_no_posterior_kernel_density : NO_POSTERIOR_KERNEL_DENSITY
diff --git a/preprocessor/DynareFlex.ll b/preprocessor/DynareFlex.ll
index b395c0a99d..75573ed15c 100644
--- a/preprocessor/DynareFlex.ll
+++ b/preprocessor/DynareFlex.ll
@@ -588,7 +588,6 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
 <DYNARE_STATEMENT>huge_number {return token::HUGE_NUMBER;}
 <DYNARE_STATEMENT>dr_display_tol {return token::DR_DISPLAY_TOL;}
 <DYNARE_STATEMENT>posterior_sampling_method {return token::POSTERIOR_SAMPLING_METHOD;}
-<DYNARE_STATEMENT>tarb_optim {return token::TARB_OPTIM;}
 <DYNARE_STATEMENT>posterior_sampler_options {return token::POSTERIOR_SAMPLER_OPTIONS;}
 <DYNARE_STATEMENT>silent_optimizer {return token::SILENT_OPTIMIZER;}
 <DYNARE_STATEMENT>lmmcp {return token::LMMCP;}
diff --git a/preprocessor/ParsingDriver.cc b/preprocessor/ParsingDriver.cc
index 35ff72e7e4..5d24850ecd 100644
--- a/preprocessor/ParsingDriver.cc
+++ b/preprocessor/ParsingDriver.cc
@@ -1654,34 +1654,6 @@ ParsingDriver::optim_options_num(string *name, string *value)
   delete value;
 }
 
-void
-ParsingDriver::tarb_optim_options_helper(const string &name)
-{
-  if (options_list.string_options.find("TaRB.optim_opt") == options_list.string_options.end())
-    options_list.string_options["TaRB.optim_opt"] = "";
-  else
-    options_list.string_options["TaRB.optim_opt"] += ",";
-  options_list.string_options["TaRB.optim_opt"] += "''" + name + "'',";
-}
-
-void
-ParsingDriver::tarb_optim_options_string(string *name, string *value)
-{
-  tarb_optim_options_helper(*name);
-  options_list.string_options["TaRB.optim_opt"] += "''" + *value + "''";
-  delete name;
-  delete value;
-}
-
-void
-ParsingDriver::tarb_optim_options_num(string *name, string *value)
-{
-  tarb_optim_options_helper(*name);
-  options_list.string_options["TaRB.optim_opt"] += *value;
-  delete name;
-  delete value;
-}
-
 void
 ParsingDriver::sampling_options_helper(const string &name)
 {
diff --git a/preprocessor/ParsingDriver.hh b/preprocessor/ParsingDriver.hh
index 62c8a5d09e..922e3fca3e 100644
--- a/preprocessor/ParsingDriver.hh
+++ b/preprocessor/ParsingDriver.hh
@@ -98,7 +98,6 @@ private:
 
   //! Creates option "optim_opt" in OptionsList if it doesn't exist, else add a comma, and adds the option name
   void optim_options_helper(const string &name);
-  void tarb_optim_options_helper(const string &name);
   void sampling_options_helper(const string &name);
 
   //! Stores temporary symbol table
@@ -451,10 +450,6 @@ public:
   void optim_options_string(string *name, string *value);
   //! Adds an optimization option (numeric value)
   void optim_options_num(string *name, string *value);
-  //! Adds a TaRB optimization option (string value)
-  void tarb_optim_options_string(string *name, string *value);
-  //! Adds a TaRB optimization option (numeric value)
-  void tarb_optim_options_num(string *name, string *value);
   //! Adds an sampling option (string value)
   void sampling_options_string(string *name, string *value);
   //! Adds an sampling option (numeric value)
-- 
GitLab