ExprNode: simplification of external function nodes clone() and toStatic() methods
parent
bff80c0eaf
commit
2f111f5055
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue