diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 6f72885f28ae1c991ef7e7222b0b4c72e5866354..acac6b4e59fc1b88565b26cb7b60e54ae62a6ecf 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -7469,6 +7469,24 @@ AbstractExternalFunctionNode::substituteLogTransform(int orig_symb_id, int aux_s return buildSimilarExternalFunctionNode(arguments_subst, datatree); } +expr_t +AbstractExternalFunctionNode::toStatic(DataTree &static_datatree) const +{ + vector<expr_t> static_arguments; + for (auto argument : arguments) + static_arguments.push_back(argument->toStatic(static_datatree)); + return buildSimilarExternalFunctionNode(static_arguments, static_datatree); +} + +expr_t +AbstractExternalFunctionNode::clone(DataTree &datatree) const +{ + vector<expr_t> dynamic_arguments; + for (auto argument : arguments) + dynamic_arguments.push_back(argument->clone(datatree)); + return buildSimilarExternalFunctionNode(dynamic_arguments, datatree); +} + expr_t ExternalFunctionNode::composeDerivatives(const vector<expr_t> &dargs) { @@ -7724,15 +7742,6 @@ ExternalFunctionNode::writeJsonExternalFunctionOutput(vector<string> &efout, } } -expr_t -ExternalFunctionNode::toStatic(DataTree &static_datatree) const -{ - vector<expr_t> static_arguments; - for (auto argument : arguments) - static_arguments.push_back(argument->toStatic(static_datatree)); - return static_datatree.AddExternalFunction(symb_id, static_arguments); -} - void ExternalFunctionNode::computeXrefs(EquationInfo &ei) const { @@ -7741,15 +7750,6 @@ ExternalFunctionNode::computeXrefs(EquationInfo &ei) const argument->computeXrefs(ei); } -expr_t -ExternalFunctionNode::clone(DataTree &datatree) const -{ - vector<expr_t> dynamic_arguments; - for (auto argument : arguments) - dynamic_arguments.push_back(argument->clone(datatree)); - return datatree.AddExternalFunction(symb_id, dynamic_arguments); -} - expr_t ExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const { @@ -8070,32 +8070,12 @@ FirstDerivExternalFunctionNode::writeBytecodeExternalFunctionOutput(BytecodeWrit } } -expr_t -FirstDerivExternalFunctionNode::clone(DataTree &datatree) const -{ - vector<expr_t> dynamic_arguments; - for (auto argument : arguments) - dynamic_arguments.push_back(argument->clone(datatree)); - return datatree.AddFirstDerivExternalFunction(symb_id, dynamic_arguments, - inputIndex); -} - expr_t FirstDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const { return alt_datatree.AddFirstDerivExternalFunction(symb_id, alt_args, inputIndex); } -expr_t -FirstDerivExternalFunctionNode::toStatic(DataTree &static_datatree) const -{ - vector<expr_t> static_arguments; - for (auto argument : arguments) - static_arguments.push_back(argument->toStatic(static_datatree)); - return static_datatree.AddFirstDerivExternalFunction(symb_id, static_arguments, - inputIndex); -} - void FirstDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const { @@ -8364,32 +8344,12 @@ SecondDerivExternalFunctionNode::writeJsonExternalFunctionOutput(vector<string> efout.push_back(ef.str()); } -expr_t -SecondDerivExternalFunctionNode::clone(DataTree &datatree) const -{ - vector<expr_t> dynamic_arguments; - for (auto argument : arguments) - dynamic_arguments.push_back(argument->clone(datatree)); - return datatree.AddSecondDerivExternalFunction(symb_id, dynamic_arguments, - inputIndex1, inputIndex2); -} - expr_t SecondDerivExternalFunctionNode::buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const { return alt_datatree.AddSecondDerivExternalFunction(symb_id, alt_args, inputIndex1, inputIndex2); } -expr_t -SecondDerivExternalFunctionNode::toStatic(DataTree &static_datatree) const -{ - vector<expr_t> static_arguments; - for (auto argument : arguments) - static_arguments.push_back(argument->toStatic(static_datatree)); - return static_datatree.AddSecondDerivExternalFunction(symb_id, static_arguments, - inputIndex1, inputIndex2); -} - void SecondDerivExternalFunctionNode::computeXrefs(EquationInfo &ei) const { diff --git a/src/ExprNode.hh b/src/ExprNode.hh index 3d8543711936cf068e2e6a66de12bc1c1d1e18e2..b35fa742a2b20a3384e11b22ac4454ea33d70d51 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -1416,7 +1416,7 @@ public: void collectDynamicVariables(SymbolType type_arg, set<pair<int, int>> &result) const override; double eval(const eval_context_t &eval_context) const noexcept(false) override; void writeBytecodeOutput(BytecodeWriter &code_file, ExprNodeBytecodeOutputType 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 override = 0; - expr_t toStatic(DataTree &static_datatree) const override = 0; + expr_t toStatic(DataTree &static_datatree) const override; void computeXrefs(EquationInfo &ei) const override = 0; BinaryOpNode *normalizeEquationHelper(const set<expr_t> &contain_var, expr_t rhs) const override; int maxEndoLead() const override; @@ -1453,7 +1453,7 @@ public: 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; expr_t replaceTrendVar() const override; expr_t detrend(int symb_id, bool log_trend, expr_t trend) const override; - expr_t clone(DataTree &datatree) const override = 0; + expr_t clone(DataTree &datatree) const override; expr_t removeTrendLeadLag(const map<int, expr_t> &trend_symbols_map) const override; bool isInStaticForm() const override; expr_t replaceVarsInEquation(map<VariableNode *, NumConstNode *> &table) const override; @@ -1493,10 +1493,8 @@ public: const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const override; void writeBytecodeOutput(BytecodeWriter &code_file, ExprNodeBytecodeOutputType 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 override; - expr_t toStatic(DataTree &static_datatree) const override; void computeXrefs(EquationInfo &ei) const override; expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override; - expr_t clone(DataTree &datatree) const override; }; class FirstDerivExternalFunctionNode : public AbstractExternalFunctionNode @@ -1532,10 +1530,8 @@ public: const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const override; - expr_t toStatic(DataTree &static_datatree) const override; void computeXrefs(EquationInfo &ei) const override; expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override; - expr_t clone(DataTree &datatree) const override; }; class SecondDerivExternalFunctionNode : public AbstractExternalFunctionNode @@ -1573,10 +1569,8 @@ public: const temporary_terms_t &temporary_terms, const temporary_terms_idxs_t &temporary_terms_idxs, deriv_node_temp_terms_t &tef_terms) const override; - expr_t toStatic(DataTree &static_datatree) const override; void computeXrefs(EquationInfo &ei) const override; expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const override; - expr_t clone(DataTree &datatree) const override; }; /* Common superclass for nodes that have the following two characteristics: