diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 95cfaa9427f5524df0bd1a978505e258303bf44b..f43021d7f240baa5a4cda1e7f64431bc641cab66 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -5225,44 +5225,6 @@ DynamicModel::substituteDiff(StaticModel &static_model, ExprNode::subst_table_t cout << "Substitution of Diff operator: added " << neweqs.size() << " auxiliary variables and equations." << endl; } -void -DynamicModel::substituteDiffUnaryOps(StaticModel &static_model) -{ - // Find diff Nodes - set<UnaryOpNode *> nodes; - for (map<int, expr_t>::iterator it = local_variables_table.begin(); - it != local_variables_table.end(); it++) - it->second->findDiffUnaryOpNodes(static_model, nodes); - - for (int i = 0; i < (int) equations.size(); i++) - equations[i]->findDiffUnaryOpNodes(static_model, nodes); - - // Substitute in model local variables - ExprNode::subst_table_t subst_table; - vector<BinaryOpNode *> neweqs; - for (map<int, expr_t>::iterator it = local_variables_table.begin(); - it != local_variables_table.end(); it++) - it->second = it->second->substituteDiffUnaryOpNodes(static_model, nodes, subst_table, neweqs); - - // Substitute in equations - for (int i = 0; i < (int) equations.size(); i++) - { - BinaryOpNode *substeq = dynamic_cast<BinaryOpNode *>(equations[i]-> - substituteDiffUnaryOpNodes(static_model, nodes, subst_table, neweqs)); - assert(substeq != NULL); - equations[i] = substeq; - } - - // Add new equations - for (int i = 0; i < (int) neweqs.size(); i++) - addEquation(neweqs[i], -1); - - copy(neweqs.begin(), neweqs.end(), back_inserter(diff_aux_equations)); - - if (subst_table.size() > 0) - cout << "Substitution of Unary Ops in Diff operator: added " << neweqs.size() << " auxiliary variables and equations." << endl; -} - void DynamicModel::combineDiffAuxEquations() { diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh index beb31205d1043c44395eefea7bbfa4083c719284..ee9f981c80f6e928deefc84b4fb5e381e76f61e0 100644 --- a/src/DynamicModel.hh +++ b/src/DynamicModel.hh @@ -411,7 +411,6 @@ public: //! Substitutes diff operator void substituteDiff(StaticModel &static_model, ExprNode::subst_table_t &diff_subst_table); - void substituteDiffUnaryOps(StaticModel &static_model); //! Table to undiff LHS variables for pac vector z void getUndiffLHSForPac(vector<int> &lhs, vector<expr_t> &lhs_expr_t, vector<bool> &diff, vector<int> &orig_diff_var, diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 528ea6171b6e6fdd17591fdfc09c389cb8efa601..f6018f937b9efb76e313449943337ccba80a206e 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -538,23 +538,12 @@ NumConstNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) { } -void -NumConstNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ -} - expr_t NumConstNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const { return const_cast<NumConstNode *>(this); } -expr_t -NumConstNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - return const_cast<NumConstNode *>(this); -} - expr_t NumConstNode::substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table) { @@ -1424,11 +1413,6 @@ VariableNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) { } -void -VariableNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ -} - expr_t VariableNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const @@ -1436,12 +1420,6 @@ VariableNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table return const_cast<VariableNode *>(this); } -expr_t -VariableNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - return const_cast<VariableNode *>(this); -} - expr_t VariableNode::substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table) { @@ -3035,75 +3013,6 @@ UnaryOpNode::isDiffPresent() const return arg->isDiffPresent(); } -void -UnaryOpNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ - if (op_code != oDiff) - { - arg->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); - return; - } - - VariableNode *vn = dynamic_cast<VariableNode *>(arg); - if (vn != NULL) - return; - - UnaryOpNode *sarg = dynamic_cast<UnaryOpNode *>(arg->toStatic(static_datatree)); - if (sarg == NULL || (!sarg->createAuxVarForUnaryOpNodeInDiffOp() && sarg->get_op_code() != oDiff)) - { - cerr << "Error: diff operator can only contain certain unary operations" << endl; - exit(EXIT_FAILURE); - } - - if (unary_op_nodes_in_diff.find(sarg) != unary_op_nodes_in_diff.end()) - return; - - if (sarg->get_op_code() == oDiff) - { - arg->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); - return; - } - - vn = dynamic_cast<VariableNode *>(sarg->get_arg()); - if (vn == NULL) - { - cerr << "Error: A unary op inside of a diff can only take a variable as an argument" << endl; - exit(EXIT_FAILURE); - } - - unary_op_nodes_in_diff.insert(sarg); -} - -bool -UnaryOpNode::createAuxVarForUnaryOpNodeInDiffOp() const -{ - switch (op_code) - { - case oExp: - case oLog: - case oLog10: - case oCos: - case oSin: - case oTan: - case oAcos: - case oAsin: - case oAtan: - case oCosh: - case oSinh: - case oTanh: - case oAcosh: - case oAsinh: - case oAtanh: - case oSqrt: - case oAbs: - case oSign: - case oErf: - return true; - default: - return false; - } -} - void UnaryOpNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const { @@ -3288,43 +3197,6 @@ UnaryOpNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, return const_cast<VariableNode *>(subst_table[this]); } -expr_t -UnaryOpNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - UnaryOpNode *sarg, *argtouse; - if (op_code == oDiff) - { - sarg = dynamic_cast<UnaryOpNode *>(arg->toStatic(static_datatree)); - argtouse = dynamic_cast<UnaryOpNode *>(arg); - } - else - { - sarg = dynamic_cast<UnaryOpNode *>(this->toStatic(static_datatree)); - argtouse = const_cast<UnaryOpNode *>(this); - } - - if (sarg == NULL || nodes.find(sarg) == nodes.end()) - { - expr_t argsubst = arg->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - return buildSimilarUnaryOpNode(argsubst, datatree); - } - - subst_table_t::const_iterator sit = subst_table.find(argtouse); - if (sit != subst_table.end()) - return const_cast<VariableNode *>(sit->second); - - VariableNode *vn = dynamic_cast<VariableNode *>(dynamic_cast<UnaryOpNode *>(argtouse)->get_arg()); - int lag = vn->get_lag(); - int symb_id = datatree.symbol_table.addUnaryOpInsideDiffAuxiliaryVar(argtouse->idx, argtouse, - vn->get_symb_id(), lag); - VariableNode *aux_var = datatree.AddVariable(symb_id, 0); - neweqs.push_back(dynamic_cast<BinaryOpNode *>(datatree.AddEqual(aux_var, argtouse))); - subst_table[argtouse] = dynamic_cast<VariableNode *>(aux_var); - if (op_code == oDiff) - return buildSimilarUnaryOpNode(aux_var, datatree); - return const_cast<VariableNode *>(aux_var); -} - expr_t UnaryOpNode::substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table) { @@ -4993,13 +4865,6 @@ BinaryOpNode::substituteAdl() const return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree); } -void -BinaryOpNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ - arg1->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); - arg2->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); -} - void BinaryOpNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const { @@ -5016,14 +4881,6 @@ BinaryOpNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree); } -expr_t -BinaryOpNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - expr_t arg1subst = arg1->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - expr_t arg2subst = arg2->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - return buildSimilarBinaryOpNode(arg1subst, arg2subst, datatree); -} - bool BinaryOpNode::isDiffPresent() const { @@ -5909,14 +5766,6 @@ TrinaryOpNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table arg3->findDiffNodes(static_datatree, diff_table); } -void -TrinaryOpNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ - arg1->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); - arg2->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); - arg3->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); -} - expr_t TrinaryOpNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const @@ -5927,15 +5776,6 @@ TrinaryOpNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_tabl return buildSimilarTrinaryOpNode(arg1subst, arg2subst, arg3subst, datatree); } -expr_t -TrinaryOpNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - expr_t arg1subst = arg1->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - expr_t arg2subst = arg2->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - expr_t arg3subst = arg3->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs); - return buildSimilarTrinaryOpNode(arg1subst, arg2subst, arg3subst, datatree); -} - bool TrinaryOpNode::isDiffPresent() const { @@ -6349,13 +6189,6 @@ AbstractExternalFunctionNode::findDiffNodes(DataTree &static_datatree, diff_tabl (*it)->findDiffNodes(static_datatree, diff_table); } -void -AbstractExternalFunctionNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ - for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++) - (*it)->findDiffUnaryOpNodes(static_datatree, unary_op_nodes_in_diff); -} - expr_t AbstractExternalFunctionNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const @@ -6366,15 +6199,6 @@ AbstractExternalFunctionNode::substituteDiff(DataTree &static_datatree, diff_tab return buildSimilarExternalFunctionNode(arguments_subst, datatree); } -expr_t -AbstractExternalFunctionNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - vector<expr_t> arguments_subst; - for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++) - arguments_subst.push_back((*it)->substituteDiffUnaryOpNodes(static_datatree, nodes, subst_table, neweqs)); - return buildSimilarExternalFunctionNode(arguments_subst, datatree); -} - bool AbstractExternalFunctionNode::isDiffPresent() const { @@ -7928,11 +7752,6 @@ VarExpectationNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_ { } -void -VarExpectationNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ -} - expr_t VarExpectationNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const @@ -7940,12 +7759,6 @@ VarExpectationNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff return const_cast<VarExpectationNode *>(this); } -expr_t -VarExpectationNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - return const_cast<VarExpectationNode *>(this); -} - expr_t VarExpectationNode::substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table) { @@ -8373,11 +8186,6 @@ PacExpectationNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_ { } -void -PacExpectationNode::findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const -{ -} - expr_t PacExpectationNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const @@ -8385,12 +8193,6 @@ PacExpectationNode::substituteDiff(DataTree &static_datatree, diff_table_t &diff return const_cast<PacExpectationNode *>(this); } -expr_t -PacExpectationNode::substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const -{ - return const_cast<PacExpectationNode *>(this); -} - expr_t PacExpectationNode::differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const { diff --git a/src/ExprNode.hh b/src/ExprNode.hh index f28a6b1f411c6dc64e7191323a26320237f4a67a..f1c1772f7e0b5092e861f32280d2def8695ca85e 100644 --- a/src/ExprNode.hh +++ b/src/ExprNode.hh @@ -492,9 +492,7 @@ class ExprNode //! Substitute diff operator virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const = 0; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const = 0; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const = 0; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const = 0; //! Substitute pac_expectation operator virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table) = 0; @@ -586,9 +584,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; @@ -676,9 +672,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; @@ -788,11 +782,8 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - bool createAuxVarForUnaryOpNodeInDiffOp() const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; void getDiffArgUnaryOperatorIfAny(string &op_handle) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; @@ -919,9 +910,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; @@ -1024,9 +1013,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; virtual expr_t differentiateForwardVars(const vector<string> &subset, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; @@ -1129,9 +1116,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual expr_t buildSimilarExternalFunctionNode(vector<expr_t> &alt_args, DataTree &alt_datatree) const = 0; virtual expr_t decreaseLeadsLagsPredeterminedVariables() const; @@ -1324,9 +1309,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const; virtual void compile(ostream &CompileCode, unsigned int &instruction_number, @@ -1409,9 +1392,7 @@ public: virtual expr_t substituteExpectation(subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs, bool partial_information_model) const; virtual expr_t substituteAdl() const; virtual void findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table) const; - virtual void findDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &unary_op_nodes_in_diff) const; virtual expr_t substituteDiff(DataTree &static_datatree, diff_table_t &diff_table, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; - virtual expr_t substituteDiffUnaryOpNodes(DataTree &static_datatree, set<UnaryOpNode *> &nodes, subst_table_t &subst_table, vector<BinaryOpNode *> &neweqs) const; virtual expr_t substitutePacExpectation(map<const PacExpectationNode *, const BinaryOpNode *> &subst_table); virtual pair<int, expr_t> normalizeEquation(int symb_id_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const; virtual void compile(ostream &CompileCode, unsigned int &instruction_number, diff --git a/src/ModFile.cc b/src/ModFile.cc index 5b49c3b3aac37b90438812711ff57ccd6e8cfd44..0ad90e612ee85a95426ea9c64c9690584d842bfd 100644 --- a/src/ModFile.cc +++ b/src/ModFile.cc @@ -368,7 +368,6 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const // Create auxiliary variable and equations for Diff operator ExprNode::subst_table_t diff_subst_table; - dynamic_model.substituteDiffUnaryOps(diff_static_model); dynamic_model.substituteDiff(diff_static_model, diff_subst_table); // Var Model diff --git a/src/SymbolTable.cc b/src/SymbolTable.cc index a7e8b64ebde64f33aa80961268fa3cbf27f07036..2ec4060a3096c38e5474b0e77f838d468452afc1 100644 --- a/src/SymbolTable.cc +++ b/src/SymbolTable.cc @@ -391,7 +391,6 @@ SymbolTable::writeOutput(ostream &output) const throw (NotYetFrozenException) break; case avDiff: case avDiffLag: - case avUnaryOpInsideDiff: if (aux_vars[i].get_orig_symb_id() >= 0) output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl << "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl; @@ -512,7 +511,6 @@ SymbolTable::writeCOutput(ostream &output) const throw (NotYetFrozenException) break; case avDiff: case avDiffLag: - case avUnaryOpInsideDiff: if (aux_vars[i].get_orig_symb_id() >= 0) output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl << "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl; @@ -612,7 +610,6 @@ SymbolTable::writeCCOutput(ostream &output) const throw (NotYetFrozenException) break; case avDiff: case avDiffLag: - case avUnaryOpInsideDiff: if (aux_vars[i].get_orig_symb_id() >= 0) output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl << "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl; @@ -808,28 +805,6 @@ SymbolTable::addDiffAuxiliaryVar(int index, expr_t expr_arg) throw (FrozenExcept return addDiffAuxiliaryVar(index, expr_arg, -1, 0); } -int -SymbolTable::addUnaryOpInsideDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag) throw (FrozenException) -{ - ostringstream varname; - int symb_id; - - varname << "AUX_UOP_IN_DIFF_" << index; - try - { - symb_id = addSymbol(varname.str(), eEndogenous); - } - catch (AlreadyDeclaredException &e) - { - cerr << "ERROR: you should rename your variable called " << varname.str() << ", this name is internally used by Dynare" << endl; - exit(EXIT_FAILURE); - } - - aux_vars.push_back(AuxVarInfo(symb_id, avUnaryOpInsideDiff, orig_symb_id, orig_lag, 0, 0, expr_arg)); - - return symb_id; -} - int SymbolTable::addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag, expr_t expr_arg) throw (AlreadyDeclaredException, FrozenException) { @@ -1163,7 +1138,6 @@ SymbolTable::writeJuliaOutput(ostream &output) const throw (NotYetFrozenExceptio break; case avDiff: case avDiffLag: - case avUnaryOpInsideDiff: if (aux_vars[i].get_orig_symb_id() >= 0) output << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) + 1 << ", " << aux_vars[i].get_orig_lead_lag() << ", NaN, NaN," << aux_vars[i].get_unary_op_handle(); diff --git a/src/SymbolTable.hh b/src/SymbolTable.hh index b1f41c1fea0389df8924e7704eb6326cf12e9ecf..58dee978321161bfe82f8ec728908f29fd250621 100644 --- a/src/SymbolTable.hh +++ b/src/SymbolTable.hh @@ -36,17 +36,16 @@ typedef class ExprNode *expr_t; //! Types of auxiliary variables enum aux_var_t { - avEndoLead = 0, //!< Substitute for endo leads >= 2 - avEndoLag = 1, //!< Substitute for endo lags >= 2 - avExoLead = 2, //!< Substitute for exo leads >= 1 - avExoLag = 3, //!< Substitute for exo lags >= 1 - avExpectation = 4, //!< Substitute for Expectation Operator - avDiffForward = 5, //!< Substitute for the differentiate of a forward variable - avMultiplier = 6, //!< Multipliers for FOC of Ramsey Problem - avVarModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model - avDiff = 8, //!< Variable for Diff operator - avDiffLag = 9, //!< Variable for timing between Diff operators - avUnaryOpInsideDiff = 10 //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x)) + avEndoLead = 0, //!< Substitute for endo leads >= 2 + avEndoLag = 1, //!< Substitute for endo lags >= 2 + avExoLead = 2, //!< Substitute for exo leads >= 1 + avExoLag = 3, //!< Substitute for exo lags >= 1 + avExpectation = 4, //!< Substitute for Expectation Operator + avDiffForward = 5, //!< Substitute for the differentiate of a forward variable + avMultiplier = 6, //!< Multipliers for FOC of Ramsey Problem + avVarModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model + avDiff = 8, //!< Variable for Diff operator + avDiffLag = 9 //!< Variable for timing between Diff operators }; //! Information on some auxiliary variables @@ -301,8 +300,6 @@ public: int addDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag, string &unary_op_handle) throw (FrozenException); //! Takes care of timing between diff statements int addDiffLagAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag) throw (FrozenException); - //! An Auxiliary variable for a unary op that was substituted because it was inside a diff node - int addUnaryOpInsideDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, int orig_lag) throw (FrozenException); //! Returns the number of auxiliary variables int AuxVarsSize() const