Fix max lags for var
parent
84c2dc5f36
commit
b8ae9f6935
|
@ -3603,7 +3603,8 @@ DynamicModel::getVarMaxLag(StaticModel &static_model, vector<int> &eqnumber) con
|
||||||
int max_lag = 0;
|
int max_lag = 0;
|
||||||
for (vector<int>::const_iterator it = eqnumber.begin();
|
for (vector<int>::const_iterator it = eqnumber.begin();
|
||||||
it != eqnumber.end(); it++)
|
it != eqnumber.end(); it++)
|
||||||
equations[*it]->get_arg2()->VarMaxLag(static_model, lhs_static, max_lag);
|
max_lag = max(max_lag,
|
||||||
|
equations[*it]->get_arg2()->VarMaxLag(static_model, lhs_static));
|
||||||
|
|
||||||
return max_lag;
|
return max_lag;
|
||||||
}
|
}
|
||||||
|
@ -3784,22 +3785,6 @@ DynamicModel::getUndiffLHSForPac(vector<int> &lhs, vector<expr_t> &lhs_expr_t, v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
DynamicModel::getUndiffMaxLag(StaticModel &static_model, vector<expr_t> &lhs, vector<int> &eqnumber) const
|
|
||||||
{
|
|
||||||
set<expr_t> lhs_static;
|
|
||||||
for(vector<expr_t>::const_iterator it = lhs.begin();
|
|
||||||
it != lhs.end(); it++)
|
|
||||||
lhs_static.insert((*it)->toStatic(static_model));
|
|
||||||
|
|
||||||
int max_lag = 0;
|
|
||||||
for (vector<int>::const_iterator it = eqnumber.begin();
|
|
||||||
it != eqnumber.end(); it++)
|
|
||||||
equations[*it]->get_arg2()->VarMaxLag(static_model, lhs_static, max_lag);
|
|
||||||
|
|
||||||
return max_lag;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
DynamicModel::walkPacParameters()
|
DynamicModel::walkPacParameters()
|
||||||
{
|
{
|
||||||
|
|
|
@ -330,8 +330,6 @@ public:
|
||||||
int max_lag,
|
int max_lag,
|
||||||
vector<bool> &nonstationary,
|
vector<bool> &nonstationary,
|
||||||
int growth_symb_id);
|
int growth_symb_id);
|
||||||
//! Get the max lag for the PAC VAR
|
|
||||||
int getUndiffMaxLag(StaticModel &static_model, vector<expr_t> &lhs, vector<int> &eqnumber) const;
|
|
||||||
|
|
||||||
//! Substitutes pac_expectation operator
|
//! Substitutes pac_expectation operator
|
||||||
void substitutePacExpectation();
|
void substitutePacExpectation();
|
||||||
|
|
|
@ -487,9 +487,10 @@ NumConstNode::VarMinLag() const
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
NumConstNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
NumConstNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1412,11 +1413,13 @@ VariableNode::undiff() const
|
||||||
return const_cast<VariableNode *>(this);
|
return const_cast<VariableNode *>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
VariableNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
VariableNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
if (-lag > max_lag)
|
auto it = static_lhs.find(this->toStatic(static_datatree));
|
||||||
max_lag = -lag;
|
if (it == static_lhs.end())
|
||||||
|
return 0;
|
||||||
|
return maxLag();
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -2966,28 +2969,13 @@ UnaryOpNode::undiff() const
|
||||||
return arg->undiff();
|
return arg->undiff();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
UnaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
UnaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
if (op_code != oDiff)
|
auto it = static_lhs.find(this->toStatic(static_datatree));
|
||||||
arg->VarMaxLag(static_datatree, static_lhs, max_lag);
|
if (it == static_lhs.end())
|
||||||
else
|
return 0;
|
||||||
{
|
return arg->maxLag() - arg->countDiffs();
|
||||||
auto it = static_lhs.find(this->toStatic(static_datatree));
|
|
||||||
if (it != static_lhs.end())
|
|
||||||
{
|
|
||||||
int max_lag_tmp = arg->maxLag() - arg->countDiffs();
|
|
||||||
if (max_lag_tmp > max_lag)
|
|
||||||
max_lag = max_lag_tmp;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int max_lag_tmp = 0;
|
|
||||||
arg->VarMaxLag(static_datatree, static_lhs, max_lag_tmp);
|
|
||||||
if (max_lag_tmp + 1 > max_lag)
|
|
||||||
max_lag = max_lag_tmp + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -4329,11 +4317,11 @@ BinaryOpNode::VarMinLag() const
|
||||||
return min(arg1->VarMinLag(), arg2->VarMinLag());
|
return min(arg1->VarMinLag(), arg2->VarMinLag());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
BinaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
BinaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
arg1->VarMaxLag(static_datatree, static_lhs, max_lag);
|
return max(arg1->VarMaxLag(static_datatree, static_lhs),
|
||||||
arg2->VarMaxLag(static_datatree, static_lhs, max_lag);
|
arg2->VarMaxLag(static_datatree, static_lhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -5706,12 +5694,12 @@ TrinaryOpNode::VarMinLag() const
|
||||||
return min(min(arg1->VarMinLag(), arg2->VarMinLag()), arg3->VarMinLag());
|
return min(min(arg1->VarMinLag(), arg2->VarMinLag()), arg3->VarMinLag());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
TrinaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
TrinaryOpNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
arg1->VarMaxLag(static_datatree, static_lhs, max_lag);
|
return max(arg1->VarMaxLag(static_datatree, static_lhs),
|
||||||
arg2->VarMaxLag(static_datatree, static_lhs, max_lag);
|
max(arg2->VarMaxLag(static_datatree, static_lhs),
|
||||||
arg3->VarMaxLag(static_datatree, static_lhs, max_lag);
|
arg3->VarMaxLag(static_datatree, static_lhs)));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -6151,11 +6139,13 @@ int val = 0;
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
AbstractExternalFunctionNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
AbstractExternalFunctionNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
|
int max_lag = 0;
|
||||||
for (auto argument : arguments)
|
for (auto argument : arguments)
|
||||||
argument->VarMaxLag(static_datatree, static_lhs, max_lag);
|
max_lag = max(max_lag, argument->VarMaxLag(static_datatree, static_lhs));
|
||||||
|
return max_lag;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -7705,9 +7695,10 @@ VarExpectationNode::VarMinLag() const
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
VarExpectationNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
VarExpectationNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -8160,9 +8151,10 @@ PacExpectationNode::VarMinLag() const
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
PacExpectationNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const
|
PacExpectationNode::VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const
|
||||||
{
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -282,7 +282,7 @@ class ExprNode
|
||||||
virtual int VarMinLag() const = 0;
|
virtual int VarMinLag() const = 0;
|
||||||
|
|
||||||
//! Find the maximum lag in a VAR: handles case where LHS is diff
|
//! Find the maximum lag in a VAR: handles case where LHS is diff
|
||||||
virtual void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const = 0;
|
virtual int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const = 0;
|
||||||
|
|
||||||
//! Finds LHS variable in a VAR equation
|
//! Finds LHS variable in a VAR equation
|
||||||
virtual void collectVARLHSVariable(set<expr_t> &result) const = 0;
|
virtual void collectVARLHSVariable(set<expr_t> &result) const = 0;
|
||||||
|
@ -595,7 +595,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -686,7 +686,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -798,7 +798,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -930,7 +930,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -1037,7 +1037,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -1150,7 +1150,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -1342,7 +1342,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
@ -1428,7 +1428,7 @@ public:
|
||||||
int maxLead() const override;
|
int maxLead() const override;
|
||||||
int maxLag() const override;
|
int maxLag() const override;
|
||||||
int VarMinLag() const override;
|
int VarMinLag() const override;
|
||||||
void VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs, int &max_lag) const override;
|
int VarMaxLag(DataTree &static_datatree, set<expr_t> &static_lhs) const override;
|
||||||
int PacMaxLag(vector<int> &lhs) const override;
|
int PacMaxLag(vector<int> &lhs) const override;
|
||||||
expr_t undiff() const override;
|
expr_t undiff() const override;
|
||||||
expr_t decreaseLeadsLags(int n) const override;
|
expr_t decreaseLeadsLags(int n) const override;
|
||||||
|
|
|
@ -434,7 +434,7 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, const
|
||||||
if (!undiff.empty())
|
if (!undiff.empty())
|
||||||
{
|
{
|
||||||
dynamic_model.getUndiffLHSForPac(lhs, lhs_expr_t, diff, orig_diff_var, eqnumber, undiff, diff_subst_table);
|
dynamic_model.getUndiffLHSForPac(lhs, lhs_expr_t, diff, orig_diff_var, eqnumber, undiff, diff_subst_table);
|
||||||
max_lag = original_model.getUndiffMaxLag(diff_static_model, lhs_expr_t, eqnumber);
|
max_lag++;
|
||||||
}
|
}
|
||||||
pms->fillUndiffedLHS(lhs);
|
pms->fillUndiffedLHS(lhs);
|
||||||
dynamic_model.walkPacParameters();
|
dynamic_model.walkPacParameters();
|
||||||
|
|
Loading…
Reference in New Issue