C++11: convert AuxVarType to class enum
parent
89832db1db
commit
c12088f314
|
@ -5141,29 +5141,29 @@ DynamicModel::writeLatexOriginalFile(const string &basename, const bool write_eq
|
||||||
void
|
void
|
||||||
DynamicModel::substituteEndoLeadGreaterThanTwo(bool deterministic_model)
|
DynamicModel::substituteEndoLeadGreaterThanTwo(bool deterministic_model)
|
||||||
{
|
{
|
||||||
substituteLeadLagInternal(avEndoLead, deterministic_model, vector<string>());
|
substituteLeadLagInternal(AuxVarType::endoLead, deterministic_model, vector<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DynamicModel::substituteEndoLagGreaterThanTwo(bool deterministic_model)
|
DynamicModel::substituteEndoLagGreaterThanTwo(bool deterministic_model)
|
||||||
{
|
{
|
||||||
substituteLeadLagInternal(avEndoLag, deterministic_model, vector<string>());
|
substituteLeadLagInternal(AuxVarType::endoLag, deterministic_model, vector<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DynamicModel::substituteExoLead(bool deterministic_model)
|
DynamicModel::substituteExoLead(bool deterministic_model)
|
||||||
{
|
{
|
||||||
substituteLeadLagInternal(avExoLead, deterministic_model, vector<string>());
|
substituteLeadLagInternal(AuxVarType::exoLead, deterministic_model, vector<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DynamicModel::substituteExoLag(bool deterministic_model)
|
DynamicModel::substituteExoLag(bool deterministic_model)
|
||||||
{
|
{
|
||||||
substituteLeadLagInternal(avExoLag, deterministic_model, vector<string>());
|
substituteLeadLagInternal(AuxVarType::exoLag, deterministic_model, vector<string>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model, const vector<string> &subset)
|
DynamicModel::substituteLeadLagInternal(AuxVarType type, bool deterministic_model, const vector<string> &subset)
|
||||||
{
|
{
|
||||||
ExprNode::subst_table_t subst_table;
|
ExprNode::subst_table_t subst_table;
|
||||||
vector<BinaryOpNode *> neweqs;
|
vector<BinaryOpNode *> neweqs;
|
||||||
|
@ -5179,19 +5179,19 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
|
||||||
expr_t subst;
|
expr_t subst;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
subst = value->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
|
subst = value->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
subst = value->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
subst = value->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
subst = value->substituteExoLead(subst_table, neweqs, deterministic_model);
|
subst = value->substituteExoLead(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
subst = value->substituteExoLag(subst_table, neweqs);
|
subst = value->substituteExoLag(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
subst = value->differentiateForwardVars(subset, subst_table, neweqs);
|
subst = value->differentiateForwardVars(subset, subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5207,19 +5207,19 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
|
||||||
expr_t subst;
|
expr_t subst;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
subst = equation->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
|
subst = equation->substituteEndoLeadGreaterThanTwo(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
subst = equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
subst = equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
subst = equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
subst = equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
subst = equation->substituteExoLag(subst_table, neweqs);
|
subst = equation->substituteExoLag(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
subst = equation->differentiateForwardVars(subset, subst_table, neweqs);
|
subst = equation->differentiateForwardVars(subset, subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5239,20 +5239,20 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
|
||||||
expr_t subst;
|
expr_t subst;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
subst = aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
|
subst = aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
|
||||||
neweqs, deterministic_model);
|
neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
subst = aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
subst = aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
subst = aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
subst = aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
subst = aux_equation->substituteExoLag(subst_table, neweqs);
|
subst = aux_equation->substituteExoLag(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
subst = aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
|
subst = aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5272,20 +5272,20 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
|
||||||
expr_t subst;
|
expr_t subst;
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
subst = diff_aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
|
subst = diff_aux_equation->substituteEndoLeadGreaterThanTwo(subst_table,
|
||||||
neweqs, deterministic_model);
|
neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
subst = diff_aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
subst = diff_aux_equation->substituteEndoLagGreaterThanTwo(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
subst = diff_aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
subst = diff_aux_equation->substituteExoLead(subst_table, neweqs, deterministic_model);
|
||||||
break;
|
break;
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
subst = diff_aux_equation->substituteExoLag(subst_table, neweqs);
|
subst = diff_aux_equation->substituteExoLag(subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
subst = diff_aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
|
subst = diff_aux_equation->differentiateForwardVars(subset, subst_table, neweqs);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5312,22 +5312,22 @@ DynamicModel::substituteLeadLagInternal(aux_var_t type, bool deterministic_model
|
||||||
cout << "Substitution of ";
|
cout << "Substitution of ";
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
cout << "endo leads >= 2";
|
cout << "endo leads >= 2";
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
cout << "endo lags >= 2";
|
cout << "endo lags >= 2";
|
||||||
break;
|
break;
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
cout << "exo leads";
|
cout << "exo leads";
|
||||||
break;
|
break;
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
cout << "exo lags";
|
cout << "exo lags";
|
||||||
break;
|
break;
|
||||||
case avExpectation:
|
case AuxVarType::expectation:
|
||||||
cout << "expectation";
|
cout << "expectation";
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
cout << "forward vars";
|
cout << "forward vars";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -5560,7 +5560,7 @@ DynamicModel::removeTrendVariableFromEquations()
|
||||||
void
|
void
|
||||||
DynamicModel::differentiateForwardVars(const vector<string> &subset)
|
DynamicModel::differentiateForwardVars(const vector<string> &subset)
|
||||||
{
|
{
|
||||||
substituteLeadLagInternal(avDiffForward, true, subset);
|
substituteLeadLagInternal(AuxVarType::diffForward, true, subset);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -175,7 +175,7 @@ private:
|
||||||
\param[in] deterministic_model whether we are in a deterministic model (only for exogenous leads/lags)
|
\param[in] deterministic_model whether we are in a deterministic model (only for exogenous leads/lags)
|
||||||
\param[in] subset variables to which to apply the transformation (only for diff of forward vars)
|
\param[in] subset variables to which to apply the transformation (only for diff of forward vars)
|
||||||
*/
|
*/
|
||||||
void substituteLeadLagInternal(aux_var_t type, bool deterministic_model, const vector<string> &subset);
|
void substituteLeadLagInternal(AuxVarType type, bool deterministic_model, const vector<string> &subset);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Indicate if the temporary terms are computed for the overall model (true) or not (false). Default value true
|
//! Indicate if the temporary terms are computed for the overall model (true) or not (false). Default value true
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
#include "SymbolTable.hh"
|
#include "SymbolTable.hh"
|
||||||
|
|
||||||
AuxVarInfo::AuxVarInfo(int symb_id_arg, aux_var_t type_arg, int orig_symb_id_arg, int orig_lead_lag_arg,
|
AuxVarInfo::AuxVarInfo(int symb_id_arg, AuxVarType type_arg, int orig_symb_id_arg, int orig_lead_lag_arg,
|
||||||
int equation_number_for_multiplier_arg, int information_set_arg,
|
int equation_number_for_multiplier_arg, int information_set_arg,
|
||||||
expr_t expr_node_arg) :
|
expr_t expr_node_arg) :
|
||||||
symb_id(symb_id_arg),
|
symb_id(symb_id_arg),
|
||||||
|
@ -345,38 +345,38 @@ SymbolTable::writeOutput(ostream &output) const noexcept(false)
|
||||||
for (int i = 0; i < (int) aux_vars.size(); i++)
|
for (int i = 0; i < (int) aux_vars.size(); i++)
|
||||||
{
|
{
|
||||||
output << "M_.aux_vars(" << i+1 << ").endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id())+1 << ";" << endl
|
output << "M_.aux_vars(" << i+1 << ").endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id())+1 << ";" << endl
|
||||||
<< "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].get_type() << ";" << endl;
|
<< "M_.aux_vars(" << i+1 << ").type = " << aux_vars[i].get_type_id() << ";" << endl;
|
||||||
switch (aux_vars[i].get_type())
|
switch (aux_vars[i].get_type())
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
case avVarModel:
|
case AuxVarType::varModel:
|
||||||
output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl
|
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;
|
<< "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avUnaryOp:
|
case AuxVarType::unaryOp:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
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
|
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;
|
<< "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avMultiplier:
|
case AuxVarType::multiplier:
|
||||||
output << "M_.aux_vars(" << i+1 << ").eq_nbr = " << aux_vars[i].get_equation_number_for_multiplier() + 1 << ";" << endl;
|
output << "M_.aux_vars(" << i+1 << ").eq_nbr = " << aux_vars[i].get_equation_number_for_multiplier() + 1 << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl;
|
output << "M_.aux_vars(" << i+1 << ").orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avExpectation:
|
case AuxVarType::expectation:
|
||||||
output << "M_.aux_vars(" << i+1 << ").orig_expr = '\\mathbb{E}_{t"
|
output << "M_.aux_vars(" << i+1 << ").orig_expr = '\\mathbb{E}_{t"
|
||||||
<< (aux_vars[i].get_information_set() < 0 ? "" : "+")
|
<< (aux_vars[i].get_information_set() < 0 ? "" : "+")
|
||||||
<< aux_vars[i].get_information_set() << "}(";
|
<< aux_vars[i].get_information_set() << "}(";
|
||||||
aux_vars[i].get_expr_node()->writeOutput(output, oLatexDynamicModel);
|
aux_vars[i].get_expr_node()->writeOutput(output, oLatexDynamicModel);
|
||||||
output << ")';" << endl;
|
output << ")';" << endl;
|
||||||
break;
|
break;
|
||||||
case avDiff:
|
case AuxVarType::diff:
|
||||||
case avDiffLag:
|
case AuxVarType::diffLag:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
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
|
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;
|
<< "M_.aux_vars(" << i+1 << ").orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
|
@ -471,28 +471,28 @@ SymbolTable::writeCOutput(ostream &output) const noexcept(false)
|
||||||
for (int i = 0; i < (int) aux_vars.size(); i++)
|
for (int i = 0; i < (int) aux_vars.size(); i++)
|
||||||
{
|
{
|
||||||
output << "av[" << i << "].endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
|
output << "av[" << i << "].endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
|
||||||
<< "av[" << i << "].type = " << aux_vars[i].get_type() << ";" << endl;
|
<< "av[" << i << "].type = " << aux_vars[i].get_type_id() << ";" << endl;
|
||||||
switch (aux_vars[i].get_type())
|
switch (aux_vars[i].get_type())
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
case avExpectation:
|
case AuxVarType::expectation:
|
||||||
case avMultiplier:
|
case AuxVarType::multiplier:
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
case avVarModel:
|
case AuxVarType::varModel:
|
||||||
output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avUnaryOp:
|
case AuxVarType::unaryOp:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
if (aux_vars[i].get_orig_symb_id() >= 0)
|
||||||
output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avDiff:
|
case AuxVarType::diff:
|
||||||
case avDiffLag:
|
case AuxVarType::diffLag:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
if (aux_vars[i].get_orig_symb_id() >= 0)
|
||||||
output << "av[" << i << "].orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av[" << i << "].orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
|
@ -575,28 +575,28 @@ SymbolTable::writeCCOutput(ostream &output) const noexcept(false)
|
||||||
{
|
{
|
||||||
output << "aux_vars_t av" << i << ";" << endl;
|
output << "aux_vars_t av" << i << ";" << endl;
|
||||||
output << "av" << i << ".endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
|
output << "av" << i << ".endo_index = " << getTypeSpecificID(aux_vars[i].get_symb_id()) << ";" << endl
|
||||||
<< "av" << i << ".type = " << aux_vars[i].get_type() << ";" << endl;
|
<< "av" << i << ".type = " << aux_vars[i].get_type_id() << ";" << endl;
|
||||||
switch (aux_vars[i].get_type())
|
switch (aux_vars[i].get_type())
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
case avExpectation:
|
case AuxVarType::expectation:
|
||||||
case avMultiplier:
|
case AuxVarType::multiplier:
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
break;
|
break;
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
case avVarModel:
|
case AuxVarType::varModel:
|
||||||
output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avUnaryOp:
|
case AuxVarType::unaryOp:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
if (aux_vars[i].get_orig_symb_id() >= 0)
|
||||||
output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
break;
|
break;
|
||||||
case avDiff:
|
case AuxVarType::diff:
|
||||||
case avDiffLag:
|
case AuxVarType::diffLag:
|
||||||
if (aux_vars[i].get_orig_symb_id() >= 0)
|
if (aux_vars[i].get_orig_symb_id() >= 0)
|
||||||
output << "av" << i << ".orig_index = " << getTypeSpecificID(aux_vars[i].get_orig_symb_id()) << ";" << endl
|
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;
|
<< "av" << i << ".orig_lead_lag = " << aux_vars[i].get_orig_lead_lag() << ";" << endl;
|
||||||
|
@ -635,7 +635,7 @@ SymbolTable::addLeadAuxiliaryVarInternal(bool endo, int index, expr_t expr_arg)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, (endo ? avEndoLead : avExoLead), 0, 0, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, (endo ? AuxVarType::endoLead : AuxVarType::exoLead), 0, 0, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -661,7 +661,7 @@ SymbolTable::addLagAuxiliaryVarInternal(bool endo, int orig_symb_id, int orig_le
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, (endo ? avEndoLag : avExoLag), orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, (endo ? AuxVarType::endoLag : AuxVarType::exoLag), orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -709,7 +709,7 @@ SymbolTable::addExpectationAuxiliaryVar(int information_set, int index, expr_t e
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avExpectation, 0, 0, 0, information_set, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::expectation, 0, 0, 0, information_set, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -732,7 +732,7 @@ SymbolTable::addDiffLagAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avDiffLag, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::diffLag, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -755,7 +755,7 @@ SymbolTable::addDiffAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id, i
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avDiff, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::diff, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -783,7 +783,7 @@ SymbolTable::addUnaryOpAuxiliaryVar(int index, expr_t expr_arg, int orig_symb_id
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avUnaryOp, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::unaryOp, orig_symb_id, orig_lag, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -805,7 +805,7 @@ SymbolTable::addVarModelEndoLagAuxiliaryVar(int orig_symb_id, int orig_lead_lag,
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avVarModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::varModel, orig_symb_id, orig_lead_lag, 0, 0, expr_arg);
|
||||||
|
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
@ -827,7 +827,7 @@ SymbolTable::addMultiplierAuxiliaryVar(int index) noexcept(false)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avMultiplier, 0, 0, index, 0, nullptr);
|
aux_vars.emplace_back(symb_id, AuxVarType::multiplier, 0, 0, index, 0, nullptr);
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -848,7 +848,7 @@ SymbolTable::addDiffForwardAuxiliaryVar(int orig_symb_id, expr_t expr_arg) noexc
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
aux_vars.emplace_back(symb_id, avDiffForward, orig_symb_id, 0, 0, 0, expr_arg);
|
aux_vars.emplace_back(symb_id, AuxVarType::diffForward, orig_symb_id, 0, 0, 0, expr_arg);
|
||||||
return symb_id;
|
return symb_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -856,7 +856,7 @@ int
|
||||||
SymbolTable::searchAuxiliaryVars(int orig_symb_id, int orig_lead_lag) const noexcept(false)
|
SymbolTable::searchAuxiliaryVars(int orig_symb_id, int orig_lead_lag) const noexcept(false)
|
||||||
{
|
{
|
||||||
for (const auto & aux_var : aux_vars)
|
for (const auto & aux_var : aux_vars)
|
||||||
if ((aux_var.get_type() == avEndoLag || aux_var.get_type() == avExoLag)
|
if ((aux_var.get_type() == AuxVarType::endoLag || aux_var.get_type() == AuxVarType::exoLag)
|
||||||
&& aux_var.get_orig_symb_id() == orig_symb_id && aux_var.get_orig_lead_lag() == orig_lead_lag)
|
&& aux_var.get_orig_symb_id() == orig_symb_id && aux_var.get_orig_lead_lag() == orig_lead_lag)
|
||||||
return aux_var.get_symb_id();
|
return aux_var.get_symb_id();
|
||||||
throw SearchFailedException(orig_symb_id, orig_lead_lag);
|
throw SearchFailedException(orig_symb_id, orig_lead_lag);
|
||||||
|
@ -866,7 +866,7 @@ int
|
||||||
SymbolTable::getOrigSymbIdForAuxVar(int aux_var_symb_id) const noexcept(false)
|
SymbolTable::getOrigSymbIdForAuxVar(int aux_var_symb_id) const noexcept(false)
|
||||||
{
|
{
|
||||||
for (const auto & aux_var : aux_vars)
|
for (const auto & aux_var : aux_vars)
|
||||||
if ((aux_var.get_type() == avEndoLag || aux_var.get_type() == avExoLag || aux_var.get_type() == avDiff)
|
if ((aux_var.get_type() == AuxVarType::endoLag || aux_var.get_type() == AuxVarType::exoLag || aux_var.get_type() == AuxVarType::diff)
|
||||||
&& aux_var.get_symb_id() == aux_var_symb_id)
|
&& aux_var.get_symb_id() == aux_var_symb_id)
|
||||||
return aux_var.get_orig_symb_id();
|
return aux_var.get_orig_symb_id();
|
||||||
throw UnknownSymbolIDException(aux_var_symb_id);
|
throw UnknownSymbolIDException(aux_var_symb_id);
|
||||||
|
@ -1024,7 +1024,7 @@ bool
|
||||||
SymbolTable::isAuxiliaryVariableButNotMultiplier(int symb_id) const
|
SymbolTable::isAuxiliaryVariableButNotMultiplier(int symb_id) const
|
||||||
{
|
{
|
||||||
for (const auto & aux_var : aux_vars)
|
for (const auto & aux_var : aux_vars)
|
||||||
if (aux_var.get_symb_id() == symb_id && aux_var.get_type() != avMultiplier)
|
if (aux_var.get_symb_id() == symb_id && aux_var.get_type() != AuxVarType::multiplier)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1102,38 +1102,38 @@ SymbolTable::writeJuliaOutput(ostream &output) const noexcept(false)
|
||||||
{
|
{
|
||||||
output << " DynareModel.AuxVars("
|
output << " DynareModel.AuxVars("
|
||||||
<< getTypeSpecificID(aux_var.get_symb_id()) + 1 << ", "
|
<< getTypeSpecificID(aux_var.get_symb_id()) + 1 << ", "
|
||||||
<< aux_var.get_type() << ", ";
|
<< aux_var.get_type_id() << ", ";
|
||||||
switch (aux_var.get_type())
|
switch (aux_var.get_type())
|
||||||
{
|
{
|
||||||
case avEndoLead:
|
case AuxVarType::endoLead:
|
||||||
case avExoLead:
|
case AuxVarType::exoLead:
|
||||||
case avEndoLag:
|
case AuxVarType::endoLag:
|
||||||
case avExoLag:
|
case AuxVarType::exoLag:
|
||||||
case avVarModel:
|
case AuxVarType::varModel:
|
||||||
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
|
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
|
||||||
<< aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
|
<< aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
|
||||||
break;
|
break;
|
||||||
case avUnaryOp:
|
case AuxVarType::unaryOp:
|
||||||
if (aux_var.get_orig_symb_id() >= 0)
|
if (aux_var.get_orig_symb_id() >= 0)
|
||||||
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", " << aux_var.get_orig_lead_lag();
|
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", " << aux_var.get_orig_lead_lag();
|
||||||
else
|
else
|
||||||
output << "typemin(Int), typemin(Int)";
|
output << "typemin(Int), typemin(Int)";
|
||||||
output << ", typemin(Int), string()";
|
output << ", typemin(Int), string()";
|
||||||
break;
|
break;
|
||||||
case avDiff:
|
case AuxVarType::diff:
|
||||||
case avDiffLag:
|
case AuxVarType::diffLag:
|
||||||
if (aux_var.get_orig_symb_id() >= 0)
|
if (aux_var.get_orig_symb_id() >= 0)
|
||||||
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
|
output << getTypeSpecificID(aux_var.get_orig_symb_id()) + 1 << ", "
|
||||||
<< aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
|
<< aux_var.get_orig_lead_lag() << ", typemin(Int), string()";
|
||||||
break;
|
break;
|
||||||
case avMultiplier:
|
case AuxVarType::multiplier:
|
||||||
output << "typemin(Int), typemin(Int), " << aux_var.get_equation_number_for_multiplier() + 1
|
output << "typemin(Int), typemin(Int), " << aux_var.get_equation_number_for_multiplier() + 1
|
||||||
<< ", string()";
|
<< ", string()";
|
||||||
break;
|
break;
|
||||||
case avDiffForward:
|
case AuxVarType::diffForward:
|
||||||
output << getTypeSpecificID(aux_var.get_orig_symb_id())+1 << ", typemin(Int), typemin(Int), string()";
|
output << getTypeSpecificID(aux_var.get_orig_symb_id())+1 << ", typemin(Int), typemin(Int), string()";
|
||||||
break;
|
break;
|
||||||
case avExpectation:
|
case AuxVarType::expectation:
|
||||||
output << "typemin(Int), typemin(Int), typemin(Int), \"\\mathbb{E}_{t"
|
output << "typemin(Int), typemin(Int), typemin(Int), \"\\mathbb{E}_{t"
|
||||||
<< (aux_var.get_information_set() < 0 ? "" : "+")
|
<< (aux_var.get_information_set() < 0 ? "" : "+")
|
||||||
<< aux_var.get_information_set() << "}(";
|
<< aux_var.get_information_set() << "}(";
|
||||||
|
|
|
@ -35,19 +35,19 @@ using namespace std;
|
||||||
using expr_t = class ExprNode *;
|
using expr_t = class ExprNode *;
|
||||||
|
|
||||||
//! Types of auxiliary variables
|
//! Types of auxiliary variables
|
||||||
enum aux_var_t
|
enum class AuxVarType
|
||||||
{
|
{
|
||||||
avEndoLead = 0, //!< Substitute for endo leads >= 2
|
endoLead = 0, //!< Substitute for endo leads >= 2
|
||||||
avEndoLag = 1, //!< Substitute for endo lags >= 2
|
endoLag = 1, //!< Substitute for endo lags >= 2
|
||||||
avExoLead = 2, //!< Substitute for exo leads >= 1
|
exoLead = 2, //!< Substitute for exo leads >= 1
|
||||||
avExoLag = 3, //!< Substitute for exo lags >= 1
|
exoLag = 3, //!< Substitute for exo lags >= 1
|
||||||
avExpectation = 4, //!< Substitute for Expectation Operator
|
expectation = 4, //!< Substitute for Expectation Operator
|
||||||
avDiffForward = 5, //!< Substitute for the differentiate of a forward variable
|
diffForward = 5, //!< Substitute for the differentiate of a forward variable
|
||||||
avMultiplier = 6, //!< Multipliers for FOC of Ramsey Problem
|
multiplier = 6, //!< Multipliers for FOC of Ramsey Problem
|
||||||
avVarModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model
|
varModel = 7, //!< Variable for var_model with order > abs(min_lag()) present in model
|
||||||
avDiff = 8, //!< Variable for Diff operator
|
diff = 8, //!< Variable for Diff operator
|
||||||
avDiffLag = 9, //!< Variable for timing between Diff operators
|
diffLag = 9, //!< Variable for timing between Diff operators
|
||||||
avUnaryOp = 10 //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x))
|
unaryOp = 10 //!< Variable for allowing the undiff operator to work when diff was taken of unary op, eg diff(log(x))
|
||||||
};
|
};
|
||||||
|
|
||||||
//! Information on some auxiliary variables
|
//! Information on some auxiliary variables
|
||||||
|
@ -55,25 +55,30 @@ class AuxVarInfo
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int symb_id; //!< Symbol ID of the auxiliary variable
|
int symb_id; //!< Symbol ID of the auxiliary variable
|
||||||
aux_var_t type; //!< Its type
|
AuxVarType type; //!< Its type
|
||||||
int orig_symb_id; //!< Symbol ID of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
|
int orig_symb_id; //!< Symbol ID of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
|
||||||
int orig_lead_lag; //!< Lead/lag of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
|
int orig_lead_lag; //!< Lead/lag of the endo of the original model represented by this aux var. Only used for avEndoLag and avExoLag.
|
||||||
int equation_number_for_multiplier; //!< Stores the original constraint equation number associated with this aux var. Only used for avMultiplier.
|
int equation_number_for_multiplier; //!< Stores the original constraint equation number associated with this aux var. Only used for avMultiplier.
|
||||||
int information_set; //! Argument of expectation operator. Only used for avExpectation.
|
int information_set; //! Argument of expectation operator. Only used for avExpectation.
|
||||||
expr_t expr_node; //! Auxiliary variable definition
|
expr_t expr_node; //! Auxiliary variable definition
|
||||||
public:
|
public:
|
||||||
AuxVarInfo(int symb_id_arg, aux_var_t type_arg, int orig_symb_id, int orig_lead_lag, int equation_number_for_multiplier_arg, int information_set_arg, expr_t expr_node_arg);
|
AuxVarInfo(int symb_id_arg, AuxVarType type_arg, int orig_symb_id, int orig_lead_lag, int equation_number_for_multiplier_arg, int information_set_arg, expr_t expr_node_arg);
|
||||||
int
|
int
|
||||||
get_symb_id() const
|
get_symb_id() const
|
||||||
{
|
{
|
||||||
return symb_id;
|
return symb_id;
|
||||||
};
|
};
|
||||||
aux_var_t
|
AuxVarType
|
||||||
get_type() const
|
get_type() const
|
||||||
{
|
{
|
||||||
return type;
|
return type;
|
||||||
};
|
};
|
||||||
int
|
int
|
||||||
|
get_type_id() const
|
||||||
|
{
|
||||||
|
return static_cast<int>(type);
|
||||||
|
}
|
||||||
|
int
|
||||||
get_orig_symb_id() const
|
get_orig_symb_id() const
|
||||||
{
|
{
|
||||||
return orig_symb_id;
|
return orig_symb_id;
|
||||||
|
|
Loading…
Reference in New Issue