diff --git a/DynamicModel.cc b/DynamicModel.cc index da88f079f2d03d59272665efe24cad40d91a2a65..7034ff63cda1b35ea303f91eb27a6688ad959687 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -1566,9 +1566,26 @@ DynamicModel::writeDynamicMFile(const string &dynamic_basename) const void DynamicModel::writeVarExpectationCalls(ostream &output) const { - map<string, int> alreadyWritten; - for (size_t i = 0; i < equations.size(); i++) - equations[i]->writeVarExpectationCalls(output, alreadyWritten); + map<string, set<int> > var_expectation_functions_to_write; + for (var_expectation_node_map_t::const_iterator it = var_expectation_node_map.begin(); + it != var_expectation_node_map.end(); it++) + var_expectation_functions_to_write[it->first.first].insert(it->first.second.second); + + for (map<string, set<int> >::const_iterator it = var_expectation_functions_to_write.begin(); + it != var_expectation_functions_to_write.end(); it++) + { + int i = 0; + stringstream ss; + for (set<int>::const_iterator it1 = it->second.begin(); it1 != it->second.end(); it1++) + ss << *it1 << " "; + + output << "dynamic_var_forecast_" << it->first << " = " + << "var_forecast_" << it->first << "(y, [" << ss.rdbuf() << "]);" << endl; + + for (set<int>::const_iterator it1 = it->second.begin(); it1 != it->second.end(); it1++) + output << "dynamic_var_forecast_" << it->first << "_" << *it1 << " = " + << "dynamic_var_forecast_" << it->first << "(" << ++i << ", :);" << endl; + } } void diff --git a/ExprNode.cc b/ExprNode.cc index ef1df3e3f3a190c93b026088097dcf092ef66c62..c727124a09132a74463ac342c23b184f757ad555 100644 --- a/ExprNode.cc +++ b/ExprNode.cc @@ -513,11 +513,6 @@ NumConstNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) { } -void -NumConstNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ -} - expr_t NumConstNode::substituteStaticAuxiliaryVariable() const { @@ -1517,11 +1512,6 @@ VariableNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) { } -void -VariableNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ -} - UnaryOpNode::UnaryOpNode(DataTree &datatree_arg, UnaryOpcode op_code_arg, const expr_t arg_arg, int expectation_information_set_arg, int param1_symb_id_arg, int param2_symb_id_arg) : ExprNode(datatree_arg), arg(arg_arg), @@ -2600,12 +2590,6 @@ UnaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) arg->setVarExpectationIndex(var_model_info); } -void -UnaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ - arg->writeVarExpectationCalls(output, alreadyWritten); -} - expr_t UnaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -3916,13 +3900,6 @@ BinaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) arg2->setVarExpectationIndex(var_model_info); } -void -BinaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ - arg1->writeVarExpectationCalls(output, alreadyWritten); - arg2->writeVarExpectationCalls(output, alreadyWritten); -} - expr_t BinaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -4603,14 +4580,6 @@ TrinaryOpNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) arg3->setVarExpectationIndex(var_model_info); } -void -TrinaryOpNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ - arg1->writeVarExpectationCalls(output, alreadyWritten); - arg2->writeVarExpectationCalls(output, alreadyWritten); - arg3->writeVarExpectationCalls(output, alreadyWritten); -} - expr_t TrinaryOpNode::substituteStaticAuxiliaryVariable() const { @@ -4925,13 +4894,6 @@ AbstractExternalFunctionNode::setVarExpectationIndex(map<string, SymbolList> var (*it)->setVarExpectationIndex(var_model_info); } -void -AbstractExternalFunctionNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ - for (vector<expr_t>::const_iterator it = arguments.begin(); it != arguments.end(); it++) - (*it)->writeVarExpectationCalls(output, alreadyWritten); -} - pair<int, expr_t> AbstractExternalFunctionNode::normalizeEquation(int var_endo, vector<pair<int, pair<expr_t, expr_t> > > &List_of_Op_RHS) const { @@ -5928,18 +5890,6 @@ VarExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, output << "dynamic_var_forecast_" << model_name << "_" << forecast_horizon << "(" << yidx + 1 << ")"; } -void -VarExpectationNode::writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const -{ - map<string, int>::iterator it = alreadyWritten.find(model_name); - if (it != alreadyWritten.end() && alreadyWritten[model_name] == forecast_horizon) - return; - - output << "dynamic_var_forecast_" << model_name << "_" << forecast_horizon << " = " - << "var_forecast_" << model_name << "(y, " << forecast_horizon << ");" << endl; - alreadyWritten[model_name] = forecast_horizon; -} - int VarExpectationNode::maxEndoLead() const { @@ -6139,7 +6089,7 @@ void VarExpectationNode::setVarExpectationIndex(map<string, SymbolList> var_model_info) { vector<string> vs = var_model_info[model_name].get_symbols();; - yidx= find(vs.begin(), vs.end(), datatree.symbol_table.getName(symb_id)) - vs.begin(); + yidx = find(vs.begin(), vs.end(), datatree.symbol_table.getName(symb_id)) - vs.begin(); } expr_t diff --git a/ExprNode.hh b/ExprNode.hh index 7ba9031062ff18cc9a76d06c86e4512e38cd7b50..6e57a3c7e400366937164533f4dd220cd3523259 100644 --- a/ExprNode.hh +++ b/ExprNode.hh @@ -454,9 +454,6 @@ public: // Add index information for var_model variables virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info) = 0; - - // Write calls to var forecast and place in temporary variable - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const = 0; }; //! Object used to compare two nodes (using their indexes) @@ -518,7 +515,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; virtual expr_t substituteStaticAuxiliaryVariable() const; }; @@ -586,7 +582,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const; }; @@ -674,7 +669,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const; }; @@ -781,7 +775,6 @@ public: expr_t getNonZeroPartofEquation() const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const; //! Substitute auxiliary variables by their expression in static model auxiliary variable definition @@ -858,7 +851,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const; }; @@ -942,7 +934,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; //! Substitute auxiliary variables by their expression in static model virtual expr_t substituteStaticAuxiliaryVariable() const; }; @@ -1110,7 +1101,6 @@ public: virtual expr_t removeTrendLeadLag(map<int, expr_t> trend_symbols_map) const; virtual bool isInStaticForm() const; virtual void setVarExpectationIndex(map<string, SymbolList> var_model_info); - virtual void writeVarExpectationCalls(ostream &output, map<string, int> &alreadyWritten) const; virtual expr_t substituteStaticAuxiliaryVariable() const; };