diff --git a/src/ExprNode.cc b/src/ExprNode.cc index a697f645513e7d0da0702512e8eab8e6c87e332f..d1ab86901c8286099dab7c8f0e993abfefedfedd 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -6600,10 +6600,17 @@ AbstractExternalFunctionNode::decreaseLeadsLagsPredeterminedVariables() const expr_t AbstractExternalFunctionNode::substituteEndoLeadGreaterThanTwo(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool deterministic_model) const { - vector<expr_t> arguments_subst; - for (auto argument : arguments) - arguments_subst.push_back(argument->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model)); - return buildSimilarExternalFunctionNode(arguments_subst, datatree); + if (maxEndoLead() < 2) + return const_cast<AbstractExternalFunctionNode *>(this); + else if (deterministic_model) + { + vector<expr_t> arguments_subst; + for (auto argument : arguments) + arguments_subst.push_back(argument->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model)); + return buildSimilarExternalFunctionNode(arguments_subst, datatree); + } + else + return createEndoLeadAuxiliaryVarForMyself(subst_table, neweqs); } expr_t @@ -6618,10 +6625,17 @@ AbstractExternalFunctionNode::substituteEndoLagGreaterThanTwo(subst_table_t &sub expr_t AbstractExternalFunctionNode::substituteExoLead(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool deterministic_model) const { - vector<expr_t> arguments_subst; - for (auto argument : arguments) - arguments_subst.push_back(argument->substituteExoLead(subst_table, neweqs, deterministic_model)); - return buildSimilarExternalFunctionNode(arguments_subst, datatree); + if (maxExoLead() == 0) + return const_cast<AbstractExternalFunctionNode *>(this); + else if (deterministic_model) + { + vector<expr_t> arguments_subst; + for (auto argument : arguments) + arguments_subst.push_back(argument->substituteExoLead(subst_table, neweqs, deterministic_model)); + return buildSimilarExternalFunctionNode(arguments_subst, datatree); + } + else + return createExoLeadAuxiliaryVarForMyself(subst_table, neweqs); } expr_t