diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 0aaafdbc1b03fc1b417e8312330c103b1816b8f8..dff1abb6872940be30866c21074dd7b520efdfc4 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -691,12 +691,6 @@ NumConstNode::containsPacExpectation(const string &pac_model_name) const return false; } -bool -NumConstNode::containsExogenous() const -{ - return false; -} - expr_t NumConstNode::replaceTrendVar() const { @@ -1860,15 +1854,6 @@ VariableNode::containsPacExpectation(const string &pac_model_name) const return false; } -bool -VariableNode::containsExogenous() const -{ - if (get_type() == SymbolType::modelLocalVariable) - return datatree.getLocalVariable(symb_id)->containsExogenous(); - - return get_type() == SymbolType::exogenous || get_type() == SymbolType::exogenousDet; -} - expr_t VariableNode::replaceTrendVar() const { @@ -3718,12 +3703,6 @@ UnaryOpNode::containsPacExpectation(const string &pac_model_name) const return arg->containsPacExpectation(pac_model_name); } -bool -UnaryOpNode::containsExogenous() const -{ - return arg->containsExogenous(); -} - expr_t UnaryOpNode::replaceTrendVar() const { @@ -5186,12 +5165,6 @@ BinaryOpNode::containsPacExpectation(const string &pac_model_name) const return arg1->containsPacExpectation(pac_model_name) || arg2->containsPacExpectation(pac_model_name); } -bool -BinaryOpNode::containsExogenous() const -{ - return arg1->containsExogenous() || arg2->containsExogenous(); -} - expr_t BinaryOpNode::replaceTrendVar() const { @@ -6419,12 +6392,6 @@ TrinaryOpNode::containsPacExpectation(const string &pac_model_name) const return (arg1->containsPacExpectation(pac_model_name) || arg2->containsPacExpectation(pac_model_name) || arg3->containsPacExpectation(pac_model_name)); } -bool -TrinaryOpNode::containsExogenous() const -{ - return (arg1->containsExogenous() || arg2->containsExogenous() || arg3->containsExogenous()); -} - expr_t TrinaryOpNode::replaceTrendVar() const { @@ -6917,15 +6884,6 @@ AbstractExternalFunctionNode::containsPacExpectation(const string &pac_model_nam return false; } -bool -AbstractExternalFunctionNode::containsExogenous() const -{ - for (auto argument : arguments) - if (argument->containsExogenous()) - return true; - return false; -} - expr_t AbstractExternalFunctionNode::replaceTrendVar() const { @@ -8390,13 +8348,6 @@ VarExpectationNode::containsPacExpectation(const string &pac_model_name) const return false; } -bool -VarExpectationNode::containsExogenous() const -{ - cerr << "VarExpectationNode::containsExogenous not implemented." << endl; - exit(EXIT_FAILURE); -} - bool VarExpectationNode::isNumConstNodeEqualTo(double value) const { @@ -8779,12 +8730,6 @@ PacExpectationNode::containsPacExpectation(const string &pac_model_name) const return pac_model_name == model_name; } -bool -PacExpectationNode::containsExogenous() const -{ - return false; -} - bool PacExpectationNode::isNumConstNodeEqualTo(double value) const { diff --git a/src/ExprNode.hh b/src/ExprNode.hh index e13b7f0e7dba7815ce995e1afc4c6a58c49131d3..e7b1f910ec061928477d3f812f7f7de60d80a853 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -567,9 +567,6 @@ public: */ virtual bool isNumConstNodeEqualTo(double value) const = 0; - //! Returns true if the expression contains one or several exogenous variable - virtual bool containsExogenous() const = 0; - //! Returns the maximum number of nested diffs in the expression virtual int countDiffs() const = 0; @@ -779,7 +776,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; expr_t replaceTrendVar() const override; @@ -853,7 +849,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; expr_t replaceTrendVar() const override; @@ -958,7 +953,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; expr_t replaceTrendVar() const override; @@ -1067,7 +1061,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; expr_t replaceTrendVar() const override; @@ -1198,7 +1191,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; expr_t replaceTrendVar() const override; @@ -1310,7 +1302,6 @@ public: expr_t decreaseLeadsLagsPredeterminedVariables() const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; bool isNumConstNodeEqualTo(double value) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isVariableNodeEqualTo(SymbolType type_arg, int variable_id, int lag_arg) const override; void writePrhs(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, const deriv_node_temp_terms_t &tef_terms) const; @@ -1492,7 +1483,6 @@ public: const deriv_node_temp_terms_t &tef_terms) const override; void collectVARLHSVariable(set<expr_t> &result) const override; void collectDynamicVariables(SymbolType type_arg, set<pair<int, int>> &result) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isNumConstNodeEqualTo(double value) const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; @@ -1566,7 +1556,6 @@ public: const deriv_node_temp_terms_t &tef_terms) const override; void collectVARLHSVariable(set<expr_t> &result) const override; void collectDynamicVariables(SymbolType type_arg, set<pair<int, int>> &result) const override; - bool containsExogenous() const override; int countDiffs() const override; bool isNumConstNodeEqualTo(double value) const override; expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const override; diff --git a/src/StaticModel.cc b/src/StaticModel.cc index 69a93ec9b27a0952dac284a0d3b8ae5bccd87565..68e6e4182bcff63aefbc75a454326d55ccd20996 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -1830,8 +1830,13 @@ bool StaticModel::exoPresentInEqs() const { for (auto equation : equations) - if (equation->containsExogenous()) - return true; + { + set<int> result; + equation->collectVariables(SymbolType::exogenous, result); + equation->collectVariables(SymbolType::exogenousDet, result); + if (!result.empty()) + return true; + } return false; }