From dec60b25e6fb0677950973f8f5f672786bd6d041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 27 Sep 2023 14:49:06 +0200 Subject: [PATCH] Do not write bytecode for discretionary optimal policy models Those models do not have as many variables as equations, and this case is not supported by bytecode. The present commit is an improvement over commit a8ea57dd634350d7304d2eb8e66042d418ec5c8f, which had already removed bytecode for the planner objective model. --- src/DynamicModel.cc | 5 ++++- src/ModelEquationBlock.cc | 6 ------ src/ModelEquationBlock.hh | 1 - src/StaticModel.cc | 6 +++++- src/StaticModel.hh | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 32e5f328..e1401abf 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -2453,7 +2453,10 @@ DynamicModel::writeDynamicFile(const string &basename, bool use_dll, const strin writeDynamicMFile(basename); // The legacy representation is no longer produced for Julia - writeDynamicBytecode(basename); + /* Discretionary optimal policy models don’t have as many variables as + equations; bytecode does not support that case */ + if (static_cast<int>(equations.size()) == symbol_table.endo_nbr()) + writeDynamicBytecode(basename); if (block_decomposed) writeDynamicBlockBytecode(basename); diff --git a/src/ModelEquationBlock.cc b/src/ModelEquationBlock.cc index 12084797..d2a0c1d8 100644 --- a/src/ModelEquationBlock.cc +++ b/src/ModelEquationBlock.cc @@ -37,12 +37,6 @@ PlannerObjective::computingPassBlock([[maybe_unused]] const eval_context_t &eval // Disable block decomposition on planner objective } -void -PlannerObjective::writeStaticBytecode([[maybe_unused]] const string &basename) const -{ - // Disable bytecode output, because there are not as many variables as equations -} - OrigRamseyDynamicModel::OrigRamseyDynamicModel(SymbolTable &symbol_table_arg, NumericalConstants &num_constants_arg, ExternalFunctionsTable &external_functions_table_arg, diff --git a/src/ModelEquationBlock.hh b/src/ModelEquationBlock.hh index 9f8536d4..8efe6aaf 100644 --- a/src/ModelEquationBlock.hh +++ b/src/ModelEquationBlock.hh @@ -41,7 +41,6 @@ protected: private: void computingPassBlock(const eval_context_t &eval_context, bool no_tmp_terms) override; - void writeStaticBytecode(const string &basename) const override; }; class OrigRamseyDynamicModel : public DynamicModel diff --git a/src/StaticModel.cc b/src/StaticModel.cc index 6760a492..35076bb0 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -475,7 +475,11 @@ StaticModel::writeStaticFile(const string &basename, bool use_dll, const string writeStaticMFile(basename); // The legacy representation is no longer produced for Julia - writeStaticBytecode(basename); + /* PlannerObjective subclass or discretionary optimal policy models don’t + have as many variables as equations; bytecode does not support that + case */ + if (static_cast<int>(equations.size()) == symbol_table.endo_nbr()) + writeStaticBytecode(basename); if (block_decomposed) writeStaticBlockBytecode(basename); diff --git a/src/StaticModel.hh b/src/StaticModel.hh index 8df4d084..5e98f28f 100644 --- a/src/StaticModel.hh +++ b/src/StaticModel.hh @@ -60,7 +60,7 @@ private: void writeStaticBlockBytecode(const string &basename) const; //! Writes the code of the model in virtual machine bytecode - virtual void writeStaticBytecode(const string &basename) const; + void writeStaticBytecode(const string &basename) const; //! Computes jacobian and prepares for equation normalization /*! Using values from initval/endval blocks and parameter initializations: -- GitLab