From 832c9d37ef21bb2ee995752cc79e07c1289b3710 Mon Sep 17 00:00:00 2001 From: Ferhat Mihoubi Date: Fri, 22 Mar 2013 16:34:50 +0100 Subject: [PATCH] - adds new files: Evaluate.cc and Evaluate.hh to bytecode --- DynamicModel.cc | 13 ++++++++++ DynamicModel.hh | 1 + ExprNode.cc | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ ExprNode.hh | 9 +++++++ ModFile.cc | 5 ++-- ModelTree.cc | 23 +++++++++++------- 6 files changed, 105 insertions(+), 10 deletions(-) diff --git a/DynamicModel.cc b/DynamicModel.cc index fffe1d63..6b5f2433 100644 --- a/DynamicModel.cc +++ b/DynamicModel.cc @@ -3715,6 +3715,19 @@ DynamicModel::testTrendDerivativesEqualToZero(const eval_context_t &eval_context } } +void +DynamicModel::print_trend_vars() +{ + for (trend_symbols_map_t::const_iterator it = nonstationary_symbols_map.begin(); + it != nonstationary_symbols_map.end(); it++) + { + cout << "it->first:" << symbol_table.getName(it->first) << " "; + it->second->print_deflator(); + cout << endl; + } + +} + void DynamicModel::writeParamsDerivativesFile(const string &basename) const { diff --git a/DynamicModel.hh b/DynamicModel.hh index 8bfde507..eeb8f59b 100644 --- a/DynamicModel.hh +++ b/DynamicModel.hh @@ -230,6 +230,7 @@ public: virtual int getDerivID(int symb_id, int lag) const throw (UnknownDerivIDException); virtual int getDynJacobianCol(int deriv_id) const throw (UnknownDerivIDException); virtual void addAllParamDerivId(set &deriv_id_set); + void print_trend_vars(); //! Returns true indicating that this is a dynamic model virtual bool diff --git a/ExprNode.cc b/ExprNode.cc index 19f79bda..494507d9 100644 --- a/ExprNode.cc +++ b/ExprNode.cc @@ -175,6 +175,64 @@ ExprNode::writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output // Nothing to do } +void +ExprNode::print_deflator() +{ + +} + + +void +VariableNode::print_deflator() +{ + cout << datatree.symbol_table.getName(symb_id); +} + + +void +UnaryOpNode::print_deflator() +{ + arg->print_deflator(); +} + +void +BinaryOpNode::print_deflator() +{ + arg1->print_deflator(); + arg2->print_deflator(); +} + + +void +TrinaryOpNode::print_deflator() +{ + arg1->print_deflator(); + arg2->print_deflator(); + arg3->print_deflator(); +} + + +void +ExternalFunctionNode::print_deflator() +{ + +} + + +void +FirstDerivExternalFunctionNode::print_deflator() +{ + +} + + +void +SecondDerivExternalFunctionNode::print_deflator() +{ + +} + + void ExprNode::compileExternalFunctionOutput(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, @@ -297,6 +355,12 @@ NumConstNode::collectTemporary_terms(const temporary_terms_t &temporary_terms, t temporary_terms_inuse.insert(idx); } +void +NumConstNode::print_deflator() +{ + +} + void NumConstNode::writeOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, diff --git a/ExprNode.hh b/ExprNode.hh index dfef9660..1cf066fd 100644 --- a/ExprNode.hh +++ b/ExprNode.hh @@ -284,6 +284,7 @@ public: //! Returns the relative period of the most forward term in this expression /*! A negative value means that the expression contains only lagged variables */ virtual int maxLead() const = 0; + virtual void print_deflator(); //! Returns a new expression where all the leads/lags have been shifted backwards by the same amount /*! @@ -455,6 +456,7 @@ public: virtual expr_t detrend(int symb_id, expr_t trend) const; virtual expr_t cloneDynamic(DataTree &dynamic_datatree) const; virtual expr_t removeTrendLeadLag(map trend_symbols_map) const; + virtual void print_deflator(); }; //! Symbol or variable node @@ -483,6 +485,7 @@ public: virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException); virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; virtual expr_t toStatic(DataTree &static_datatree) const; + virtual void print_deflator(); SymbolType get_type() const { @@ -554,6 +557,7 @@ public: virtual void collectTemporary_terms(const temporary_terms_t &temporary_terms, temporary_terms_inuse_t &temporary_terms_inuse, int Curr_Block) const; static double eval_opcode(UnaryOpcode op_code, double v) throw (EvalException, EvalExternalFunctionException); virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException); + virtual void print_deflator(); virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; //! Returns operand expr_t @@ -633,6 +637,7 @@ public: virtual double eval(const eval_context_t &eval_context) const throw (EvalException, EvalExternalFunctionException); virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; virtual expr_t Compute_RHS(expr_t arg1, expr_t arg2, int op, int op_type) const; + virtual void print_deflator(); //! Returns first operand expr_t get_arg1() const @@ -733,6 +738,7 @@ public: virtual int maxEndoLag() const; virtual int maxExoLag() const; virtual int maxLead() const; + virtual void print_deflator(); virtual expr_t decreaseLeadsLags(int n) const; virtual expr_t substituteEndoLeadGreaterThanTwo(subst_table_t &subst_table, vector &neweqs, bool deterministic_model) const; //! Creates another TrinaryOpNode with the same opcode, but with a possibly different datatree and arguments @@ -797,6 +803,7 @@ public: bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; + virtual void print_deflator(); virtual void compile(ostream &CompileCode, unsigned int &instruction_number, bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; virtual expr_t toStatic(DataTree &static_datatree) const; @@ -855,6 +862,7 @@ public: bool lhs_rhs, const temporary_terms_t &temporary_terms, const map_idx_t &map_idx, bool dynamic, bool steady_dynamic, deriv_node_temp_terms_t &tef_terms) const; + virtual void print_deflator(); }; class SecondDerivExternalFunctionNode : public ExternalFunctionNode @@ -880,6 +888,7 @@ public: virtual void writeExternalFunctionOutput(ostream &output, ExprNodeOutputType output_type, const temporary_terms_t &temporary_terms, deriv_node_temp_terms_t &tef_terms) const; + virtual void print_deflator(); }; #endif diff --git a/ModFile.cc b/ModFile.cc index b628c9b3..88f32695 100644 --- a/ModFile.cc +++ b/ModFile.cc @@ -107,6 +107,7 @@ ModFile::addStatementAtFront(Statement *st) void ModFile::checkPass() { + dynamic_model.print_trend_vars(); for (vector::iterator it = statements.begin(); it != statements.end(); it++) (*it)->checkPass(mod_file_struct, warnings); @@ -374,8 +375,8 @@ ModFile::computingPass(bool no_tmp_terms) // Mod file may have no equation (for example in a standalone BVAR estimation) if (dynamic_model.equation_number() > 0) { - if (nonstationary_variables) - trend_dynamic_model.runTrendTest(global_eval_context); + /*if (nonstationary_variables) + trend_dynamic_model.runTrendTest(global_eval_context);*/ // Compute static model and its derivatives dynamic_model.toStatic(static_model); diff --git a/ModelTree.cc b/ModelTree.cc index fb4de128..501e2958 100644 --- a/ModelTree.cc +++ b/ModelTree.cc @@ -1002,14 +1002,21 @@ ModelTree::computeJacobian(const set &vars) { for (set::const_iterator it = vars.begin(); it != vars.end(); it++) - for (int eq = 0; eq < (int) equations.size(); eq++) - { - expr_t d1 = equations[eq]->getDerivative(*it); - if (d1 == Zero) - continue; - first_derivatives[make_pair(eq, *it)] = d1; - ++NNZDerivatives[0]; - } + { + int prev_deriv = NNZDerivatives[0]; + for (int eq = 0; eq < (int) equations.size(); eq++) + { + expr_t d1 = equations[eq]->getDerivative(*it); + if (d1 == Zero) + continue; + first_derivatives[make_pair(eq, *it)] = d1; + ++NNZDerivatives[0]; + } + if (NNZDerivatives[0] == prev_deriv) + { + cout << "the derivatives w.r. to " << symbol_table.getName(*it) << " is always equal to 0\n"; + } + } } void