Merge branch 'rmExtraExo'
commit
28ffa9c56f
File diff suppressed because it is too large
Load Diff
|
@ -97,6 +97,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ForecastStatement : public Statement
|
class ForecastStatement : public Statement
|
||||||
|
@ -108,6 +109,7 @@ public:
|
||||||
ForecastStatement(const SymbolList &symbol_list_arg,
|
ForecastStatement(const SymbolList &symbol_list_arg,
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RamseyModelStatement : public Statement
|
class RamseyModelStatement : public Statement
|
||||||
|
@ -120,6 +122,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RamseyPolicyStatement : public Statement
|
class RamseyPolicyStatement : public Statement
|
||||||
|
@ -132,6 +135,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DiscretionaryPolicyStatement : public Statement
|
class DiscretionaryPolicyStatement : public Statement
|
||||||
|
@ -144,6 +148,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class RplotStatement : public Statement
|
class RplotStatement : public Statement
|
||||||
|
@ -153,6 +158,7 @@ private:
|
||||||
public:
|
public:
|
||||||
RplotStatement(const SymbolList &symbol_list_arg);
|
RplotStatement(const SymbolList &symbol_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class UnitRootVarsStatement : public Statement
|
class UnitRootVarsStatement : public Statement
|
||||||
|
@ -191,6 +197,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DynareSensitivityStatement : public Statement
|
class DynareSensitivityStatement : public Statement
|
||||||
|
@ -201,6 +208,7 @@ public:
|
||||||
DynareSensitivityStatement(const OptionsList &options_list_arg);
|
DynareSensitivityStatement(const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObservationTrendsStatement : public Statement
|
class ObservationTrendsStatement : public Statement
|
||||||
|
@ -214,6 +222,7 @@ public:
|
||||||
ObservationTrendsStatement(const trend_elements_t &trend_elements_arg,
|
ObservationTrendsStatement(const trend_elements_t &trend_elements_arg,
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class OsrParamsStatement : public Statement
|
class OsrParamsStatement : public Statement
|
||||||
|
@ -224,6 +233,7 @@ public:
|
||||||
OsrParamsStatement(const SymbolList &symbol_list_arg);
|
OsrParamsStatement(const SymbolList &symbol_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class OsrStatement : public Statement
|
class OsrStatement : public Statement
|
||||||
|
@ -236,6 +246,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DynaTypeStatement : public Statement
|
class DynaTypeStatement : public Statement
|
||||||
|
@ -247,6 +258,7 @@ public:
|
||||||
DynaTypeStatement(const SymbolList &symbol_list_arg,
|
DynaTypeStatement(const SymbolList &symbol_list_arg,
|
||||||
const string &filename_arg);
|
const string &filename_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DynaSaveStatement : public Statement
|
class DynaSaveStatement : public Statement
|
||||||
|
@ -258,6 +270,7 @@ public:
|
||||||
DynaSaveStatement(const SymbolList &symbol_list_arg,
|
DynaSaveStatement(const SymbolList &symbol_list_arg,
|
||||||
const string &filename_arg);
|
const string &filename_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModelComparisonStatement : public Statement
|
class ModelComparisonStatement : public Statement
|
||||||
|
@ -310,6 +323,7 @@ public:
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EstimatedParamsInitStatement : public Statement
|
class EstimatedParamsInitStatement : public Statement
|
||||||
|
@ -324,6 +338,7 @@ public:
|
||||||
const bool use_calibration_arg);
|
const bool use_calibration_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EstimatedParamsBoundsStatement : public Statement
|
class EstimatedParamsBoundsStatement : public Statement
|
||||||
|
@ -335,6 +350,7 @@ public:
|
||||||
EstimatedParamsBoundsStatement(const vector<EstimationParams> &estim_params_list_arg,
|
EstimatedParamsBoundsStatement(const vector<EstimationParams> &estim_params_list_arg,
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class OptimWeightsStatement : public Statement
|
class OptimWeightsStatement : public Statement
|
||||||
|
@ -352,6 +368,7 @@ public:
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \todo Make model_tree a member instead of a pointer */
|
/*! \todo Make model_tree a member instead of a pointer */
|
||||||
|
@ -373,6 +390,7 @@ public:
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
//! Return the Planner Objective
|
//! Return the Planner Objective
|
||||||
StaticModel *getPlannerObjective() const;
|
StaticModel *getPlannerObjective() const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class BVARDensityStatement : public Statement
|
class BVARDensityStatement : public Statement
|
||||||
|
@ -457,6 +475,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class MSSBVARForecastStatement : public Statement
|
class MSSBVARForecastStatement : public Statement
|
||||||
|
@ -525,6 +544,7 @@ public:
|
||||||
ShockDecompositionStatement(const SymbolList &symbol_list_arg,
|
ShockDecompositionStatement(const SymbolList &symbol_list_arg,
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConditionalForecastStatement : public Statement
|
class ConditionalForecastStatement : public Statement
|
||||||
|
@ -534,6 +554,7 @@ private:
|
||||||
public:
|
public:
|
||||||
ConditionalForecastStatement(const OptionsList &options_list_arg);
|
ConditionalForecastStatement(const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class PlotConditionalForecastStatement : public Statement
|
class PlotConditionalForecastStatement : public Statement
|
||||||
|
@ -545,6 +566,7 @@ private:
|
||||||
public:
|
public:
|
||||||
PlotConditionalForecastStatement(int periods_arg, const SymbolList &symbol_list_arg);
|
PlotConditionalForecastStatement(int periods_arg, const SymbolList &symbol_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CalibSmootherStatement : public Statement
|
class CalibSmootherStatement : public Statement
|
||||||
|
@ -557,6 +579,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExtendedPathStatement : public Statement
|
class ExtendedPathStatement : public Statement
|
||||||
|
@ -734,6 +757,7 @@ public:
|
||||||
const OptionsList &options_list_arg);
|
const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class StdPriorStatement : public BasicPriorStatement
|
class StdPriorStatement : public BasicPriorStatement
|
||||||
|
@ -749,6 +773,7 @@ public:
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CorrPriorStatement : public BasicPriorStatement
|
class CorrPriorStatement : public BasicPriorStatement
|
||||||
|
@ -767,6 +792,7 @@ public:
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class PriorEqualStatement : public Statement
|
class PriorEqualStatement : public Statement
|
||||||
|
@ -794,6 +820,7 @@ public:
|
||||||
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
|
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class BasicOptionsStatement : public Statement
|
class BasicOptionsStatement : public Statement
|
||||||
|
@ -824,6 +851,7 @@ public:
|
||||||
OptionsStatement(const string &name_arg, const string &subsample_name_arg, const OptionsList &options_list_arg);
|
OptionsStatement(const string &name_arg, const string &subsample_name_arg, const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class StdOptionsStatement : public BasicOptionsStatement
|
class StdOptionsStatement : public BasicOptionsStatement
|
||||||
|
@ -837,6 +865,7 @@ public:
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class CorrOptionsStatement : public BasicOptionsStatement
|
class CorrOptionsStatement : public BasicOptionsStatement
|
||||||
|
@ -852,6 +881,7 @@ public:
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class OptionsEqualStatement : public Statement
|
class OptionsEqualStatement : public Statement
|
||||||
|
@ -879,6 +909,7 @@ public:
|
||||||
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
|
void get_base_name(const SymbolType symb_type, string &lhs_field) const;
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ModelDiagnosticsStatement : public Statement
|
class ModelDiagnosticsStatement : public Statement
|
||||||
|
@ -895,6 +926,7 @@ private:
|
||||||
public:
|
public:
|
||||||
Smoother2histvalStatement(const OptionsList &options_list_arg);
|
Smoother2histvalStatement(const OptionsList &options_list_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003-2014 Dynare Team
|
* Copyright (C) 2003-2015 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -50,6 +50,31 @@ DataTree::~DataTree()
|
||||||
delete *it;
|
delete *it;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DataTree::reindex(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
variable_node_map.clear();
|
||||||
|
unary_op_node_map.clear();
|
||||||
|
binary_op_node_map.clear();
|
||||||
|
trinary_op_node_map.clear();
|
||||||
|
external_function_node_map.clear();
|
||||||
|
first_deriv_external_function_node_map.clear();
|
||||||
|
second_deriv_external_function_node_map.clear();
|
||||||
|
|
||||||
|
reindexLocalVars(orig_symbol_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DataTree::reindexLocalVars(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
map<int, expr_t> orig_local_variables_table = local_variables_table;
|
||||||
|
local_variables_table.clear();
|
||||||
|
for (map<int, expr_t>::const_iterator it = orig_local_variables_table.begin();
|
||||||
|
it != orig_local_variables_table.end(); it++)
|
||||||
|
AddLocalVariable(symbol_table.getID(orig_symbol_table.getName(it->first)),
|
||||||
|
it->second->cloneDynamicReindex(*this, orig_symbol_table));
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
DataTree::AddNonNegativeConstant(const string &value)
|
DataTree::AddNonNegativeConstant(const string &value)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003-2014 Dynare Team
|
* Copyright (C) 2003-2015 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -233,10 +233,13 @@ public:
|
||||||
//! Returns the minimum lag (as a negative number) of the given symbol in the whole data tree (and not only in the equations !!)
|
//! Returns the minimum lag (as a negative number) of the given symbol in the whole data tree (and not only in the equations !!)
|
||||||
/*! Returns 0 if the symbol is not used */
|
/*! Returns 0 if the symbol is not used */
|
||||||
int minLagForSymbol(int symb_id) const;
|
int minLagForSymbol(int symb_id) const;
|
||||||
|
inline SymbolTable *getSymbolTable() const { return &symbol_table; };
|
||||||
//! Write the Header for getPowerDeriv when use_dll is used
|
//! Write the Header for getPowerDeriv when use_dll is used
|
||||||
void writePowerDerivCHeader(ostream &output) const;
|
void writePowerDerivCHeader(ostream &output) const;
|
||||||
//! Write getPowerDeriv
|
//! Write getPowerDeriv
|
||||||
void writePowerDeriv(ostream &output, bool use_dll) const;
|
void writePowerDeriv(ostream &output, bool use_dll) const;
|
||||||
|
void reindex(SymbolTable &orig_symbol_table);
|
||||||
|
void reindexLocalVars(SymbolTable &orig_symbol_table);
|
||||||
//! Thrown when trying to access an unknown variable by deriv_id
|
//! Thrown when trying to access an unknown variable by deriv_id
|
||||||
class UnknownDerivIDException
|
class UnknownDerivIDException
|
||||||
{
|
{
|
||||||
|
|
|
@ -4202,6 +4202,23 @@ DynamicModel::addStaticOnlyEquation(expr_t eq, int lineno)
|
||||||
static_only_equations_lineno.push_back(lineno);
|
static_only_equations_lineno.push_back(lineno);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DynamicModel::reindex(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
ModelTree::reindex(orig_symbol_table);
|
||||||
|
reindexStaticOnlyEquations(orig_symbol_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DynamicModel::reindexStaticOnlyEquations(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
vector<BinaryOpNode *>eqbak = static_only_equations;
|
||||||
|
static_only_equations.clear();
|
||||||
|
for (size_t i = 0; i < eqbak.size(); i++)
|
||||||
|
addStaticOnlyEquation(eqbak[i]->cloneDynamicReindex(*this, orig_symbol_table),
|
||||||
|
static_only_equations_lineno[i]);
|
||||||
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
DynamicModel::staticOnlyEquationsNbr() const
|
DynamicModel::staticOnlyEquationsNbr() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -244,6 +244,12 @@ public:
|
||||||
//! Adds an equation marked as [static]
|
//! Adds an equation marked as [static]
|
||||||
void addStaticOnlyEquation(expr_t eq, int lineno);
|
void addStaticOnlyEquation(expr_t eq, int lineno);
|
||||||
|
|
||||||
|
//! reindex Dynamic Model after removal of extra exogenous
|
||||||
|
void reindex(SymbolTable &orig_symbol_table);
|
||||||
|
|
||||||
|
//! reindex equations marked as [static]
|
||||||
|
void reindexStaticOnlyEquations(SymbolTable &orig_symbol_table);
|
||||||
|
|
||||||
//! Returns number of static only equations
|
//! Returns number of static only equations
|
||||||
size_t staticOnlyEquationsNbr() const;
|
size_t staticOnlyEquationsNbr() const;
|
||||||
|
|
||||||
|
|
|
@ -360,6 +360,12 @@ NumConstNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return dynamic_datatree.AddNonNegativeConstant(datatree.num_constants.get(id));
|
return dynamic_datatree.AddNonNegativeConstant(datatree.num_constants.get(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
NumConstNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
return dynamic_datatree.AddNonNegativeConstant(datatree.num_constants.get(id));
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
NumConstNode::maxEndoLead() const
|
NumConstNode::maxEndoLead() const
|
||||||
{
|
{
|
||||||
|
@ -1000,6 +1006,12 @@ VariableNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return dynamic_datatree.AddVariable(symb_id, lag);
|
return dynamic_datatree.AddVariable(symb_id, lag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
VariableNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
return dynamic_datatree.AddVariable(dynamic_datatree.symbol_table.getID(orig_symbol_table.getName(symb_id)), lag);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
VariableNode::maxEndoLead() const
|
VariableNode::maxEndoLead() const
|
||||||
{
|
{
|
||||||
|
@ -2252,6 +2264,13 @@ UnaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return buildSimilarUnaryOpNode(substarg, dynamic_datatree);
|
return buildSimilarUnaryOpNode(substarg, dynamic_datatree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
UnaryOpNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
expr_t substarg = arg->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
return buildSimilarUnaryOpNode(substarg, dynamic_datatree);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
UnaryOpNode::maxEndoLead() const
|
UnaryOpNode::maxEndoLead() const
|
||||||
{
|
{
|
||||||
|
@ -3477,6 +3496,14 @@ BinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return buildSimilarBinaryOpNode(substarg1, substarg2, dynamic_datatree);
|
return buildSimilarBinaryOpNode(substarg1, substarg2, dynamic_datatree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
BinaryOpNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
expr_t substarg1 = arg1->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
expr_t substarg2 = arg2->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
return buildSimilarBinaryOpNode(substarg1, substarg2, dynamic_datatree);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
BinaryOpNode::maxEndoLead() const
|
BinaryOpNode::maxEndoLead() const
|
||||||
{
|
{
|
||||||
|
@ -4153,6 +4180,15 @@ TrinaryOpNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return buildSimilarTrinaryOpNode(substarg1, substarg2, substarg3, dynamic_datatree);
|
return buildSimilarTrinaryOpNode(substarg1, substarg2, substarg3, dynamic_datatree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
TrinaryOpNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
expr_t substarg1 = arg1->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
expr_t substarg2 = arg2->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
expr_t substarg3 = arg3->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
return buildSimilarTrinaryOpNode(substarg1, substarg2, substarg3, dynamic_datatree);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
TrinaryOpNode::maxEndoLead() const
|
TrinaryOpNode::maxEndoLead() const
|
||||||
{
|
{
|
||||||
|
@ -4925,6 +4961,17 @@ ExternalFunctionNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
return dynamic_datatree.AddExternalFunction(symb_id, dynamic_arguments);
|
return dynamic_datatree.AddExternalFunction(symb_id, dynamic_arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
ExternalFunctionNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
vector<expr_t> dynamic_arguments;
|
||||||
|
for (vector<expr_t>::const_iterator it = arguments.begin();
|
||||||
|
it != arguments.end(); it++)
|
||||||
|
dynamic_arguments.push_back((*it)->cloneDynamicReindex(dynamic_datatree, orig_symbol_table));
|
||||||
|
return dynamic_datatree.AddExternalFunction(dynamic_datatree.symbol_table.getID(orig_symbol_table.getName(symb_id)),
|
||||||
|
dynamic_arguments);
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
ExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
ExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
||||||
{
|
{
|
||||||
|
@ -5220,6 +5267,18 @@ FirstDerivExternalFunctionNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
inputIndex);
|
inputIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
FirstDerivExternalFunctionNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
vector<expr_t> dynamic_arguments;
|
||||||
|
for (vector<expr_t>::const_iterator it = arguments.begin();
|
||||||
|
it != arguments.end(); it++)
|
||||||
|
dynamic_arguments.push_back((*it)->cloneDynamicReindex(dynamic_datatree, orig_symbol_table));
|
||||||
|
return dynamic_datatree.AddFirstDerivExternalFunction(dynamic_datatree.symbol_table.getID(orig_symbol_table.getName(symb_id)),
|
||||||
|
dynamic_arguments,
|
||||||
|
inputIndex);
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
FirstDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
FirstDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
||||||
{
|
{
|
||||||
|
@ -5455,6 +5514,18 @@ SecondDerivExternalFunctionNode::cloneDynamic(DataTree &dynamic_datatree) const
|
||||||
inputIndex1, inputIndex2);
|
inputIndex1, inputIndex2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t
|
||||||
|
SecondDerivExternalFunctionNode::cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const
|
||||||
|
{
|
||||||
|
vector<expr_t> dynamic_arguments;
|
||||||
|
for (vector<expr_t>::const_iterator it = arguments.begin();
|
||||||
|
it != arguments.end(); it++)
|
||||||
|
dynamic_arguments.push_back((*it)->cloneDynamicReindex(dynamic_datatree, orig_symbol_table));
|
||||||
|
return dynamic_datatree.AddSecondDerivExternalFunction(dynamic_datatree.symbol_table.getID(orig_symbol_table.getName(symb_id)),
|
||||||
|
dynamic_arguments,
|
||||||
|
inputIndex1, inputIndex2);
|
||||||
|
}
|
||||||
|
|
||||||
expr_t
|
expr_t
|
||||||
SecondDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
SecondDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -410,6 +410,9 @@ public:
|
||||||
//! Add ExprNodes to the provided datatree
|
//! Add ExprNodes to the provided datatree
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const = 0;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const = 0;
|
||||||
|
|
||||||
|
//! Add ExprNodes to the provided datatree, changing the symbol id from those provided in orig_symbol_table
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const = 0;
|
||||||
|
|
||||||
//! Move a trend variable with lag/lead to time t by dividing/multiplying by its growth factor
|
//! Move a trend variable with lag/lead to time t by dividing/multiplying by its growth factor
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const = 0;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const = 0;
|
||||||
|
|
||||||
|
@ -471,6 +474,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
virtual bool isInStaticForm() const;
|
virtual bool isInStaticForm() const;
|
||||||
};
|
};
|
||||||
|
@ -534,6 +538,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
virtual bool isInStaticForm() const;
|
virtual bool isInStaticForm() const;
|
||||||
};
|
};
|
||||||
|
@ -612,6 +617,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
virtual bool isInStaticForm() const;
|
virtual bool isInStaticForm() const;
|
||||||
};
|
};
|
||||||
|
@ -703,6 +709,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
//! Function to write out the oPowerNode in expr_t terms as opposed to writing out the function itself
|
//! Function to write out the oPowerNode in expr_t terms as opposed to writing out the function itself
|
||||||
expr_t unpackPowerDeriv() const;
|
expr_t unpackPowerDeriv() const;
|
||||||
|
@ -774,6 +781,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
virtual bool isInStaticForm() const;
|
virtual bool isInStaticForm() const;
|
||||||
};
|
};
|
||||||
|
@ -850,6 +858,7 @@ public:
|
||||||
virtual expr_t replaceTrendVar() const;
|
virtual expr_t replaceTrendVar() const;
|
||||||
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
virtual expr_t detrend(int symb_id, bool log_trend, expr_t trend) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const = 0;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const = 0;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const = 0;
|
||||||
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const;
|
||||||
virtual bool isInStaticForm() const;
|
virtual bool isInStaticForm() const;
|
||||||
};
|
};
|
||||||
|
@ -880,6 +889,7 @@ public:
|
||||||
virtual expr_t toStatic(DataTree &static_datatree) const;
|
virtual expr_t toStatic(DataTree &static_datatree) const;
|
||||||
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FirstDerivExternalFunctionNode : public AbstractExternalFunctionNode
|
class FirstDerivExternalFunctionNode : public AbstractExternalFunctionNode
|
||||||
|
@ -914,6 +924,7 @@ public:
|
||||||
virtual expr_t toStatic(DataTree &static_datatree) const;
|
virtual expr_t toStatic(DataTree &static_datatree) const;
|
||||||
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SecondDerivExternalFunctionNode : public AbstractExternalFunctionNode
|
class SecondDerivExternalFunctionNode : public AbstractExternalFunctionNode
|
||||||
|
@ -950,6 +961,7 @@ public:
|
||||||
virtual expr_t toStatic(DataTree &static_datatree) const;
|
virtual expr_t toStatic(DataTree &static_datatree) const;
|
||||||
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const;
|
||||||
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const;
|
||||||
|
virtual expr_t cloneDynamicReindex(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 Dynare Team
|
* Copyright (C) 2010-2015 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -24,7 +24,6 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "ExternalFunctionsTable.hh"
|
#include "ExternalFunctionsTable.hh"
|
||||||
#include "SymbolTable.hh"
|
|
||||||
|
|
||||||
ExternalFunctionsTable::ExternalFunctionsTable()
|
ExternalFunctionsTable::ExternalFunctionsTable()
|
||||||
{
|
{
|
||||||
|
@ -115,3 +114,44 @@ ExternalFunctionsTable::addExternalFunction(int symb_id, const external_function
|
||||||
|
|
||||||
externalFunctionTable[symb_id] = external_function_options_chng;
|
externalFunctionTable[symb_id] = external_function_options_chng;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ExternalFunctionsTable::reindex(SymbolTable &new_symbol_table, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
external_function_table_type orig_externalFunctionTable = externalFunctionTable;
|
||||||
|
externalFunctionTable.clear();
|
||||||
|
for (external_function_table_type::const_iterator it = orig_externalFunctionTable.begin();
|
||||||
|
it != orig_externalFunctionTable.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
external_function_options new_external_function_options;
|
||||||
|
if (it->second.firstDerivSymbID == eExtFunNotSet ||
|
||||||
|
it->second.firstDerivSymbID == eExtFunSetButNoNameProvided)
|
||||||
|
new_external_function_options.firstDerivSymbID = it->second.firstDerivSymbID;
|
||||||
|
else
|
||||||
|
new_external_function_options.firstDerivSymbID =
|
||||||
|
new_symbol_table.getID(orig_symbol_table.getName(it->second.firstDerivSymbID));
|
||||||
|
|
||||||
|
if (it->second.secondDerivSymbID == eExtFunNotSet ||
|
||||||
|
it->second.secondDerivSymbID == eExtFunSetButNoNameProvided)
|
||||||
|
new_external_function_options.secondDerivSymbID = it->second.secondDerivSymbID;
|
||||||
|
else
|
||||||
|
new_external_function_options.secondDerivSymbID =
|
||||||
|
new_symbol_table.getID(orig_symbol_table.getName(it->second.secondDerivSymbID));
|
||||||
|
new_external_function_options.nargs = it->second.nargs;
|
||||||
|
bool new_track_nargs = true;
|
||||||
|
if (it->second.nargs == eExtFunNotSet)
|
||||||
|
{
|
||||||
|
new_track_nargs = false;
|
||||||
|
new_external_function_options.nargs = eExtFunSetDefaultNargs;
|
||||||
|
}
|
||||||
|
addExternalFunction(new_symbol_table.getID(orig_symbol_table.getName(it->first)),
|
||||||
|
new_external_function_options,
|
||||||
|
new_track_nargs);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
cerr << "Error: problem encountered when reindexing external functions table." << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2010-2011 Dynare Team
|
* Copyright (C) 2010-2015 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -27,6 +27,8 @@ using namespace std;
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
#include "SymbolTable.hh"
|
||||||
|
|
||||||
enum ExternalFunctionSetOrNot
|
enum ExternalFunctionSetOrNot
|
||||||
{
|
{
|
||||||
eExtFunSetButNoNameProvided = -2, //! Signifies that the derivative is obtained from the top-level function
|
eExtFunSetButNoNameProvided = -2, //! Signifies that the derivative is obtained from the top-level function
|
||||||
|
@ -76,6 +78,8 @@ public:
|
||||||
inline int getSecondDerivSymbID(int symb_id) const throw (UnknownExternalFunctionSymbolIDException);
|
inline int getSecondDerivSymbID(int symb_id) const throw (UnknownExternalFunctionSymbolIDException);
|
||||||
//! Returns the total number of unique external functions declared or used in the .mod file
|
//! Returns the total number of unique external functions declared or used in the .mod file
|
||||||
inline int get_total_number_of_unique_model_block_external_functions() const;
|
inline int get_total_number_of_unique_model_block_external_functions() const;
|
||||||
|
//! Reindex external function table (after removal of extra exo)
|
||||||
|
void reindex(SymbolTable &new_symbol_table, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
|
|
|
@ -300,13 +300,28 @@ ModFile::checkPass()
|
||||||
if (++it != unusedExo.end())
|
if (++it != unusedExo.end())
|
||||||
warnings << ", ";
|
warnings << ", ";
|
||||||
}
|
}
|
||||||
warnings << ") are declared but not used in the model. This may lead to crashes or unexpected behaviour." << endl;
|
warnings << ") are declared but not used in the model. We have removed them and will attempt to continue..." << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ModFile::transformPass(bool nostrict)
|
ModFile::transformPass(bool nostrict)
|
||||||
{
|
{
|
||||||
|
// Remove unused exogenous from symbol table and update dynamic_model
|
||||||
|
set<int> unusedExo = dynamic_model.findUnusedExogenous();
|
||||||
|
if (unusedExo.size() > 0)
|
||||||
|
{
|
||||||
|
SymbolTable orig_symbol_table = symbol_table;
|
||||||
|
symbol_table.rmExo(unusedExo);
|
||||||
|
dynamic_model.reindex(orig_symbol_table);
|
||||||
|
external_functions_table.reindex(symbol_table, orig_symbol_table);
|
||||||
|
|
||||||
|
vector<Statement *> orig_statements = statements;
|
||||||
|
statements.clear();
|
||||||
|
for (vector<Statement *>::iterator it = orig_statements.begin(); it != orig_statements.end(); it++)
|
||||||
|
addStatement((*it)->cloneAndReindexSymbIds(dynamic_model, orig_symbol_table));
|
||||||
|
}
|
||||||
|
|
||||||
// Save the original model (must be done before any model transformations by preprocessor)
|
// Save the original model (must be done before any model transformations by preprocessor)
|
||||||
dynamic_model.cloneDynamic(original_model);
|
dynamic_model.cloneDynamic(original_model);
|
||||||
|
|
||||||
|
|
|
@ -1413,6 +1413,64 @@ ModelTree::addAuxEquation(expr_t eq)
|
||||||
aux_equations.push_back(beq);
|
aux_equations.push_back(beq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ModelTree::reindex(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
DataTree::reindex(orig_symbol_table);
|
||||||
|
reindexEquations(orig_symbol_table);
|
||||||
|
reindexTrendSymbolsMap(orig_symbol_table);
|
||||||
|
reindexNonstationarySymbolsMap(orig_symbol_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ModelTree::reindexEquations(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
vector<BinaryOpNode *>eqbak = equations;
|
||||||
|
equations.clear();
|
||||||
|
for (size_t i = 0; i < eqbak.size(); i++)
|
||||||
|
addEquation(eqbak[i]->cloneDynamicReindex(*this, orig_symbol_table), equations_lineno[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ModelTree::reindexTrendSymbolsMap(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
map<int, expr_t> orig_trend_symbols_map = trend_symbols_map;
|
||||||
|
trend_symbols_map.clear();
|
||||||
|
for (map<int, expr_t>::const_iterator it = orig_trend_symbols_map.begin();
|
||||||
|
it != orig_trend_symbols_map.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vector<int> symb_id (1, symbol_table.getID(orig_symbol_table.getName(it->first)));
|
||||||
|
addTrendVariables(symb_id, it->second->cloneDynamicReindex(*this, orig_symbol_table));
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "Error: unused exo in trend symbols." << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ModelTree::reindexNonstationarySymbolsMap(SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
nonstationary_symbols_map_t orig_nonstationary_symbols_map = nonstationary_symbols_map;
|
||||||
|
nonstationary_symbols_map.clear();
|
||||||
|
for (nonstationary_symbols_map_t::const_iterator it = orig_nonstationary_symbols_map.begin();
|
||||||
|
it != orig_nonstationary_symbols_map.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vector<int> symb_id (1, symbol_table.getID(orig_symbol_table.getName(it->first)));
|
||||||
|
addNonstationaryVariables(symb_id,
|
||||||
|
it->second.first,
|
||||||
|
it->second.second->cloneDynamicReindex(*this, orig_symbol_table));
|
||||||
|
}
|
||||||
|
catch(...)
|
||||||
|
{
|
||||||
|
cerr << "Error: unused exo in nonstationary symbols." << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ModelTree::addTrendVariables(vector<int> trend_vars, expr_t growth_factor) throw (TrendException)
|
ModelTree::addTrendVariables(vector<int> trend_vars, expr_t growth_factor) throw (TrendException)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003-2014 Dynare Team
|
* Copyright (C) 2003-2015 Dynare Team
|
||||||
*
|
*
|
||||||
* This file is part of Dynare.
|
* This file is part of Dynare.
|
||||||
*
|
*
|
||||||
|
@ -303,6 +303,13 @@ public:
|
||||||
void addEquation(expr_t eq, int lineno, vector<pair<string, string> > &eq_tags);
|
void addEquation(expr_t eq, int lineno, vector<pair<string, string> > &eq_tags);
|
||||||
//! Declare a node as an auxiliary equation of the model, adding it at the end of the list of auxiliary equations
|
//! Declare a node as an auxiliary equation of the model, adding it at the end of the list of auxiliary equations
|
||||||
void addAuxEquation(expr_t eq);
|
void addAuxEquation(expr_t eq);
|
||||||
|
void reindex(SymbolTable &orig_symbol_table);
|
||||||
|
//! reindex equations after change in symbol_table
|
||||||
|
void reindexEquations(SymbolTable &orig_symbol_table);
|
||||||
|
//! reindex trend_symbol_map after change in symbol_table
|
||||||
|
void reindexTrendSymbolsMap(SymbolTable &orig_symbol_table);
|
||||||
|
//! reindex nonstationary_symbol_map after change in symbol_table
|
||||||
|
void reindexNonstationarySymbolsMap(SymbolTable &orig_symbol_table);
|
||||||
//! Returns the number of equations in the model
|
//! Returns the number of equations in the model
|
||||||
int equation_number() const;
|
int equation_number() const;
|
||||||
//! Adds a trend variable with its growth factor
|
//! Adds a trend variable with its growth factor
|
||||||
|
|
|
@ -74,6 +74,32 @@ InitParamStatement::fillEvalContext(eval_context_t &eval_context) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
InitParamStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
string error;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new InitParamStatement(symbol_table.getID(orig_symbol_table.getName(symb_id)),
|
||||||
|
param_value->cloneDynamicReindex(dynamic_datatree, orig_symbol_table),
|
||||||
|
symbol_table);
|
||||||
|
}
|
||||||
|
catch (SymbolTable::UnknownSymbolIDException &e)
|
||||||
|
{
|
||||||
|
error = orig_symbol_table.getName(e.id);
|
||||||
|
}
|
||||||
|
catch (SymbolTable::UnknownSymbolNameException &e)
|
||||||
|
{
|
||||||
|
error = e.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
cerr << endl
|
||||||
|
<< "ERROR: The following vars were used in the init param statement(s) but were not declared." << endl
|
||||||
|
<< " This likely means that you declared them as varexo and that they're not in the model" << endl
|
||||||
|
<< error << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
InitOrEndValStatement::InitOrEndValStatement(const init_values_t &init_values_arg,
|
InitOrEndValStatement::InitOrEndValStatement(const init_values_t &init_values_arg,
|
||||||
const SymbolTable &symbol_table_arg,
|
const SymbolTable &symbol_table_arg,
|
||||||
const bool &all_values_required_arg) :
|
const bool &all_values_required_arg) :
|
||||||
|
@ -209,6 +235,35 @@ InitValStatement::writeOutputPostInit(ostream &output) const
|
||||||
<<"end;" << endl;
|
<<"end;" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
InitValStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
vector<string> errors;
|
||||||
|
init_values_t new_init_values;
|
||||||
|
for (init_values_t::const_iterator it=init_values.begin();
|
||||||
|
it != init_values.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_init_values.push_back(make_pair(symbol_table.getID(orig_symbol_table.getName(it->first)),
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table)));
|
||||||
|
}
|
||||||
|
catch (SymbolTable::UnknownSymbolNameException &e)
|
||||||
|
{
|
||||||
|
errors.push_back(e.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!errors.empty())
|
||||||
|
{
|
||||||
|
cerr << endl
|
||||||
|
<< "ERROR: The following vars were used in the initval statement(s) but were not declared." << endl
|
||||||
|
<< " This likely means that you declared them as varexo and that they're not in the model" << endl;
|
||||||
|
for (vector<string>::const_iterator it = errors.begin(); it != errors.end(); it++)
|
||||||
|
cerr << *it << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return new InitValStatement(new_init_values, symbol_table, all_values_required);
|
||||||
|
}
|
||||||
|
|
||||||
EndValStatement::EndValStatement(const init_values_t &init_values_arg,
|
EndValStatement::EndValStatement(const init_values_t &init_values_arg,
|
||||||
const SymbolTable &symbol_table_arg,
|
const SymbolTable &symbol_table_arg,
|
||||||
const bool &all_values_required_arg) :
|
const bool &all_values_required_arg) :
|
||||||
|
@ -255,6 +310,36 @@ EndValStatement::writeOutput(ostream &output, const string &basename, bool minim
|
||||||
writeInitValues(output);
|
writeInitValues(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
EndValStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
vector<string> errors;
|
||||||
|
init_values_t new_init_values;
|
||||||
|
|
||||||
|
for (init_values_t::const_iterator it=init_values.begin();
|
||||||
|
it != init_values.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_init_values.push_back(make_pair(symbol_table.getID(orig_symbol_table.getName(it->first)),
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table)));
|
||||||
|
}
|
||||||
|
catch (SymbolTable::UnknownSymbolNameException &e)
|
||||||
|
{
|
||||||
|
errors.push_back(e.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!errors.empty())
|
||||||
|
{
|
||||||
|
cerr << endl
|
||||||
|
<< "ERROR: The following vars were used in the endval statement(s) but were not declared." << endl
|
||||||
|
<< " This likely means that you declared them as varexo and that they're not in the model" << endl;
|
||||||
|
for (vector<string>::const_iterator it = errors.begin(); it != errors.end(); it++)
|
||||||
|
cerr << *it << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return new EndValStatement(new_init_values, symbol_table, all_values_required);
|
||||||
|
}
|
||||||
|
|
||||||
HistValStatement::HistValStatement(const hist_values_t &hist_values_arg,
|
HistValStatement::HistValStatement(const hist_values_t &hist_values_arg,
|
||||||
const SymbolTable &symbol_table_arg) :
|
const SymbolTable &symbol_table_arg) :
|
||||||
hist_values(hist_values_arg),
|
hist_values(hist_values_arg),
|
||||||
|
@ -321,6 +406,36 @@ HistValStatement::writeOutput(ostream &output, const string &basename, bool mini
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
HistValStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
vector<string> errors;
|
||||||
|
hist_values_t new_hist_values;
|
||||||
|
for (hist_values_t::const_iterator it=hist_values.begin();
|
||||||
|
it != hist_values.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_hist_values[make_pair(symbol_table.getID(orig_symbol_table.getName(it->first.first)),
|
||||||
|
it->first.second)] =
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
}
|
||||||
|
catch (SymbolTable::UnknownSymbolNameException &e)
|
||||||
|
{
|
||||||
|
errors.push_back(e.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!errors.empty())
|
||||||
|
{
|
||||||
|
cerr << endl
|
||||||
|
<< "ERROR: The following vars were used in the histval statement(s) but were not declared." << endl
|
||||||
|
<< " This likely means that you declared them as varexo and that they're not in the model" << endl;
|
||||||
|
for (vector<string>::const_iterator it = errors.begin(); it != errors.end(); it++)
|
||||||
|
cerr << *it << endl;
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
return new HistValStatement(new_hist_values, symbol_table);
|
||||||
|
}
|
||||||
|
|
||||||
InitvalFileStatement::InitvalFileStatement(const string &filename_arg) :
|
InitvalFileStatement::InitvalFileStatement(const string &filename_arg) :
|
||||||
filename(filename_arg)
|
filename(filename_arg)
|
||||||
{
|
{
|
||||||
|
@ -394,9 +509,10 @@ SaveParamsAndSteadyStateStatement::writeOutput(ostream &output, const string &ba
|
||||||
output << "save_params_and_steady_state('" << filename << "');" << endl;
|
output << "save_params_and_steady_state('" << filename << "');" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const string &filename,
|
LoadParamsAndSteadyStateStatement::LoadParamsAndSteadyStateStatement(const string &filename_arg,
|
||||||
const SymbolTable &symbol_table_arg,
|
const SymbolTable &symbol_table_arg,
|
||||||
WarningConsolidation &warnings) :
|
WarningConsolidation &warnings) :
|
||||||
|
filename(filename_arg),
|
||||||
symbol_table(symbol_table_arg)
|
symbol_table(symbol_table_arg)
|
||||||
{
|
{
|
||||||
cout << "Reading " << filename << "." << endl;
|
cout << "Reading " << filename << "." << endl;
|
||||||
|
|
|
@ -44,6 +44,7 @@ public:
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
//! Fill eval context with parameter value
|
//! Fill eval context with parameter value
|
||||||
void fillEvalContext(eval_context_t &eval_context) const;
|
void fillEvalContext(eval_context_t &eval_context) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class InitOrEndValStatement : public Statement
|
class InitOrEndValStatement : public Statement
|
||||||
|
@ -80,6 +81,7 @@ public:
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
//! Writes initializations for oo_.exo_simul and oo_.exo_det_simul
|
//! Writes initializations for oo_.exo_simul and oo_.exo_det_simul
|
||||||
void writeOutputPostInit(ostream &output) const;
|
void writeOutputPostInit(ostream &output) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class EndValStatement : public InitOrEndValStatement
|
class EndValStatement : public InitOrEndValStatement
|
||||||
|
@ -91,6 +93,7 @@ public:
|
||||||
//! Workaround for trac ticket #35
|
//! Workaround for trac ticket #35
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class HistValStatement : public Statement
|
class HistValStatement : public Statement
|
||||||
|
@ -111,6 +114,7 @@ public:
|
||||||
//! Workaround for trac ticket #157
|
//! Workaround for trac ticket #157
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class InitvalFileStatement : public Statement
|
class InitvalFileStatement : public Statement
|
||||||
|
@ -158,6 +162,7 @@ public:
|
||||||
class LoadParamsAndSteadyStateStatement : public Statement
|
class LoadParamsAndSteadyStateStatement : public Statement
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
const string filename;
|
||||||
const SymbolTable &symbol_table;
|
const SymbolTable &symbol_table;
|
||||||
//! Content of the file
|
//! Content of the file
|
||||||
/*! Maps symbol ID to numeric value (stored as string) */
|
/*! Maps symbol ID to numeric value (stored as string) */
|
||||||
|
|
|
@ -67,6 +67,31 @@ AbstractShocksStatement::writeDetShocks(ostream &output) const
|
||||||
output << "M_.exo_det_length = " << exo_det_length << ";\n";
|
output << "M_.exo_det_length = " << exo_det_length << ";\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AbstractShocksStatement::det_shocks_t
|
||||||
|
AbstractShocksStatement::reindexDetShocksSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
det_shocks_t new_det_shocks;
|
||||||
|
SymbolTable *new_symbol_table = dynamic_datatree.getSymbolTable();
|
||||||
|
for (det_shocks_t::const_iterator it=det_shocks.begin(); it!=det_shocks.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
vector<DetShockElement> det_shock_vec;
|
||||||
|
for (int i=0; i<it->second.size(); i++)
|
||||||
|
{
|
||||||
|
DetShockElement dse;
|
||||||
|
dse.period1 = it->second[i].period1;
|
||||||
|
dse.period2 = it->second[i].period2;
|
||||||
|
dse.value = it->second[i].value->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
det_shock_vec.push_back(dse);
|
||||||
|
}
|
||||||
|
new_det_shocks[new_symbol_table->getID(orig_symbol_table.getName(it->first))] = det_shock_vec;
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return new_det_shocks;
|
||||||
|
}
|
||||||
|
|
||||||
ShocksStatement::ShocksStatement(bool overwrite_arg,
|
ShocksStatement::ShocksStatement(bool overwrite_arg,
|
||||||
const det_shocks_t &det_shocks_arg,
|
const det_shocks_t &det_shocks_arg,
|
||||||
const var_and_std_shocks_t &var_shocks_arg,
|
const var_and_std_shocks_t &var_shocks_arg,
|
||||||
|
@ -332,6 +357,69 @@ ShocksStatement::has_calibrated_measurement_errors() const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
ShocksStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
var_and_std_shocks_t new_var_shocks, new_std_shocks;
|
||||||
|
covar_and_corr_shocks_t new_covar_shocks, new_corr_shocks;
|
||||||
|
SymbolTable *new_symbol_table = dynamic_datatree.getSymbolTable();
|
||||||
|
|
||||||
|
for (var_and_std_shocks_t::const_iterator it = var_shocks.begin();
|
||||||
|
it != var_shocks.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_var_shocks[new_symbol_table->getID(orig_symbol_table.getName(it->first))] =
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var_and_std_shocks_t::const_iterator it = std_shocks.begin();
|
||||||
|
it != std_shocks.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_std_shocks[new_symbol_table->getID(orig_symbol_table.getName(it->first))] =
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
for (covar_and_corr_shocks_t::const_iterator it = covar_shocks.begin();
|
||||||
|
it != covar_shocks.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_covar_shocks[make_pair(new_symbol_table->getID(orig_symbol_table.getName(it->first.first)),
|
||||||
|
new_symbol_table->getID(orig_symbol_table.getName(it->first.second)))] =
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
for (covar_and_corr_shocks_t::const_iterator it = corr_shocks.begin();
|
||||||
|
it != corr_shocks.end(); it++)
|
||||||
|
try
|
||||||
|
{
|
||||||
|
new_corr_shocks[make_pair(new_symbol_table->getID(orig_symbol_table.getName(it->first.first)),
|
||||||
|
new_symbol_table->getID(orig_symbol_table.getName(it->first.second)))] =
|
||||||
|
it->second->cloneDynamicReindex(dynamic_datatree, orig_symbol_table);
|
||||||
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ShocksStatement(overwrite,
|
||||||
|
reindexDetShocksSymbIds(dynamic_datatree, orig_symbol_table),
|
||||||
|
new_var_shocks,
|
||||||
|
new_std_shocks,
|
||||||
|
new_covar_shocks,
|
||||||
|
new_corr_shocks,
|
||||||
|
*(dynamic_datatree.getSymbolTable()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MShocksStatement::MShocksStatement(bool overwrite_arg,
|
MShocksStatement::MShocksStatement(bool overwrite_arg,
|
||||||
const det_shocks_t &det_shocks_arg,
|
const det_shocks_t &det_shocks_arg,
|
||||||
const SymbolTable &symbol_table_arg) :
|
const SymbolTable &symbol_table_arg) :
|
||||||
|
@ -352,6 +440,14 @@ MShocksStatement::writeOutput(ostream &output, const string &basename, bool mini
|
||||||
writeDetShocks(output);
|
writeDetShocks(output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
MShocksStatement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
return new MShocksStatement(overwrite,
|
||||||
|
reindexDetShocksSymbIds(dynamic_datatree, orig_symbol_table),
|
||||||
|
*(dynamic_datatree.getSymbolTable()));
|
||||||
|
}
|
||||||
|
|
||||||
ConditionalForecastPathsStatement::ConditionalForecastPathsStatement(const AbstractShocksStatement::det_shocks_t &paths_arg) :
|
ConditionalForecastPathsStatement::ConditionalForecastPathsStatement(const AbstractShocksStatement::det_shocks_t &paths_arg) :
|
||||||
paths(paths_arg),
|
paths(paths_arg),
|
||||||
path_length(-1)
|
path_length(-1)
|
||||||
|
|
|
@ -50,7 +50,7 @@ protected:
|
||||||
const det_shocks_t det_shocks;
|
const det_shocks_t det_shocks;
|
||||||
const SymbolTable &symbol_table;
|
const SymbolTable &symbol_table;
|
||||||
void writeDetShocks(ostream &output) const;
|
void writeDetShocks(ostream &output) const;
|
||||||
|
det_shocks_t reindexDetShocksSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
AbstractShocksStatement(bool mshocks_arg, bool overwrite_arg,
|
AbstractShocksStatement(bool mshocks_arg, bool overwrite_arg,
|
||||||
const det_shocks_t &det_shocks_arg,
|
const det_shocks_t &det_shocks_arg,
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
|
@ -79,6 +79,7 @@ public:
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
virtual void checkPass(ModFileStructure &mod_file_struct, WarningConsolidation &warnings);
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class MShocksStatement : public AbstractShocksStatement
|
class MShocksStatement : public AbstractShocksStatement
|
||||||
|
@ -88,6 +89,7 @@ public:
|
||||||
const det_shocks_t &det_shocks_arg,
|
const det_shocks_t &det_shocks_arg,
|
||||||
const SymbolTable &symbol_table_arg);
|
const SymbolTable &symbol_table_arg);
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const;
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConditionalForecastPathsStatement : public Statement
|
class ConditionalForecastPathsStatement : public Statement
|
||||||
|
|
|
@ -73,6 +73,12 @@ Statement::computingPass()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Statement *
|
||||||
|
Statement::cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table)
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
NativeStatement::NativeStatement(const string &native_statement_arg) :
|
NativeStatement::NativeStatement(const string &native_statement_arg) :
|
||||||
native_statement(native_statement_arg)
|
native_statement(native_statement_arg)
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,8 @@
|
||||||
|
|
||||||
#include "SymbolList.hh"
|
#include "SymbolList.hh"
|
||||||
#include "WarningConsolidation.hh"
|
#include "WarningConsolidation.hh"
|
||||||
|
#include "SymbolTable.hh"
|
||||||
|
#include "DataTree.hh"
|
||||||
|
|
||||||
class ModFileStructure
|
class ModFileStructure
|
||||||
{
|
{
|
||||||
|
@ -136,6 +138,11 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const = 0;
|
virtual void writeOutput(ostream &output, const string &basename, bool minimal_workspace) const = 0;
|
||||||
virtual void writeCOutput(ostream &output, const string &basename);
|
virtual void writeCOutput(ostream &output, const string &basename);
|
||||||
|
//! clone a statement while updating all symbol ids that are contained within it.
|
||||||
|
/* Symbol id's are updated from the symbol table contained in dynamic_datatree
|
||||||
|
The original symbol table is contained in orig_symbol_table
|
||||||
|
*/
|
||||||
|
virtual Statement *cloneAndReindexSymbIds(DataTree &dynamic_datatree, SymbolTable &orig_symbol_table);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NativeStatement : public Statement
|
class NativeStatement : public Statement
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <list>
|
||||||
|
|
||||||
#include "SymbolTable.hh"
|
#include "SymbolTable.hh"
|
||||||
|
|
||||||
|
@ -482,6 +483,52 @@ SymbolTable::addLeadAuxiliaryVarInternal(bool endo, int index) throw (FrozenExce
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SymbolTable::rmExo(set<int> &unused) throw (FrozenException)
|
||||||
|
{
|
||||||
|
if (frozen)
|
||||||
|
throw FrozenException();
|
||||||
|
|
||||||
|
list<int> idxs;
|
||||||
|
for (set<int>::const_iterator it = unused.begin(); it != unused.end(); it++)
|
||||||
|
idxs.push_back(getID(getName(*it)));
|
||||||
|
|
||||||
|
idxs.sort();
|
||||||
|
idxs.reverse();
|
||||||
|
vector<string> orig_name_table = name_table;
|
||||||
|
for (list<int>::const_iterator it = idxs.begin(); it != idxs.end(); it++)
|
||||||
|
{
|
||||||
|
type_table.erase(type_table.begin() + *it);
|
||||||
|
name_table.erase(name_table.begin() + *it);
|
||||||
|
tex_name_table.erase(tex_name_table.begin() + *it);
|
||||||
|
long_name_table.erase(long_name_table.begin() + *it);
|
||||||
|
}
|
||||||
|
|
||||||
|
symbol_table.clear();
|
||||||
|
size = 0;
|
||||||
|
for (vector<string>::const_iterator it=name_table.begin();
|
||||||
|
it != name_table.end(); it++)
|
||||||
|
symbol_table[*it] = size++;
|
||||||
|
assert(size == symbol_table.size());
|
||||||
|
|
||||||
|
set<int> orig_predetermined_variables = predetermined_variables;
|
||||||
|
predetermined_variables.clear();
|
||||||
|
for (set<int>::const_iterator it=orig_predetermined_variables.begin();
|
||||||
|
it != orig_predetermined_variables.end(); it++)
|
||||||
|
if (orig_name_table[*it] != getName(*it))
|
||||||
|
markPredetermined(getID(orig_name_table[*it]));
|
||||||
|
else
|
||||||
|
markPredetermined(*it);
|
||||||
|
|
||||||
|
vector<int> orig_varobs = varobs;
|
||||||
|
varobs.clear();
|
||||||
|
for (vector<int>::const_iterator it=orig_varobs.begin(); it != orig_varobs.end(); it++)
|
||||||
|
if (orig_name_table[*it] != getName(*it))
|
||||||
|
addObservedVariable(getID(orig_name_table[*it]));
|
||||||
|
else
|
||||||
|
addObservedVariable(*it);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lead_lag) throw (FrozenException)
|
SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_lead_lag) throw (FrozenException)
|
||||||
{
|
{
|
||||||
|
|
|
@ -310,6 +310,8 @@ public:
|
||||||
bool isAuxiliaryVariable(int symb_id) const;
|
bool isAuxiliaryVariable(int symb_id) const;
|
||||||
//! Get list of endogenous variables without aux vars
|
//! Get list of endogenous variables without aux vars
|
||||||
set <int> getOrigEndogenous() const;
|
set <int> getOrigEndogenous() const;
|
||||||
|
//! Remove exogenous variables contained in the set
|
||||||
|
void rmExo(set<int> &unused) throw (FrozenException);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
|
|
Loading…
Reference in New Issue