From 41a1c5ad1538854a81653166e44a3ff0f293c48a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Fri, 7 Jun 2024 17:30:19 +0200 Subject: [PATCH] Remove DataTree::isDynamic() Rather use the data member which already exists. --- src/DataTree.hh | 12 +++--------- src/DynamicModel.hh | 7 ------- src/ExprNode.cc | 16 ++++++++-------- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/src/DataTree.hh b/src/DataTree.hh index 3a02b7eb..4cdd06fe 100644 --- a/src/DataTree.hh +++ b/src/DataTree.hh @@ -49,6 +49,8 @@ public: //! A reference to the external functions table ExternalFunctionsTable& external_functions_table; //! Is it possible to use leads/lags on variable nodes? + /* NB: This data member cannot be replaced by a virtual method, because this information is needed + in AddVariable(), which itself can be called from the copy constructor. */ const bool is_dynamic; private: @@ -137,7 +139,7 @@ private: public: DataTree(SymbolTable& symbol_table_arg, NumericalConstants& num_constants_arg, - ExternalFunctionsTable& external_functions_table_arg, bool is_static_args = false); + ExternalFunctionsTable& external_functions_table_arg, bool is_dynamic_arg = false); virtual ~DataTree() = default; @@ -345,14 +347,6 @@ public: //! Adds to the set all the deriv IDs corresponding to parameters virtual void addAllParamDerivId(set<int>& deriv_id_set); - //! Returns bool indicating whether DataTree represents a Dynamic Model (returns true in - //! DynamicModel.hh) - [[nodiscard]] virtual bool - isDynamic() const - { - return false; - }; - struct UnknownLocalVariableException { //! Symbol ID diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index 01d04eca..699e3001 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -539,13 +539,6 @@ public: void addAllParamDerivId(set<int>& deriv_id_set) override; - //! Returns true indicating that this is a dynamic model - bool - isDynamic() const override - { - return true; - }; - //! Drive test of detrended equations void runTrendTest(const eval_context_t& eval_context); diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 13557d0a..9e83dbc7 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -899,7 +899,7 @@ VariableNode::prepareForDerivation() case SymbolType::trend: case SymbolType::logTrend: // In static models, exogenous and trends do not have deriv IDs - if (!datatree.isDynamic()) + if (!datatree.is_dynamic) break; [[fallthrough]]; case SymbolType::endogenous: @@ -990,7 +990,7 @@ VariableNode::computeDerivative(int deriv_id) case SymbolType::trend: case SymbolType::logTrend: // In static models, exogenous and trends do not have deriv IDs - if (!datatree.isDynamic()) + if (!datatree.is_dynamic) return datatree.Zero; [[fallthrough]]; case SymbolType::endogenous: @@ -1525,7 +1525,7 @@ VariableNode::computeChainRuleDerivative( case SymbolType::trend: case SymbolType::logTrend: // In static models, exogenous and trends do not have deriv IDs - if (!datatree.isDynamic()) + if (!datatree.is_dynamic) return datatree.Zero; [[fallthrough]]; case SymbolType::endogenous: @@ -2263,7 +2263,7 @@ UnaryOpNode::prepareForDerivation() all the parameters) */ if ((op_code == UnaryOpcode::steadyState || op_code == UnaryOpcode::steadyStateParamDeriv || op_code == UnaryOpcode::steadyStateParam2ndDeriv) - && datatree.isDynamic()) + && datatree.is_dynamic) datatree.addAllParamDerivId(non_null_derivatives); else { @@ -2286,7 +2286,7 @@ UnaryOpNode::prepareForChainRuleDerivation( set<int>& nnd {non_null_chain_rule_derivatives[const_cast<UnaryOpNode*>(this)]}; if ((op_code == UnaryOpcode::steadyState || op_code == UnaryOpcode::steadyStateParamDeriv || op_code == UnaryOpcode::steadyStateParam2ndDeriv) - && datatree.isDynamic()) + && datatree.is_dynamic) datatree.addAllParamDerivId(nnd); else { @@ -2368,7 +2368,7 @@ UnaryOpNode::composeDerivatives(expr_t darg, int deriv_id) case UnaryOpcode::sign: return datatree.Zero; case UnaryOpcode::steadyState: - if (datatree.isDynamic()) + if (datatree.is_dynamic) { if (datatree.getTypeByDerivID(deriv_id) == SymbolType::parameter) { @@ -2393,7 +2393,7 @@ UnaryOpNode::composeDerivatives(expr_t darg, int deriv_id) else return darg; case UnaryOpcode::steadyStateParamDeriv: - assert(datatree.isDynamic()); + assert(datatree.is_dynamic); if (datatree.getTypeByDerivID(deriv_id) == SymbolType::parameter) { auto varg = dynamic_cast<VariableNode*>(arg); @@ -2405,7 +2405,7 @@ UnaryOpNode::composeDerivatives(expr_t darg, int deriv_id) else return datatree.Zero; case UnaryOpcode::steadyStateParam2ndDeriv: - assert(datatree.isDynamic()); + assert(datatree.is_dynamic); if (datatree.getTypeByDerivID(deriv_id) == SymbolType::parameter) { cerr << "3rd derivative of STEADY_STATE node w.r.t. three parameters not implemented" -- GitLab