From 57afa7d80f3fd0a26b2b0c2e823d690a77905038 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 4 May 2016 13:22:56 +0200 Subject: [PATCH 1/2] preprocessor: rework posterior sampler options, #1177 --- DynareBison.yy | 33 ++++++++++++++++++++------------- DynareFlex.ll | 6 ++---- ParsingDriver.cc | 29 +++++++++++++++++++++++++++++ ParsingDriver.hh | 5 +++++ 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/DynareBison.yy b/DynareBison.yy index 194391eb..9363110f 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -83,14 +83,14 @@ class ParsingDriver; #define yylex driver.lexer->lex } -%token AIM_SOLVER ANALYTIC_DERIVATION ANALYTIC_DERIVATION_MODE AR AUTOCORR TARB_MODE_COMPUTE -%token BAYESIAN_IRF BETA_PDF BLOCK USE_CALIBRATION USE_TARB TARB_NEW_BLOCK_PROBABILITY SILENT_OPTIMIZER +%token AIM_SOLVER ANALYTIC_DERIVATION ANALYTIC_DERIVATION_MODE 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_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 -%token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED STUDENT_DEGREES_OF_FREEDOM +%token CONSIDER_ALL_ENDOGENOUS CONSIDER_ONLY_OBSERVED %token DATAFILE FILE SERIES DOUBLING DR_CYCLE_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_TOL DR_LOGARITHMIC_REDUCTION_MAXITER DR_ALGO DROP DSAMPLE DYNASAVE DYNATYPE CALIBRATION DIFFERENTIATE_FORWARD_VARS %token END ENDVAL EQUAL ESTIMATION ESTIMATED_PARAMS ESTIMATED_PARAMS_BOUNDS ESTIMATED_PARAMS_INIT EXTENDED_PATH ENDOGENOUS_PRIOR %token FILENAME DIRNAME FILTER_STEP_AHEAD FILTERED_VARS FIRST_OBS LAST_OBS SET_TIME OSR_PARAMS_BOUNDS @@ -152,7 +152,7 @@ class ParsingDriver; %token GSIG2_LMDM Q_DIAG FLAT_PRIOR NCSK NSTD WEIBULL WEIBULL_PDF %token INDXPARR INDXOVR INDXAP APBAND INDXIMF IMFBAND INDXFORE FOREBAND INDXGFOREHAT INDXGIMFHAT %token INDXESTIMA INDXGDLS EQ_MS FILTER_COVARIANCE FILTER_DECOMPOSITION -%token EQ_CMS TLINDX TLNUMBER BANACT RESTRICTIONS +%token EQ_CMS TLINDX TLNUMBER BANACT RESTRICTIONS POSTERIOR_SAMPLER_OPTIONS %token OUTPUT_FILE_TAG DRAWS_NBR_BURN_IN_1 DRAWS_NBR_BURN_IN_2 HORIZON %token SBVAR TREND_VAR DEFLATOR GROWTH_FACTOR MS_IRF MS_VARIANCE_DECOMPOSITION %token MS_ESTIMATION MS_SIMULATION MS_COMPUTE_MDD MS_COMPUTE_PROBABILITIES MS_FORECAST @@ -1776,14 +1776,12 @@ estimation_options : o_datafile | o_distribution_approximation | o_dirname | o_huge_number - | o_use_tarb - | o_tarb_mode_compute - | o_tarb_new_block_probability | o_tarb_optim | o_silent_optimizer | o_proposal_distribution - | o_student_degrees_of_freedom | o_no_posterior_kernel_density + | o_posterior_sampling_method + | o_posterior_sampler_options ; list_optim_option : QUOTED_STRING COMMA QUOTED_STRING @@ -1806,6 +1804,16 @@ tarb_optim_options : list_tarb_optim_option | tarb_optim_options COMMA list_tarb_optim_option; ; +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); } + ; + +sampling_options : list_sampling_option + | sampling_options COMMA list_sampling_option; + ; + varobs : VAROBS { driver.check_varobs(); } varobs_list ';'; varobs_list : varobs_list symbol @@ -2702,6 +2710,8 @@ o_est_first_obs : FIRST_OBS EQUAL vec_int | FIRST_OBS EQUAL vec_int_number { driver.option_vec_int("first_obs", $3); } ; +o_posterior_sampling_method : POSTERIOR_SAMPLING_METHOD EQUAL QUOTED_STRING + { driver.option_str("posterior_sampler_options.posterior_sampling_method", $3); } ; o_first_obs : FIRST_OBS EQUAL INT_NUMBER { driver.option_num("first_obs", $3); }; o_data_first_obs : FIRST_OBS EQUAL date_expr { driver.option_date("firstobs", $3); } ; o_data_last_obs : LAST_OBS EQUAL date_expr { driver.option_date("lastobs", $3); } ; @@ -2759,11 +2769,11 @@ 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_proposal_distribution : PROPOSAL_DISTRIBUTION EQUAL symbol { driver.option_str("proposal_distribution", $3); }; +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 { driver.option_num("moments_posterior_density.indicator", "0"); } ; -o_student_degrees_of_freedom : STUDENT_DEGREES_OF_FREEDOM EQUAL INT_NUMBER { driver.option_num("student_degrees_of_freedom", $3); }; o_mh_init_scale : MH_INIT_SCALE EQUAL non_negative_number { driver.option_num("mh_init_scale", $3); }; o_mode_file : MODE_FILE EQUAL filename { driver.option_str("mode_file", $3); }; o_mode_compute : MODE_COMPUTE EQUAL INT_NUMBER { driver.option_num("mode_compute", $3); }; @@ -3022,9 +3032,6 @@ o_equations : EQUATIONS EQUAL vec_int | EQUATIONS EQUAL vec_int_number { driver.option_vec_int("ms.equations",$3); } ; -o_use_tarb : USE_TARB { driver.option_num("TaRB.use_TaRB", "1"); }; -o_tarb_mode_compute : TARB_MODE_COMPUTE EQUAL INT_NUMBER { driver.option_num("TaRB.mode_compute", $3); }; -o_tarb_new_block_probability : TARB_NEW_BLOCK_PROBABILITY EQUAL non_negative_number {driver.option_num("TaRB.new_block_probability",$3); }; o_silent_optimizer : SILENT_OPTIMIZER { driver.option_num("silent_optimizer", "1"); }; o_instruments : INSTRUMENTS EQUAL '(' symbol_list ')' {driver.option_symbol_list("instruments"); }; diff --git a/DynareFlex.ll b/DynareFlex.ll index 606744af..957e240e 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -391,7 +391,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 distribution_approximation {return token::DISTRIBUTION_APPROXIMATION;} proposal_distribution {return token::PROPOSAL_DISTRIBUTION;} no_posterior_kernel_density {return token::NO_POSTERIOR_KERNEL_DENSITY;} -student_degrees_of_freedom {return token::STUDENT_DEGREES_OF_FREEDOM;} alpha { yylval->string_val = new string(yytext); @@ -590,10 +589,9 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2 outvars {return token::OUTVARS;} huge_number {return token::HUGE_NUMBER;} dr_display_tol {return token::DR_DISPLAY_TOL;} -use_tarb {return token::USE_TARB;} -tarb_mode_compute {return token::TARB_MODE_COMPUTE;} -tarb_new_block_probability {return token::TARB_NEW_BLOCK_PROBABILITY;} +posterior_sampling_method {return token::POSTERIOR_SAMPLING_METHOD;} tarb_optim {return token::TARB_OPTIM;} +posterior_sampler_options {return token::POSTERIOR_SAMPLER_OPTIONS;} silent_optimizer {return token::SILENT_OPTIMIZER;} lmmcp {return token::LMMCP;} occbin {return token::OCCBIN;} diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 467bf114..3ea64b6f 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -1693,6 +1693,35 @@ ParsingDriver::tarb_optim_options_num(string *name, string *value) delete value; } +void +ParsingDriver::sampling_options_helper(const string &name) +{ + if (options_list.string_options.find("posterior_sampler_options.sampling_opt") == + options_list.string_options.end()) + options_list.string_options["posterior_sampler_options.sampling_opt"] = ""; + else + options_list.string_options["posterior_sampler_options.sampling_opt"] += ","; + options_list.string_options["posterior_sampler_options.sampling_opt"] += "''" + name + "'',"; +} + +void +ParsingDriver::sampling_options_string(string *name, string *value) +{ + sampling_options_helper(*name); + options_list.string_options["posterior_sampler_options.sampling_opt"] += "''" + *value + "''"; + delete name; + delete value; +} + +void +ParsingDriver::sampling_options_num(string *name, string *value) +{ + sampling_options_helper(*name); + options_list.string_options["posterior_sampler_options.sampling_opt"] += *value; + delete name; + delete value; +} + void ParsingDriver::check_varobs() { diff --git a/ParsingDriver.hh b/ParsingDriver.hh index d3ad577c..e51f2d35 100644 --- a/ParsingDriver.hh +++ b/ParsingDriver.hh @@ -99,6 +99,7 @@ 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 SymbolList symbol_list; @@ -463,6 +464,10 @@ public: 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) + void sampling_options_num(string *name, string *value); //! Check that no observed variable has yet be defined void check_varobs(); //! Add a new observed variable From 275cb6c2b0f18021e0170dd82b9ed571c0c351c1 Mon Sep 17 00:00:00 2001 From: Houtan Bastani Date: Wed, 4 May 2016 15:17:54 +0200 Subject: [PATCH 2/2] preprocessor: support sub lists in posterior_sampling_opt option, hence removing tarb_optim. #1177 --- DynareBison.yy | 45 +++++++++++++++++++++++++++++++++------------ DynareFlex.ll | 1 - ParsingDriver.cc | 28 ---------------------------- ParsingDriver.hh | 5 ----- 4 files changed, 33 insertions(+), 46 deletions(-) diff --git a/DynareBison.yy b/DynareBison.yy index 9363110f..39f1306f 100644 --- a/DynareBison.yy +++ b/DynareBison.yy @@ -86,7 +86,7 @@ class ParsingDriver; %token AIM_SOLVER ANALYTIC_DERIVATION ANALYTIC_DERIVATION_MODE 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 filename symbol vec_of_vec_value vec_value_list date_expr %type vec_value_1 vec_value signed_inf signed_number_w_inf %type range vec_value_w_inf vec_value_1_w_inf -%type integer_range signed_integer_range +%type integer_range signed_integer_range sub_sampling_options list_sub_sampling_option %type named_var %type change_type_arg %type change_type_var_list subsamples_eq_opt prior_eq_opt options_eq_opt calibration_range @@ -1776,7 +1776,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 @@ -1794,20 +1793,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 @@ -2768,7 +2790,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/DynareFlex.ll b/DynareFlex.ll index 957e240e..e5775ca8 100644 --- a/DynareFlex.ll +++ b/DynareFlex.ll @@ -590,7 +590,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 huge_number {return token::HUGE_NUMBER;} dr_display_tol {return token::DR_DISPLAY_TOL;} posterior_sampling_method {return token::POSTERIOR_SAMPLING_METHOD;} -tarb_optim {return token::TARB_OPTIM;} posterior_sampler_options {return token::POSTERIOR_SAMPLER_OPTIONS;} silent_optimizer {return token::SILENT_OPTIMIZER;} lmmcp {return token::LMMCP;} diff --git a/ParsingDriver.cc b/ParsingDriver.cc index 3ea64b6f..d7411cc5 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -1665,34 +1665,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/ParsingDriver.hh b/ParsingDriver.hh index e51f2d35..a05fdfef 100644 --- a/ParsingDriver.hh +++ b/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 @@ -460,10 +459,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)