1 /* 2 * Copyright © 2003-2020 Dynare Team 3 * 4 * This file is part of Dynare. 5 * 6 * Dynare is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * Dynare is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with Dynare. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 #ifndef _COMPUTINGTASKS_HH 21 #define _COMPUTINGTASKS_HH 22 23 #include <ostream> 24 25 #include "SymbolList.hh" 26 #include "SymbolTable.hh" 27 #include "Statement.hh" 28 #include "StaticModel.hh" 29 #include "DynamicModel.hh" 30 #include "ModelEquationBlock.hh" 31 32 class SteadyStatement : public Statement 33 { 34 private: 35 const OptionsList options_list; 36 public: 37 explicit SteadyStatement(OptionsList options_list_arg); 38 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 39 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 40 void writeJsonOutput(ostream &output) const override; 41 }; 42 43 class CheckStatement : public Statement 44 { 45 private: 46 const OptionsList options_list; 47 public: 48 explicit CheckStatement(OptionsList options_list_arg); 49 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 50 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 51 void writeJsonOutput(ostream &output) const override; 52 }; 53 54 class SimulStatement : public Statement 55 { 56 private: 57 const OptionsList options_list; 58 public: 59 explicit SimulStatement(OptionsList options_list_arg); 60 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 61 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 62 void writeJsonOutput(ostream &output) const override; 63 }; 64 65 class PerfectForesightSetupStatement : public Statement 66 { 67 private: 68 const OptionsList options_list; 69 public: 70 explicit PerfectForesightSetupStatement(OptionsList options_list_arg); 71 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 72 void writeJsonOutput(ostream &output) const override; 73 }; 74 75 class PerfectForesightSolverStatement : public Statement 76 { 77 private: 78 const OptionsList options_list; 79 public: 80 explicit PerfectForesightSolverStatement(OptionsList options_list_arg); 81 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 82 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 83 void writeJsonOutput(ostream &output) const override; 84 }; 85 86 class PriorPosteriorFunctionStatement : public Statement 87 { 88 private: 89 const bool prior_func; 90 const OptionsList options_list; 91 public: 92 PriorPosteriorFunctionStatement(const bool prior_func_arg, OptionsList options_list_arg); 93 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 94 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 95 void writeJsonOutput(ostream &output) const override; 96 }; 97 98 class ModelInfoStatement : public Statement 99 { 100 private: 101 const OptionsList options_list; 102 public: 103 explicit ModelInfoStatement(OptionsList options_list_arg); 104 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 105 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 106 void writeJsonOutput(ostream &output) const override; 107 }; 108 109 class StochSimulStatement : public Statement 110 { 111 private: 112 SymbolList symbol_list; 113 const OptionsList options_list; 114 public: 115 StochSimulStatement(SymbolList symbol_list_arg, 116 OptionsList options_list_arg); 117 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 118 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 119 void writeJsonOutput(ostream &output) const override; 120 }; 121 122 class PacModelStatement : public Statement 123 { 124 public: 125 const string name, aux_model_name, discount; 126 expr_t growth, original_growth; 127 private: 128 const double steady_state_growth_rate_number; 129 const int steady_state_growth_rate_symb_id; 130 const SymbolTable &symbol_table; 131 vector<tuple<int, int, int, double>> growth_info; 132 public: 133 PacModelStatement(string name_arg, 134 string aux_model_name_arg, 135 string discount_arg, 136 expr_t growth_arg, 137 double steady_state_growth_rate_number_arg, 138 int steady_state_growth_rate_symb_id_arg, 139 const SymbolTable &symbol_table_arg); 140 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 141 void overwriteGrowth(expr_t new_growth); 142 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 143 void writeJsonOutput(ostream &output) const override; 144 }; 145 146 class VarRestrictionsStatement : public Statement 147 { 148 private: 149 using var_restriction_eq_crosseq_t = pair<pair<int, pair<int, int>>, expr_t>; 150 const string var_model_name; 151 const map<string, vector<string>> var_map; 152 const map<int, map<int, SymbolList>> exclusion_restrictions; 153 using equation_restrictions_t = map<int, pair<pair<var_restriction_eq_crosseq_t, var_restriction_eq_crosseq_t>, double>>; 154 const equation_restrictions_t equation_restrictions; 155 using crossequation_restrictions_t = vector<pair<pair<var_restriction_eq_crosseq_t, var_restriction_eq_crosseq_t>, double>>; 156 const crossequation_restrictions_t crossequation_restrictions; 157 const map<pair<int, int>, double> covariance_number_restriction; 158 const map<pair<int, int>, pair<int, int>> covariance_pair_restriction; 159 const SymbolTable &symbol_table; 160 int findIdxInVector(const vector<string> &vecvars, const string &var) const; 161 public: 162 VarRestrictionsStatement(string var_model_name_arg, 163 map<string, vector<string>> var_map_arg, 164 map<int, map<int, SymbolList>> exclusion_restrictions_arg, 165 equation_restrictions_t equation_restrictions_arg, 166 crossequation_restrictions_t crossequation_restrictions_arg, 167 map<pair<int, int>, double> covariance_number_restriction_arg, 168 map<pair<int, int>, pair<int, int>> covariance_pair_restriction_arg, 169 const SymbolTable &symbol_table_arg); 170 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 171 }; 172 173 class VarEstimationStatement : public Statement 174 { 175 private: 176 const OptionsList options_list; 177 public: 178 explicit VarEstimationStatement(OptionsList options_list_arg); 179 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 180 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 181 }; 182 183 class ForecastStatement : public Statement 184 { 185 private: 186 const SymbolList symbol_list; 187 const OptionsList options_list; 188 public: 189 ForecastStatement(SymbolList symbol_list_arg, 190 OptionsList options_list_arg); 191 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 192 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 193 void writeJsonOutput(ostream &output) const override; 194 }; 195 196 class RamseyModelStatement : public Statement 197 { 198 private: 199 const OptionsList options_list; 200 public: 201 explicit RamseyModelStatement(OptionsList options_list_arg); 202 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 203 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 204 void writeJsonOutput(ostream &output) const override; 205 }; 206 207 class RamseyConstraintsStatement : public Statement 208 { 209 public: 210 struct Constraint 211 { 212 int endo; 213 BinaryOpcode code; 214 expr_t expression; 215 }; 216 using constraints_t = vector<Constraint>; 217 private: 218 const SymbolTable &symbol_table; 219 const constraints_t constraints; 220 public: 221 RamseyConstraintsStatement(const SymbolTable &symbol_table_arg, constraints_t constraints_arg); 222 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 223 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 224 void writeJsonOutput(ostream &output) const override; 225 }; 226 227 class RamseyPolicyStatement : public Statement 228 { 229 private: 230 const SymbolTable &symbol_table; 231 const SymbolList symbol_list; 232 const OptionsList options_list; 233 public: 234 RamseyPolicyStatement(const SymbolTable &symbol_table_arg, 235 SymbolList symbol_list_arg, 236 OptionsList options_list_arg); 237 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 238 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 239 void writeJsonOutput(ostream &output) const override; 240 }; 241 242 class EvaluatePlannerObjective : public Statement 243 { 244 public: 245 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 246 void writeJsonOutput(ostream &output) const override; 247 }; 248 249 class DiscretionaryPolicyStatement : public Statement 250 { 251 private: 252 const SymbolList symbol_list; 253 const OptionsList options_list; 254 public: 255 DiscretionaryPolicyStatement(SymbolList symbol_list_arg, 256 OptionsList options_list_arg); 257 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 258 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 259 void writeJsonOutput(ostream &output) const override; 260 }; 261 262 class RplotStatement : public Statement 263 { 264 private: 265 const SymbolList symbol_list; 266 public: 267 explicit RplotStatement(SymbolList symbol_list_arg); 268 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 269 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 270 void writeJsonOutput(ostream &output) const override; 271 }; 272 273 class UnitRootVarsStatement : public Statement 274 { 275 public: 276 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 277 void writeJsonOutput(ostream &output) const override; 278 }; 279 280 class PeriodsStatement : public Statement 281 { 282 private: 283 const int periods; 284 public: 285 explicit PeriodsStatement(int periods_arg); 286 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 287 void writeJsonOutput(ostream &output) const override; 288 }; 289 290 class DsampleStatement : public Statement 291 { 292 private: 293 const int val1, val2; 294 public: 295 explicit DsampleStatement(int val1_arg); 296 DsampleStatement(int val1_arg, int val2_arg); 297 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 298 void writeJsonOutput(ostream &output) const override; 299 }; 300 301 class EstimationStatement : public Statement 302 { 303 private: 304 const SymbolTable &symbol_table; 305 const SymbolList symbol_list; 306 const OptionsList options_list; 307 public: 308 EstimationStatement(const SymbolTable &symbol_table_arg, 309 SymbolList symbol_list_arg, 310 OptionsList options_list_arg); 311 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 312 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 313 void writeJsonOutput(ostream &output) const override; 314 }; 315 316 class DynareSensitivityStatement : public Statement 317 { 318 private: 319 const OptionsList options_list; 320 public: 321 explicit DynareSensitivityStatement(OptionsList options_list_arg); 322 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 323 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 324 void writeJsonOutput(ostream &output) const override; 325 }; 326 327 class ObservationTrendsStatement : public Statement 328 { 329 public: 330 using trend_elements_t = map<string, expr_t>; 331 private: 332 const trend_elements_t trend_elements; 333 const SymbolTable &symbol_table; 334 public: 335 ObservationTrendsStatement(trend_elements_t trend_elements_arg, 336 const SymbolTable &symbol_table_arg); 337 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 338 void writeJsonOutput(ostream &output) const override; 339 }; 340 341 class OsrParamsStatement : public Statement 342 { 343 private: 344 const SymbolList symbol_list; 345 const SymbolTable &symbol_table; 346 public: 347 OsrParamsStatement(SymbolList symbol_list_arg, const SymbolTable &symbol_table_arg); 348 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 349 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 350 void writeJsonOutput(ostream &output) const override; 351 }; 352 353 class OsrStatement : public Statement 354 { 355 private: 356 const SymbolList symbol_list; 357 const OptionsList options_list; 358 public: 359 OsrStatement(SymbolList symbol_list_arg, 360 OptionsList options_list_arg); 361 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 362 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 363 void writeJsonOutput(ostream &output) const override; 364 }; 365 366 //! Temporary structure used when parsing estimation_params* statements 367 class OsrParams 368 { 369 public: 370 string name; 371 expr_t low_bound, up_bound; 372 373 void init(const DataTree & datatree)374 init(const DataTree &datatree) 375 { 376 name = ""; 377 low_bound = datatree.MinusInfinity; 378 up_bound = datatree.Infinity; 379 } 380 }; 381 382 class OsrParamsBoundsStatement : public Statement 383 { 384 private: 385 const vector<OsrParams> osr_params_list; 386 public: 387 explicit OsrParamsBoundsStatement(vector<OsrParams> osr_params_list_arg); 388 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 389 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 390 void writeJsonOutput(ostream &output) const override; 391 }; 392 393 class DynaTypeStatement : public Statement 394 { 395 private: 396 const SymbolList symbol_list; 397 const string filename; 398 public: 399 DynaTypeStatement(SymbolList symbol_list_arg, 400 string filename_arg); 401 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 402 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 403 void writeJsonOutput(ostream &output) const override; 404 }; 405 406 class DynaSaveStatement : public Statement 407 { 408 private: 409 const SymbolList symbol_list; 410 const string filename; 411 public: 412 DynaSaveStatement(SymbolList symbol_list_arg, 413 string filename_arg); 414 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 415 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 416 void writeJsonOutput(ostream &output) const override; 417 }; 418 419 class ModelComparisonStatement : public Statement 420 { 421 public: 422 using filename_list_t = vector<pair<string, string>>; 423 private: 424 filename_list_t filename_list; 425 OptionsList options_list; 426 public: 427 ModelComparisonStatement(filename_list_t filename_list_arg, 428 OptionsList options_list_arg); 429 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 430 void writeJsonOutput(ostream &output) const override; 431 }; 432 433 //! Temporary structure used when parsing estimation_params* statements 434 class EstimationParams 435 { 436 public: 437 int type; 438 string name, name2; 439 PriorDistributions prior; 440 expr_t init_val, low_bound, up_bound, mean, std, p3, p4, jscale; 441 442 void init(const DataTree & datatree)443 init(const DataTree &datatree) 444 { 445 type = 0; 446 name = ""; 447 name2 = ""; 448 prior = PriorDistributions::noShape; 449 init_val = datatree.NaN; 450 low_bound = datatree.MinusInfinity; 451 up_bound = datatree.Infinity; 452 mean = datatree.NaN; 453 std = datatree.NaN; 454 p3 = datatree.NaN; 455 p4 = datatree.NaN; 456 jscale = datatree.NaN; 457 } 458 }; 459 460 class EstimatedParamsStatement : public Statement 461 { 462 private: 463 const vector<EstimationParams> estim_params_list; 464 const SymbolTable &symbol_table; 465 public: 466 EstimatedParamsStatement(vector<EstimationParams> estim_params_list_arg, 467 const SymbolTable &symbol_table_arg); 468 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 469 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 470 void writeJsonOutput(ostream &output) const override; 471 }; 472 473 class EstimatedParamsInitStatement : public Statement 474 { 475 private: 476 const vector<EstimationParams> estim_params_list; 477 const SymbolTable &symbol_table; 478 const bool use_calibration; 479 public: 480 EstimatedParamsInitStatement(vector<EstimationParams> estim_params_list_arg, 481 const SymbolTable &symbol_table_arg, 482 const bool use_calibration_arg); 483 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 484 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 485 void writeJsonOutput(ostream &output) const override; 486 }; 487 488 class EstimatedParamsBoundsStatement : public Statement 489 { 490 private: 491 const vector<EstimationParams> estim_params_list; 492 const SymbolTable &symbol_table; 493 public: 494 EstimatedParamsBoundsStatement(vector<EstimationParams> estim_params_list_arg, 495 const SymbolTable &symbol_table_arg); 496 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 497 void writeJsonOutput(ostream &output) const override; 498 }; 499 500 class OptimWeightsStatement : public Statement 501 { 502 public: 503 using var_weights_t = map<string, expr_t>; 504 using covar_weights_t = map<pair<string, string>, expr_t>; 505 private: 506 const var_weights_t var_weights; 507 const covar_weights_t covar_weights; 508 const SymbolTable &symbol_table; 509 public: 510 OptimWeightsStatement(var_weights_t var_weights_arg, 511 covar_weights_t covar_weights_arg, 512 const SymbolTable &symbol_table_arg); 513 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 514 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 515 void writeJsonOutput(ostream &output) const override; 516 }; 517 518 class PlannerObjectiveStatement : public Statement 519 { 520 private: 521 StaticModel model_tree; 522 bool computing_pass_called{false}; 523 public: 524 explicit PlannerObjectiveStatement(const StaticModel &model_tree_arg); 525 /*! \todo check there are only endogenous variables at the current period in the objective 526 (no exogenous, no lead/lag) */ 527 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 528 /*! \todo allow for the possibility of disabling temporary terms */ 529 void computingPass() override; 530 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 531 void writeJsonOutput(ostream &output) const override; 532 //! Return a reference the Planner Objective model tree 533 const StaticModel &getPlannerObjective() const; 534 }; 535 536 class BVARDensityStatement : public Statement 537 { 538 private: 539 const int maxnlags; 540 const OptionsList options_list; 541 public: 542 BVARDensityStatement(int maxnlags_arg, OptionsList options_list_arg); 543 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 544 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 545 void writeJsonOutput(ostream &output) const override; 546 }; 547 548 class BVARForecastStatement : public Statement 549 { 550 private: 551 const int nlags; 552 const OptionsList options_list; 553 public: 554 BVARForecastStatement(int nlags_arg, OptionsList options_list_arg); 555 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 556 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 557 void writeJsonOutput(ostream &output) const override; 558 }; 559 560 class SBVARStatement : public Statement 561 { 562 private: 563 const OptionsList options_list; 564 public: 565 explicit SBVARStatement(OptionsList options_list_arg); 566 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 567 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 568 void writeJsonOutput(ostream &output) const override; 569 }; 570 571 class MSSBVAREstimationStatement : public Statement 572 { 573 private: 574 const OptionsList options_list; 575 public: 576 explicit MSSBVAREstimationStatement(OptionsList options_list_arg); 577 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 578 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 579 void writeJsonOutput(ostream &output) const override; 580 }; 581 582 class MSSBVARSimulationStatement : public Statement 583 { 584 private: 585 const OptionsList options_list; 586 public: 587 explicit MSSBVARSimulationStatement(OptionsList options_list_arg); 588 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 589 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 590 void writeJsonOutput(ostream &output) const override; 591 }; 592 593 class MSSBVARComputeMDDStatement : public Statement 594 { 595 private: 596 const OptionsList options_list; 597 public: 598 explicit MSSBVARComputeMDDStatement(OptionsList options_list_arg); 599 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 600 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 601 void writeJsonOutput(ostream &output) const override; 602 }; 603 604 class MSSBVARComputeProbabilitiesStatement : public Statement 605 { 606 private: 607 const OptionsList options_list; 608 public: 609 explicit MSSBVARComputeProbabilitiesStatement(OptionsList options_list_arg); 610 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 611 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 612 void writeJsonOutput(ostream &output) const override; 613 }; 614 615 class MSSBVARIrfStatement : public Statement 616 { 617 private: 618 const SymbolList symbol_list; 619 const OptionsList options_list; 620 public: 621 MSSBVARIrfStatement(SymbolList symbol_list_arg, 622 OptionsList options_list_arg); 623 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 624 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 625 void writeJsonOutput(ostream &output) const override; 626 }; 627 628 class MSSBVARForecastStatement : public Statement 629 { 630 private: 631 const OptionsList options_list; 632 public: 633 explicit MSSBVARForecastStatement(OptionsList options_list_arg); 634 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 635 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 636 void writeJsonOutput(ostream &output) const override; 637 }; 638 639 class MSSBVARVarianceDecompositionStatement : public Statement 640 { 641 private: 642 const OptionsList options_list; 643 public: 644 explicit MSSBVARVarianceDecompositionStatement(OptionsList options_list_arg); 645 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 646 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 647 void writeJsonOutput(ostream &output) const override; 648 }; 649 650 class IdentificationStatement : public Statement 651 { 652 private: 653 OptionsList options_list; 654 public: 655 explicit IdentificationStatement(OptionsList options_list_arg); 656 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 657 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 658 void writeJsonOutput(ostream &output) const override; 659 }; 660 661 class WriteLatexDynamicModelStatement : public Statement 662 { 663 private: 664 const DynamicModel &dynamic_model; 665 const bool write_equation_tags; 666 public: 667 WriteLatexDynamicModelStatement(const DynamicModel &dynamic_model_arg, bool write_equation_tags_arg); 668 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 669 void writeJsonOutput(ostream &output) const override; 670 }; 671 672 class WriteLatexStaticModelStatement : public Statement 673 { 674 private: 675 const StaticModel &static_model; 676 const bool write_equation_tags; 677 public: 678 WriteLatexStaticModelStatement(const StaticModel &static_model_arg, bool write_equation_tags_arg); 679 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 680 void writeJsonOutput(ostream &output) const override; 681 }; 682 683 class WriteLatexOriginalModelStatement : public Statement 684 { 685 private: 686 const DynamicModel &original_model; 687 const bool write_equation_tags; 688 public: 689 WriteLatexOriginalModelStatement(const DynamicModel &original_model_arg, bool write_equation_tags_arg); 690 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 691 void writeJsonOutput(ostream &output) const override; 692 }; 693 694 class WriteLatexSteadyStateModelStatement : public Statement 695 { 696 private: 697 const SteadyStateModel &steady_state_model; 698 public: 699 explicit WriteLatexSteadyStateModelStatement(const SteadyStateModel &steady_state_model_arg); 700 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 701 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 702 void writeJsonOutput(ostream &output) const override; 703 }; 704 705 class ShockDecompositionStatement : public Statement 706 { 707 private: 708 const SymbolList symbol_list; 709 const OptionsList options_list; 710 public: 711 ShockDecompositionStatement(SymbolList symbol_list_arg, 712 OptionsList options_list_arg); 713 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 714 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 715 void writeJsonOutput(ostream &output) const override; 716 }; 717 718 class RealtimeShockDecompositionStatement : public Statement 719 { 720 private: 721 const SymbolList symbol_list; 722 const OptionsList options_list; 723 public: 724 RealtimeShockDecompositionStatement(SymbolList symbol_list_arg, 725 OptionsList options_list_arg); 726 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 727 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 728 void writeJsonOutput(ostream &output) const override; 729 }; 730 731 class PlotShockDecompositionStatement : public Statement 732 { 733 private: 734 const SymbolList symbol_list; 735 const OptionsList options_list; 736 public: 737 PlotShockDecompositionStatement(SymbolList symbol_list_arg, 738 OptionsList options_list_arg); 739 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 740 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 741 void writeJsonOutput(ostream &output) const override; 742 }; 743 744 class InitialConditionDecompositionStatement : public Statement 745 { 746 private: 747 const SymbolList symbol_list; 748 const OptionsList options_list; 749 public: 750 InitialConditionDecompositionStatement(SymbolList symbol_list_arg, 751 OptionsList options_list_arg); 752 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 753 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 754 void writeJsonOutput(ostream &output) const override; 755 }; 756 757 class SqueezeShockDecompositionStatement : public Statement 758 { 759 private: 760 const SymbolList symbol_list; 761 public: 762 SqueezeShockDecompositionStatement(SymbolList symbol_list_arg); 763 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 764 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 765 void writeJsonOutput(ostream &output) const override; 766 }; 767 768 class ConditionalForecastStatement : public Statement 769 { 770 private: 771 const OptionsList options_list; 772 public: 773 explicit ConditionalForecastStatement(OptionsList options_list_arg); 774 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 775 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 776 void writeJsonOutput(ostream &output) const override; 777 }; 778 779 class PlotConditionalForecastStatement : public Statement 780 { 781 private: 782 //! A value of -1 indicates that the user didn't specify a value 783 const int periods; 784 const SymbolList symbol_list; 785 public: 786 PlotConditionalForecastStatement(int periods_arg, SymbolList symbol_list_arg); 787 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 788 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 789 void writeJsonOutput(ostream &output) const override; 790 }; 791 792 class CalibSmootherStatement : public Statement 793 { 794 private: 795 const SymbolList symbol_list; 796 const OptionsList options_list; 797 public: 798 CalibSmootherStatement(SymbolList symbol_list_arg, 799 OptionsList options_list_arg); 800 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 801 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 802 void writeJsonOutput(ostream &output) const override; 803 }; 804 805 class ExtendedPathStatement : public Statement 806 { 807 private: 808 const OptionsList options_list; 809 public: 810 explicit ExtendedPathStatement(OptionsList options_list_arg); 811 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 812 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 813 void writeJsonOutput(ostream &output) const override; 814 }; 815 816 class SvarIdentificationStatement : public Statement 817 { 818 public: 819 // using svar_identification_exclusion_t = map<pair<int, int>, vector<int>>; 820 struct svar_identification_restriction 821 { 822 int equation; 823 int restriction_nbr; 824 int lag; 825 int variable; 826 expr_t value; 827 }; 828 829 using svar_identification_restrictions_t = vector<svar_identification_restriction>; 830 private: 831 const svar_identification_restrictions_t restrictions; 832 const bool upper_cholesky_present, lower_cholesky_present, constants_exclusion_present; 833 const SymbolTable &symbol_table; 834 int getMaxLag() const; 835 public: 836 SvarIdentificationStatement(svar_identification_restrictions_t restrictions_arg, 837 bool upper_cholesky_present_arg, 838 bool lower_cholesky_present_arg, 839 bool constants_exclusion_present_arg, 840 const SymbolTable &symbol_table_arg); 841 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 842 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 843 void writeJsonOutput(ostream &output) const override; 844 }; 845 846 class MarkovSwitchingStatement : public Statement 847 { 848 private: 849 const OptionsList options_list; 850 map<pair<int, int>, double> restriction_map; 851 public: 852 explicit MarkovSwitchingStatement(OptionsList options_list_arg); 853 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 854 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 855 void writeJsonOutput(ostream &output) const override; 856 }; 857 858 class SvarStatement : public Statement 859 { 860 private: 861 const OptionsList options_list; 862 public: 863 explicit SvarStatement(OptionsList options_list_arg); 864 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 865 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 866 void writeJsonOutput(ostream &output) const override; 867 }; 868 869 class SvarGlobalIdentificationCheckStatement : public Statement 870 { 871 public: 872 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 873 void writeJsonOutput(ostream &output) const override; 874 }; 875 876 class SetTimeStatement : public Statement 877 { 878 private: 879 const OptionsList options_list; 880 public: 881 explicit SetTimeStatement(OptionsList options_list_arg); 882 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 883 void writeJsonOutput(ostream &output) const override; 884 }; 885 886 class EstimationDataStatement : public Statement 887 { 888 private: 889 const OptionsList options_list; 890 public: 891 explicit EstimationDataStatement(OptionsList options_list_arg); 892 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 893 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 894 void writeJsonOutput(ostream &output) const override; 895 }; 896 897 class SubsamplesStatement : public Statement 898 { 899 public: 900 //! Storage for declaring subsamples: map<subsample_name, <date1, date2 > 901 using subsample_declaration_map_t = map<string, pair<string, string>>; 902 private: 903 const string name1, name2; 904 const subsample_declaration_map_t subsample_declaration_map; 905 const SymbolTable &symbol_table; 906 public: 907 SubsamplesStatement(string name1_arg, 908 string name2_arg, 909 subsample_declaration_map_t subsample_declaration_map_arg, 910 const SymbolTable &symbol_table_arg); 911 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 912 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 913 void writeJsonOutput(ostream &output) const override; 914 }; 915 916 class SubsamplesEqualStatement : public Statement 917 { 918 private: 919 const string to_name1, to_name2, from_name1, from_name2; 920 const SymbolTable &symbol_table; 921 public: 922 SubsamplesEqualStatement(string to_name1_arg, 923 string to_name2_arg, 924 string from_name1_arg, 925 string from_name2_arg, 926 const SymbolTable &symbol_table_arg); 927 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 928 void writeJsonOutput(ostream &output) const override; 929 }; 930 931 class JointPriorStatement : public Statement 932 { 933 private: 934 const vector<string> joint_parameters; 935 const PriorDistributions prior_shape; 936 const OptionsList options_list; 937 public: 938 JointPriorStatement(vector<string> joint_parameters_arg, 939 PriorDistributions prior_shape_arg, 940 OptionsList options_list_arg); 941 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 942 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 943 void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const; 944 void writeJsonOutput(ostream &output) const override; 945 }; 946 947 class BasicPriorStatement : public Statement 948 { 949 protected: 950 const string name, subsample_name; 951 const PriorDistributions prior_shape; 952 const expr_t variance; 953 const OptionsList options_list; 954 BasicPriorStatement(string name_arg, 955 string subsample_name_arg, 956 PriorDistributions prior_shape_arg, 957 expr_t variance_arg, 958 OptionsList options_list_arg); 959 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 960 void get_base_name(const SymbolType symb_type, string &lhs_field) const; 961 void writeCommonOutput(ostream &output, const string &lhs_field) const; 962 void writeCommonOutputHelper(ostream &output, const string &field, const string &lhs_field) const; 963 void writePriorOutput(ostream &output, string &lhs_field, const string &name2) const; 964 bool is_structural_innovation(const SymbolType symb_type) const; 965 void writePriorIndex(ostream &output, const string &lhs_field) const; 966 void writeVarianceOption(ostream &output, const string &lhs_field) const; 967 void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const; 968 void writeShape(ostream &output, const string &lhs_field) const; 969 void writeJsonShape(ostream &output) const; 970 void writeJsonPriorOutput(ostream &output) const; 971 }; 972 973 class PriorStatement : public BasicPriorStatement 974 { 975 public: 976 PriorStatement(string name_arg, 977 string subsample_name_arg, 978 PriorDistributions prior_shape_arg, 979 expr_t variance_arg, 980 OptionsList options_list_arg); 981 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 982 void writeJsonOutput(ostream &output) const override; 983 }; 984 985 class StdPriorStatement : public BasicPriorStatement 986 { 987 private: 988 const SymbolTable &symbol_table; 989 public: 990 StdPriorStatement(string name_arg, 991 string subsample_name_arg, 992 PriorDistributions prior_shape_arg, 993 expr_t variance_arg, 994 OptionsList options_list_arg, 995 const SymbolTable &symbol_table_arg); 996 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 997 void writeJsonOutput(ostream &output) const override; 998 }; 999 1000 class CorrPriorStatement : public BasicPriorStatement 1001 { 1002 private: 1003 const string name1; 1004 const SymbolTable &symbol_table; 1005 public: 1006 CorrPriorStatement(string name_arg1, 1007 string name_arg2, 1008 string subsample_name_arg, 1009 PriorDistributions prior_shape_arg, 1010 expr_t variance_arg, 1011 OptionsList options_list_arg, 1012 const SymbolTable &symbol_table_arg); 1013 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1014 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1015 void writeJsonOutput(ostream &output) const override; 1016 }; 1017 1018 class PriorEqualStatement : public Statement 1019 { 1020 private: 1021 const string to_declaration_type, to_name1, to_name2, to_subsample_name; 1022 const string from_declaration_type, from_name1, from_name2, from_subsample_name; 1023 const SymbolTable &symbol_table; 1024 public: 1025 PriorEqualStatement(string to_declaration_type_arg, 1026 string to_name1_arg, 1027 string to_name2_arg, 1028 string to_subsample_name_arg, 1029 string from_declaration_type_arg, 1030 string from_name1_arg, 1031 string from_name2_arg, 1032 string from_subsample_name_arg, 1033 const SymbolTable &symbol_table_arg); 1034 void get_base_name(const SymbolType symb_type, string &lhs_field) const; 1035 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1036 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1037 void writeJsonOutput(ostream &output) const override; 1038 }; 1039 1040 class BasicOptionsStatement : public Statement 1041 { 1042 protected: 1043 const string name, subsample_name; 1044 const OptionsList options_list; 1045 BasicOptionsStatement(string name_arg, 1046 string subsample_name_arg, 1047 OptionsList options_list_arg); 1048 void get_base_name(const SymbolType symb_type, string &lhs_field) const; 1049 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1050 void writeOptionsOutput(ostream &output, string &lhs_field, const string &name2) const; 1051 void writeCommonOutput(ostream &output, const string &lhs_field) const; 1052 void writeCommonOutputHelper(ostream &output, const string &field, const string &lhs_field) const; 1053 bool is_structural_innovation(const SymbolType symb_type) const; 1054 void writeOptionsIndex(ostream &output, const string &lhs_field) const; 1055 void writeOutputHelper(ostream &output, const string &field, const string &lhs_field) const; 1056 void writeJsonOptionsOutput(ostream &output) const; 1057 }; 1058 1059 class OptionsStatement : public BasicOptionsStatement 1060 { 1061 public: 1062 OptionsStatement(string name_arg, string subsample_name_arg, OptionsList options_list_arg); 1063 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1064 void writeJsonOutput(ostream &output) const override; 1065 }; 1066 1067 class StdOptionsStatement : public BasicOptionsStatement 1068 { 1069 private: 1070 const SymbolTable &symbol_table; 1071 public: 1072 StdOptionsStatement(string name_arg, 1073 string subsample_name_arg, 1074 OptionsList options_list_arg, 1075 const SymbolTable &symbol_table_arg); 1076 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1077 void writeJsonOutput(ostream &output) const override; 1078 }; 1079 1080 class CorrOptionsStatement : public BasicOptionsStatement 1081 { 1082 private: 1083 const string name1; 1084 const SymbolTable &symbol_table; 1085 public: 1086 CorrOptionsStatement(string name_arg1, string name_arg2, 1087 string subsample_name_arg, 1088 OptionsList options_list_arg, 1089 const SymbolTable &symbol_table_arg); 1090 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1091 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1092 void writeJsonOutput(ostream &output) const override; 1093 }; 1094 1095 class OptionsEqualStatement : public Statement 1096 { 1097 private: 1098 const string to_declaration_type, to_name1, to_name2, to_subsample_name; 1099 const string from_declaration_type, from_name1, from_name2, from_subsample_name; 1100 const SymbolTable &symbol_table; 1101 public: 1102 OptionsEqualStatement(string to_declaration_type_arg, 1103 string to_name1_arg, 1104 string to_name2_arg, 1105 string to_subsample_name_arg, 1106 string from_declaration_type_arg, 1107 string from_name1_arg, 1108 string from_name2_arg, 1109 string from_subsample_name_arg, 1110 const SymbolTable &symbol_table_arg); 1111 void get_base_name(const SymbolType symb_type, string &lhs_field) const; 1112 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1113 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1114 void writeJsonOutput(ostream &output) const override; 1115 }; 1116 1117 class ModelDiagnosticsStatement : public Statement 1118 { 1119 public: 1120 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1121 void writeJsonOutput(ostream &output) const override; 1122 }; 1123 1124 class Smoother2histvalStatement : public Statement 1125 { 1126 private: 1127 const OptionsList options_list; 1128 public: 1129 explicit Smoother2histvalStatement(OptionsList options_list_arg); 1130 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1131 void writeJsonOutput(ostream &output) const override; 1132 }; 1133 1134 class GMMEstimationStatement : public Statement 1135 { 1136 private: 1137 const SymbolList symbol_list; 1138 const OptionsList options_list; 1139 public: 1140 GMMEstimationStatement(SymbolList symbol_list_arg, OptionsList options_list_arg); 1141 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1142 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1143 void writeJsonOutput(ostream &output) const override; 1144 }; 1145 1146 class SMMEstimationStatement : public Statement 1147 { 1148 private: 1149 const SymbolList symbol_list; 1150 const OptionsList options_list; 1151 public: 1152 SMMEstimationStatement(SymbolList symbol_list_arg, OptionsList options_list_arg); 1153 void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings) override; 1154 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1155 void writeJsonOutput(ostream &output) const override; 1156 }; 1157 1158 class GenerateIRFsStatement : public Statement 1159 { 1160 public: 1161 private: 1162 const OptionsList options_list; 1163 const vector<string> generate_irf_names; 1164 const vector<map<string, double>> generate_irf_elements; 1165 public: 1166 GenerateIRFsStatement(OptionsList options_list_arg, 1167 vector<string> generate_irf_names_arg, 1168 vector<map<string, double>> generate_irf_elements_arg); 1169 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1170 void writeJsonOutput(ostream &output) const override; 1171 }; 1172 1173 class VarExpectationModelStatement : public Statement 1174 { 1175 public: 1176 const string model_name; 1177 private: 1178 expr_t expression; 1179 public: 1180 const string aux_model_name, horizon; 1181 const expr_t discount; 1182 const SymbolTable &symbol_table; 1183 // List of generated auxiliary param ids, in variable-major order 1184 vector<int> aux_params_ids; // TODO: move this to some new VarModelTable object 1185 private: 1186 vector<tuple<int, int, double>> vars_params_constants; 1187 public: 1188 VarExpectationModelStatement(string model_name_arg, expr_t expression_arg, string aux_model_name_arg, 1189 string horizon_arg, expr_t discount_arg, const SymbolTable &symbol_table_arg); 1190 void substituteUnaryOpNodes(const lag_equivalence_table_t &nodes, ExprNode::subst_table_t &subst_table); 1191 void substituteDiff(const lag_equivalence_table_t &diff_table, ExprNode::subst_table_t &subst_table); 1192 // Analyzes the linear combination contained in the 'expression' option 1193 /* Must be called after substituteUnaryOpNodes() and substituteDiff() (in 1194 that order) */ 1195 void matchExpression(); 1196 void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const override; 1197 void writeJsonOutput(ostream &output) const override; 1198 }; 1199 1200 #endif 1201