Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
preprocessor
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
7
Issues
7
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Dynare
preprocessor
Commits
eb74d483
Commit
eb74d483
authored
Sep 13, 2018
by
Houtan Bastani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
trend_component_model: replace `trends` option with `targets`
parent
dfb0629c
Pipeline
#11
passed with stage
in 1 minute and 33 seconds
Changes
8
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
106 additions
and
106 deletions
+106
-106
src/DynamicModel.cc
src/DynamicModel.cc
+8
-8
src/DynareBison.yy
src/DynareBison.yy
+3
-3
src/DynareFlex.ll
src/DynareFlex.ll
+1
-1
src/ExprNode.cc
src/ExprNode.cc
+22
-22
src/ExprNode.hh
src/ExprNode.hh
+11
-11
src/ParsingDriver.cc
src/ParsingDriver.cc
+4
-4
src/SubModel.cc
src/SubModel.cc
+43
-43
src/SubModel.hh
src/SubModel.hh
+14
-14
No files found.
src/DynamicModel.cc
View file @
eb74d483
...
...
@@ -3466,7 +3466,7 @@ DynamicModel::updateVarAndTrendModel() const
else
if
(
i
==
1
)
{
eqnums
=
trend_component_model_table
.
getEqNums
();
trend_eqnums
=
trend_component_model_table
.
getT
rend
EqNums
();
trend_eqnums
=
trend_component_model_table
.
getT
arget
EqNums
();
}
map
<
string
,
vector
<
int
>>
trend_varr
;
...
...
@@ -3509,7 +3509,7 @@ DynamicModel::updateVarAndTrendModel() const
catch
(...)
{
}
int
trend_var_symb_id
=
equations
[
eqn
]
->
get_arg2
()
->
findT
rend
Variable
(
lhs_symb_id
);
int
trend_var_symb_id
=
equations
[
eqn
]
->
get_arg2
()
->
findT
arget
Variable
(
lhs_symb_id
);
if
(
trend_var_symb_id
>=
0
)
{
if
(
symbol_table
.
isAuxiliaryVariable
(
trend_var_symb_id
))
...
...
@@ -3541,7 +3541,7 @@ DynamicModel::updateVarAndTrendModel() const
else
if
(
i
==
1
)
{
trend_component_model_table
.
setRhs
(
rhsr
);
trend_component_model_table
.
setT
rend
Var
(
trend_varr
);
trend_component_model_table
.
setT
arget
Var
(
trend_varr
);
}
}
}
...
...
@@ -3717,7 +3717,7 @@ void
DynamicModel
::
fillAutoregressiveMatrix
(
map
<
string
,
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>>
&
ARr
,
bool
is_trend_component_model
)
const
{
auto
eqnums
=
is_trend_component_model
?
trend_component_model_table
.
getNonT
rend
EqNums
()
:
var_model_table
.
getEqNums
();
trend_component_model_table
.
getNonT
arget
EqNums
()
:
var_model_table
.
getEqNums
();
for
(
const
auto
&
it
:
eqnums
)
{
int
i
=
0
;
...
...
@@ -3738,7 +3738,7 @@ DynamicModel::fillTrendComponentModelTable() const
map
<
string
,
vector
<
bool
>>
nonstationaryr
;
map
<
string
,
vector
<
set
<
pair
<
int
,
int
>>>>
rhsr
;
map
<
string
,
vector
<
string
>>
eqtags
=
trend_component_model_table
.
getEqTags
();
map
<
string
,
vector
<
string
>>
trend_eqtags
=
trend_component_model_table
.
getT
rend
EqTags
();
map
<
string
,
vector
<
string
>>
trend_eqtags
=
trend_component_model_table
.
getT
arget
EqTags
();
for
(
const
auto
&
it
:
trend_eqtags
)
{
vector
<
int
>
trend_eqnumber
;
...
...
@@ -3854,8 +3854,8 @@ DynamicModel::fillErrorComponentMatrix(map<string, map<tuple<int, int, int>, exp
{
int
i
=
0
;
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>
EC
;
vector
<
int
>
trend_lhs
=
trend_component_model_table
.
getT
rend
Lhs
(
it
.
first
);
vector
<
int
>
nontrend_eqnums
=
trend_component_model_table
.
getNonT
rend
EqNums
(
it
.
first
);
vector
<
int
>
trend_lhs
=
trend_component_model_table
.
getT
arget
Lhs
(
it
.
first
);
vector
<
int
>
nontrend_eqnums
=
trend_component_model_table
.
getNonT
arget
EqNums
(
it
.
first
);
vector
<
int
>
undiff_nontrend_lhs
=
getUndiffLHSForPac
(
it
.
first
,
diff_subst_table
);
vector
<
int
>
parsed_undiff_nontrend_lhs
;
...
...
@@ -4018,7 +4018,7 @@ DynamicModel::getUndiffLHSForPac(const string &aux_model_name,
vector
<
bool
>
diff
=
trend_component_model_table
.
getDiff
(
aux_model_name
);
vector
<
int
>
orig_diff_var
=
trend_component_model_table
.
getOrigDiffVar
(
aux_model_name
);
vector
<
int
>
eqnumber
=
trend_component_model_table
.
getEqNums
(
aux_model_name
);
vector
<
int
>
nontrend_eqnums
=
trend_component_model_table
.
getNonT
rend
EqNums
(
aux_model_name
);
vector
<
int
>
nontrend_eqnums
=
trend_component_model_table
.
getNonT
arget
EqNums
(
aux_model_name
);
for
(
auto
eqn
:
nontrend_eqnums
)
{
...
...
src/DynareBison.yy
View file @
eb74d483
...
...
@@ -111,7 +111,7 @@ class ParsingDriver;
%token PRINT PRIOR_MC PRIOR_TRUNC PRIOR_MODE PRIOR_MEAN POSTERIOR_MODE POSTERIOR_MEAN POSTERIOR_MEDIAN MLE_MODE PRUNING
%token <string> QUOTED_STRING
%token QZ_CRITERIUM QZ_ZERO_THRESHOLD DSGE_VAR DSGE_VARLAG DSGE_PRIOR_WEIGHT TRUNCATE PIPE_E PIPE_X PIPE_P
%token RELATIVE_IRF REPLIC SIMUL_REPLIC RPLOT SAVE_PARAMS_AND_STEADY_STATE PARAMETER_UNCERTAINTY T
REND
S
%token RELATIVE_IRF REPLIC SIMUL_REPLIC RPLOT SAVE_PARAMS_AND_STEADY_STATE PARAMETER_UNCERTAINTY T
ARGET
S
%token SHOCKS SHOCK_DECOMPOSITION SHOCK_GROUPS USE_SHOCK_GROUPS SIGMA_E SIMUL SIMUL_ALGO SIMUL_SEED ENDOGENOUS_TERMINAL_PERIOD
%token SMOOTHER SMOOTHER2HISTVAL SQUARE_ROOT_SOLVER STACK_SOLVE_ALGO STEADY_STATE_MODEL SOLVE_ALGO SOLVER_PERIODS ROBUST_LIN_SOLVE
%token STDERR STEADY STOCH_SIMUL SYLVESTER SYLVESTER_FIXED_POINT_TOL REGIMES REGIME REALTIME_SHOCK_DECOMPOSITION
...
...
@@ -385,7 +385,7 @@ trend_component_model_options_list : trend_component_model_options_list COMMA tr
;
trend_component_model_options : o_trend_component_model_name
| o_trend_component_model_t
rend
s
| o_trend_component_model_t
arget
s
| o_trend_component_model_eq_tags
;
...
...
@@ -3209,7 +3209,7 @@ o_nobs : NOBS EQUAL vec_int
{ driver.option_vec_int("nobs", $3); }
;
o_trend_component_model_name : MODEL_NAME EQUAL symbol { driver.option_str("trend_component.name", $3); };
o_trend_component_model_t
rends : TRENDS EQUAL vec_str { driver.option_vec_str("trend_component.trend
s", $3); }
o_trend_component_model_t
argets : TARGETS EQUAL vec_str { driver.option_vec_str("trend_component.target
s", $3); }
o_trend_component_model_eq_tags : EQTAGS EQUAL vec_str { driver.option_vec_str("trend_component.eqtags", $3); }
o_conditional_variance_decomposition : CONDITIONAL_VARIANCE_DECOMPOSITION EQUAL vec_int
{ driver.option_vec_int("conditional_variance_decomposition", $3); }
...
...
src/DynareFlex.ll
View file @
eb74d483
...
...
@@ -490,7 +490,7 @@ DATE -?[0-9]+([YyAa]|[Mm]([1-9]|1[0-2])|[Qq][1-4]|[Ww]([1-9]{1}|[1-4][0-9]|5[0-2
}
<DYNARE_STATEMENT>write_equation_tags {return token::WRITE_EQUATION_TAGS;}
<DYNARE_STATEMENT>eqtags {return token::EQTAGS;}
<DYNARE_STATEMENT>t
rends {return token::TREND
S;}
<DYNARE_STATEMENT>t
argets {return token::TARGET
S;}
<DYNARE_STATEMENT>indxap {return token::INDXAP;}
<DYNARE_STATEMENT>apband {return token::APBAND;}
<DYNARE_STATEMENT>indximf {return token::INDXIMF;}
...
...
src/ExprNode.cc
View file @
eb74d483
...
...
@@ -557,7 +557,7 @@ NumConstNode::findUnaryOpNodesForAuxVarCreation(DataTree &static_datatree, diff_
}
int
NumConstNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
NumConstNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
return
-
1
;
}
...
...
@@ -1506,7 +1506,7 @@ VariableNode::findUnaryOpNodesForAuxVarCreation(DataTree &static_datatree, diff_
}
int
VariableNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
VariableNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
return
-
1
;
}
...
...
@@ -3219,9 +3219,9 @@ UnaryOpNode::findDiffNodes(DataTree &static_datatree, diff_table_t &diff_table)
}
int
UnaryOpNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
UnaryOpNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
return
arg
->
findT
rend
Variable
(
lhs_symb_id
);
return
arg
->
findT
arget
Variable
(
lhs_symb_id
);
}
expr_t
...
...
@@ -5146,7 +5146,7 @@ BinaryOpNode::isInStaticForm() const
}
bool
BinaryOpNode
::
findT
rend
VariableHelper1
(
int
lhs_symb_id
,
int
rhs_symb_id
)
const
BinaryOpNode
::
findT
arget
VariableHelper1
(
int
lhs_symb_id
,
int
rhs_symb_id
)
const
{
if
(
lhs_symb_id
==
rhs_symb_id
)
return
true
;
...
...
@@ -5164,8 +5164,8 @@ BinaryOpNode::findTrendVariableHelper1(int lhs_symb_id, int rhs_symb_id) const
}
int
BinaryOpNode
::
findT
rend
VariableHelper
(
const
expr_t
arg1
,
const
expr_t
arg2
,
int
lhs_symb_id
)
const
BinaryOpNode
::
findT
arget
VariableHelper
(
const
expr_t
arg1
,
const
expr_t
arg2
,
int
lhs_symb_id
)
const
{
set
<
int
>
params
;
arg1
->
collectVariables
(
SymbolType
::
parameter
,
params
);
...
...
@@ -5182,9 +5182,9 @@ BinaryOpNode::findTrendVariableHelper(const expr_t arg1, const expr_t arg2,
auto
*
test_arg1
=
dynamic_cast
<
VariableNode
*>
(
testarg2
->
get_arg1
());
auto
*
test_arg2
=
dynamic_cast
<
VariableNode
*>
(
testarg2
->
get_arg2
());
if
(
test_arg1
!=
nullptr
&&
test_arg2
!=
nullptr
)
if
(
findT
rend
VariableHelper1
(
lhs_symb_id
,
endogs
.
begin
()
->
first
))
if
(
findT
arget
VariableHelper1
(
lhs_symb_id
,
endogs
.
begin
()
->
first
))
return
endogs
.
rbegin
()
->
first
;
else
if
(
findT
rend
VariableHelper1
(
lhs_symb_id
,
endogs
.
rbegin
()
->
first
))
else
if
(
findT
arget
VariableHelper1
(
lhs_symb_id
,
endogs
.
rbegin
()
->
first
))
return
endogs
.
begin
()
->
first
;
}
}
...
...
@@ -5192,15 +5192,15 @@ BinaryOpNode::findTrendVariableHelper(const expr_t arg1, const expr_t arg2,
}
int
BinaryOpNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
BinaryOpNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
int
retval
=
findT
rend
VariableHelper
(
arg1
,
arg2
,
lhs_symb_id
);
int
retval
=
findT
arget
VariableHelper
(
arg1
,
arg2
,
lhs_symb_id
);
if
(
retval
<
0
)
retval
=
findT
rend
VariableHelper
(
arg2
,
arg1
,
lhs_symb_id
);
retval
=
findT
arget
VariableHelper
(
arg2
,
arg1
,
lhs_symb_id
);
if
(
retval
<
0
)
retval
=
arg1
->
findT
rend
Variable
(
lhs_symb_id
);
retval
=
arg1
->
findT
arget
Variable
(
lhs_symb_id
);
if
(
retval
<
0
)
retval
=
arg2
->
findT
rend
Variable
(
lhs_symb_id
);
retval
=
arg2
->
findT
arget
Variable
(
lhs_symb_id
);
return
retval
;
}
...
...
@@ -6341,13 +6341,13 @@ TrinaryOpNode::findUnaryOpNodesForAuxVarCreation(DataTree &static_datatree, diff
}
int
TrinaryOpNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
TrinaryOpNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
int
retval
=
arg1
->
findT
rend
Variable
(
lhs_symb_id
);
int
retval
=
arg1
->
findT
arget
Variable
(
lhs_symb_id
);
if
(
retval
<
0
)
retval
=
arg2
->
findT
rend
Variable
(
lhs_symb_id
);
retval
=
arg2
->
findT
arget
Variable
(
lhs_symb_id
);
if
(
retval
<
0
)
retval
=
arg3
->
findT
rend
Variable
(
lhs_symb_id
);
retval
=
arg3
->
findT
arget
Variable
(
lhs_symb_id
);
return
retval
;
}
...
...
@@ -6831,11 +6831,11 @@ AbstractExternalFunctionNode::findUnaryOpNodesForAuxVarCreation(DataTree &static
}
int
AbstractExternalFunctionNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
AbstractExternalFunctionNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
for
(
auto
argument
:
arguments
)
{
int
retval
=
argument
->
findT
rend
Variable
(
lhs_symb_id
);
int
retval
=
argument
->
findT
arget
Variable
(
lhs_symb_id
);
if
(
retval
>=
0
)
return
retval
;
}
...
...
@@ -8488,7 +8488,7 @@ VarExpectationNode::findUnaryOpNodesForAuxVarCreation(DataTree &static_datatree,
}
int
VarExpectationNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
VarExpectationNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
return
-
1
;
}
...
...
@@ -9033,7 +9033,7 @@ PacExpectationNode::findUnaryOpNodesForAuxVarCreation(DataTree &static_datatree,
}
int
PacExpectationNode
::
findT
rend
Variable
(
int
lhs_symb_id
)
const
PacExpectationNode
::
findT
arget
Variable
(
int
lhs_symb_id
)
const
{
return
-
1
;
}
...
...
src/ExprNode.hh
View file @
eb74d483
...
...
@@ -523,7 +523,7 @@ class ExprNode
//! Substitute diff operator
virtual
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
=
0
;
virtual
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
=
0
;
virtual
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
=
0
;
virtual
int
findT
arget
Variable
(
int
lhs_symb_id
)
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
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
=
0
;
...
...
@@ -643,7 +643,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -744,7 +744,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -869,7 +869,7 @@ public:
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
bool
createAuxVarForUnaryOpNode
()
const
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -1014,9 +1014,9 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
bool
findT
rend
VariableHelper1
(
int
lhs_symb_id
,
int
rhs_symb_id
)
const
;
int
findT
rend
VariableHelper
(
const
expr_t
arg1
,
const
expr_t
arg2
,
int
lhs_symb_id
)
const
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
bool
findT
arget
VariableHelper1
(
int
lhs_symb_id
,
int
rhs_symb_id
)
const
;
int
findT
arget
VariableHelper
(
const
expr_t
arg1
,
const
expr_t
arg2
,
int
lhs_symb_id
)
const
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -1136,7 +1136,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -1257,7 +1257,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -1462,7 +1462,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
@@ -1560,7 +1560,7 @@ public:
expr_t
substituteVarExpectation
(
const
map
<
string
,
expr_t
>
&
subst_table
)
const
override
;
void
findDiffNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
)
const
override
;
void
findUnaryOpNodesForAuxVarCreation
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
)
const
override
;
int
findT
rend
Variable
(
int
lhs_symb_id
)
const
override
;
int
findT
arget
Variable
(
int
lhs_symb_id
)
const
override
;
expr_t
substituteDiff
(
DataTree
&
static_datatree
,
diff_table_t
&
diff_table
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substituteUnaryOpNodes
(
DataTree
&
static_datatree
,
diff_table_t
&
nodes
,
subst_table_t
&
subst_table
,
vector
<
BinaryOpNode
*>
&
neweqs
)
const
override
;
expr_t
substitutePacExpectation
(
map
<
const
PacExpectationNode
*
,
const
BinaryOpNode
*>
&
subst_table
)
override
;
...
...
src/ParsingDriver.cc
View file @
eb74d483
...
...
@@ -1489,12 +1489,12 @@ ParsingDriver::trend_component_model()
error
(
"You must pass the eqtags option to the trend_component_model statement."
);
auto
eqtags
=
itvs
->
second
;
const
auto
itvs1
=
options_list
.
vector_str_options
.
find
(
"trend_component.t
rend
s"
);
const
auto
itvs1
=
options_list
.
vector_str_options
.
find
(
"trend_component.t
arget
s"
);
if
(
itvs1
==
options_list
.
vector_str_options
.
end
())
error
(
"You must pass the t
rend
s option to the trend_component_model statement."
);
auto
t
rend
s
=
itvs1
->
second
;
error
(
"You must pass the t
arget
s option to the trend_component_model statement."
);
auto
t
arget
s
=
itvs1
->
second
;
mod_file
->
trend_component_model_table
.
addTrendComponentModel
(
name
,
eqtags
,
t
rend
s
);
mod_file
->
trend_component_model_table
.
addTrendComponentModel
(
name
,
eqtags
,
t
arget
s
);
options_list
.
clear
();
}
...
...
src/SubModel.cc
View file @
eb74d483
...
...
@@ -29,7 +29,7 @@ TrendComponentModelTable::TrendComponentModelTable(SymbolTable &symbol_table_arg
void
TrendComponentModelTable
::
addTrendComponentModel
(
string
name_arg
,
vector
<
string
>
eqtags_arg
,
vector
<
string
>
t
rend
_eqtags_arg
)
vector
<
string
>
t
arget
_eqtags_arg
)
{
if
(
isExistingTrendComponentModelName
(
name_arg
))
{
...
...
@@ -37,17 +37,17 @@ TrendComponentModelTable::addTrendComponentModel(string name_arg,
exit
(
EXIT_FAILURE
);
}
eqtags
[
name_arg
]
=
move
(
eqtags_arg
);
t
rend_eqtags
[
name_arg
]
=
move
(
trend
_eqtags_arg
);
t
arget_eqtags
[
name_arg
]
=
move
(
target
_eqtags_arg
);
names
.
insert
(
move
(
name_arg
));
}
void
TrendComponentModelTable
::
setVals
(
map
<
string
,
vector
<
int
>>
eqnums_arg
,
map
<
string
,
vector
<
int
>>
t
rend
_eqnums_arg
,
TrendComponentModelTable
::
setVals
(
map
<
string
,
vector
<
int
>>
eqnums_arg
,
map
<
string
,
vector
<
int
>>
t
arget
_eqnums_arg
,
map
<
string
,
vector
<
int
>>
lhs_arg
,
map
<
string
,
vector
<
expr_t
>>
lhs_expr_t_arg
,
map
<
string
,
vector
<
bool
>>
nonstationary_arg
)
{
eqnums
=
move
(
eqnums_arg
);
t
rend_eqnums
=
move
(
trend
_eqnums_arg
);
t
arget_eqnums
=
move
(
target
_eqnums_arg
);
lhs
=
move
(
lhs_arg
);
lhs_expr_t
=
move
(
lhs_expr_t_arg
);
nonstationary
=
move
(
nonstationary_arg
);
...
...
@@ -56,23 +56,23 @@ TrendComponentModelTable::setVals(map<string, vector<int>> eqnums_arg, map<strin
{
vector
<
int
>
nontrend_vec
;
for
(
auto
eq
:
it
.
second
)
if
(
find
(
t
rend_eqnums
[
it
.
first
].
begin
(),
trend_eqnums
[
it
.
first
].
end
(),
eq
)
==
trend
_eqnums
[
it
.
first
].
end
())
if
(
find
(
t
arget_eqnums
[
it
.
first
].
begin
(),
target_eqnums
[
it
.
first
].
end
(),
eq
)
==
target
_eqnums
[
it
.
first
].
end
())
nontrend_vec
.
push_back
(
eq
);
nont
rend
_eqnums
[
it
.
first
]
=
nontrend_vec
;
nont
arget
_eqnums
[
it
.
first
]
=
nontrend_vec
;
}
for
(
const
auto
&
name
:
names
)
{
vector
<
int
>
nont
rend_lhs_vec
,
trend
_lhs_vec
;
vector
<
int
>
nont
arget_lhs_vec
,
target
_lhs_vec
;
vector
<
int
>
lhsv
=
getLhs
(
name
);
vector
<
int
>
eqnumsv
=
getEqNums
(
name
);
for
(
int
nontrend_it
:
getNonT
rend
EqNums
(
name
))
nont
rend
_lhs_vec
.
push_back
(
lhsv
.
at
(
distance
(
eqnumsv
.
begin
(),
find
(
eqnumsv
.
begin
(),
eqnumsv
.
end
(),
nontrend_it
))));
nont
rend_lhs
[
name
]
=
nontrend
_lhs_vec
;
for
(
int
nontrend_it
:
getNonT
arget
EqNums
(
name
))
nont
arget
_lhs_vec
.
push_back
(
lhsv
.
at
(
distance
(
eqnumsv
.
begin
(),
find
(
eqnumsv
.
begin
(),
eqnumsv
.
end
(),
nontrend_it
))));
nont
arget_lhs
[
name
]
=
nontarget
_lhs_vec
;
for
(
int
trend_it
:
getT
rend
EqNums
(
name
))
t
rend
_lhs_vec
.
push_back
(
lhsv
.
at
(
distance
(
eqnumsv
.
begin
(),
find
(
eqnumsv
.
begin
(),
eqnumsv
.
end
(),
trend_it
))));
t
rend_lhs
[
name
]
=
trend
_lhs_vec
;
for
(
int
trend_it
:
getT
arget
EqNums
(
name
))
t
arget
_lhs_vec
.
push_back
(
lhsv
.
at
(
distance
(
eqnumsv
.
begin
(),
find
(
eqnumsv
.
begin
(),
eqnumsv
.
end
(),
trend_it
))));
t
arget_lhs
[
name
]
=
target
_lhs_vec
;
}
}
...
...
@@ -83,9 +83,9 @@ TrendComponentModelTable::setRhs(map<string, vector<set<pair<int, int>>>> rhs_ar
}
void
TrendComponentModelTable
::
setT
rendVar
(
map
<
string
,
vector
<
int
>>
trend
_vars_arg
)
TrendComponentModelTable
::
setT
argetVar
(
map
<
string
,
vector
<
int
>>
target
_vars_arg
)
{
t
rend_vars
=
move
(
trend
_vars_arg
);
t
arget_vars
=
move
(
target
_vars_arg
);
}
void
...
...
@@ -160,14 +160,14 @@ vector<int>
TrendComponentModelTable
::
getNontrendLhs
(
const
string
&
name_arg
)
const
{
checkModelName
(
name_arg
);
return
nont
rend
_lhs
.
find
(
name_arg
)
->
second
;
return
nont
arget
_lhs
.
find
(
name_arg
)
->
second
;
}
vector
<
int
>
TrendComponentModelTable
::
getT
rend
Lhs
(
const
string
&
name_arg
)
const
TrendComponentModelTable
::
getT
arget
Lhs
(
const
string
&
name_arg
)
const
{
checkModelName
(
name_arg
);
return
t
rend
_lhs
.
find
(
name_arg
)
->
second
;
return
t
arget
_lhs
.
find
(
name_arg
)
->
second
;
}
vector
<
int
>
...
...
@@ -185,9 +185,9 @@ TrendComponentModelTable::getLhsExprT(const string &name_arg) const
}
map
<
string
,
vector
<
string
>>
TrendComponentModelTable
::
getT
rend
EqTags
()
const
TrendComponentModelTable
::
getT
arget
EqTags
()
const
{
return
t
rend
_eqtags
;
return
t
arget
_eqtags
;
}
map
<
string
,
vector
<
int
>>
...
...
@@ -197,29 +197,29 @@ TrendComponentModelTable::getEqNums() const
}
map
<
string
,
vector
<
int
>>
TrendComponentModelTable
::
getT
rend
EqNums
()
const
TrendComponentModelTable
::
getT
arget
EqNums
()
const
{
return
t
rend
_eqnums
;
return
t
arget
_eqnums
;
}
vector
<
int
>
TrendComponentModelTable
::
getT
rend
EqNums
(
const
string
&
name_arg
)
const
TrendComponentModelTable
::
getT
arget
EqNums
(
const
string
&
name_arg
)
const
{
checkModelName
(
name_arg
);
return
t
rend
_eqnums
.
find
(
name_arg
)
->
second
;
return
t
arget
_eqnums
.
find
(
name_arg
)
->
second
;
}
map
<
string
,
vector
<
int
>>
TrendComponentModelTable
::
getNonT
rend
EqNums
()
const
TrendComponentModelTable
::
getNonT
arget
EqNums
()
const
{
return
nont
rend
_eqnums
;
return
nont
arget
_eqnums
;
}
vector
<
int
>
TrendComponentModelTable
::
getNonT
rend
EqNums
(
const
string
&
name_arg
)
const
TrendComponentModelTable
::
getNonT
arget
EqNums
(
const
string
&
name_arg
)
const
{
checkModelName
(
name_arg
);
return
nont
rend
_eqnums
.
find
(
name_arg
)
->
second
;
return
nont
arget
_eqnums
.
find
(
name_arg
)
->
second
;
}
vector
<
int
>
...
...
@@ -285,14 +285,14 @@ TrendComponentModelTable::writeOutput(const string &basename, ostream &output) c
for
(
auto
it
:
eqnums
.
at
(
name
))
output
<<
it
+
1
<<
" "
;
output
<<
"];"
<<
endl
<<
"M_.trend_component."
<<
name
<<
".t
rend
_eqn = ["
;
for
(
auto
it
:
t
rend
_eqnums
.
at
(
name
))
<<
"M_.trend_component."
<<
name
<<
".t
arget
_eqn = ["
;
for
(
auto
it
:
t
arget
_eqnums
.
at
(
name
))
output
<<
it
+
1
<<
" "
;
output
<<
"];"
<<
endl
<<
"M_.trend_component."
<<
name
<<
".t
rend
s = ["
;
<<
"M_.trend_component."
<<
name
<<
".t
arget
s = ["
;
for
(
auto
it
:
eqnums
.
at
(
name
))
if
(
find
(
t
rend_eqnums
.
at
(
name
).
begin
(),
trend
_eqnums
.
at
(
name
).
end
(),
it
)
==
t
rend
_eqnums
.
at
(
name
).
end
())
if
(
find
(
t
arget_eqnums
.
at
(
name
).
begin
(),
target
_eqnums
.
at
(
name
).
end
(),
it
)
==
t
arget
_eqnums
.
at
(
name
).
end
())
output
<<
"false "
;
else
output
<<
"true "
;
...
...
@@ -331,29 +331,29 @@ TrendComponentModelTable::writeOutput(const string &basename, ostream &output) c
i
++
;
}
output
<<
"M_.trend_component."
<<
name
<<
".t
rend
_vars = ["
;
for
(
auto
it
:
t
rend
_vars
.
at
(
name
))
output
<<
"M_.trend_component."
<<
name
<<
".t
arget
_vars = ["
;
for
(
auto
it
:
t
arget
_vars
.
at
(
name
))
output
<<
(
it
>=
0
?
symbol_table
.
getTypeSpecificID
(
it
)
+
1
:
-
1
)
<<
" "
;
output
<<
"];"
<<
endl
;
vector
<
int
>
t
rend_lhs_vec
=
getTrend
Lhs
(
name
);
vector
<
int
>
nont
rend
_lhs_vec
=
getNontrendLhs
(
name
);
vector
<
int
>
t
arget_lhs_vec
=
getTarget
Lhs
(
name
);
vector
<
int
>
nont
arget
_lhs_vec
=
getNontrendLhs
(
name
);
ar_ec_output
<<
"if strcmp(model_name, '"
<<
name
<<
"')"
<<
endl
<<
" % AR"
<<
endl
<<
" ar = zeros("
<<
nont
rend_lhs_vec
.
size
()
<<
", "
<<
nontrend
_lhs_vec
.
size
()
<<
", "
<<
getMaxLag
(
name
)
<<
");"
<<
endl
;
<<
" ar = zeros("
<<
nont
arget_lhs_vec
.
size
()
<<
", "
<<
nontarget
_lhs_vec
.
size
()
<<
", "
<<
getMaxLag
(
name
)
<<
");"
<<
endl
;
for
(
const
auto
&
it
:
AR
.
at
(
name
))
{
int
eqn
,
lag
,
lhs_symb_id
;
tie
(
eqn
,
lag
,
lhs_symb_id
)
=
it
.
first
;
int
colidx
=
(
int
)
distance
(
nont
rend_lhs_vec
.
begin
(),
find
(
nontrend_lhs_vec
.
begin
(),
nontrend
_lhs_vec
.
end
(),
lhs_symb_id
));
int
colidx
=
(
int
)
distance
(
nont
arget_lhs_vec
.
begin
(),
find
(
nontarget_lhs_vec
.
begin
(),
nontarget
_lhs_vec
.
end
(),
lhs_symb_id
));
ar_ec_output
<<
" ar("
<<
eqn
+
1
<<
", "
<<
colidx
+
1
<<
", "
<<
lag
<<
") = "
;
it
.
second
->
writeOutput
(
ar_ec_output
,
ExprNodeOutputType
::
matlabDynamicModel
);
ar_ec_output
<<
";"
<<
endl
;
}
ar_ec_output
<<
endl
<<
" % EC"
<<
endl
<<
" ec = zeros("
<<
nont
rend_lhs_vec
.
size
()
<<
", "
<<
nontrend
_lhs_vec
.
size
()
<<
", 1);"
<<
endl
;
<<
" ec = zeros("
<<
nont
arget_lhs_vec
.
size
()
<<
", "
<<
nontarget
_lhs_vec
.
size
()
<<
", 1);"
<<
endl
;
for
(
const
auto
&
it
:
EC
.
at
(
name
))
{
int
eqn
,
lag
,
colidx
;
...
...
@@ -386,11 +386,11 @@ TrendComponentModelTable::writeJsonOutput(ostream &output) const
if
(
&
it
!=
&
eqtags
.
at
(
name
).
back
())
output
<<
", "
;
}
output
<<
"],
\"
t
rend
_eqtags
\"
: ["
;
for
(
const
auto
&
it
:
t
rend
_eqtags
.
at
(
name
))
output
<<
"],
\"
t
arget
_eqtags
\"
: ["
;
for
(
const
auto
&
it
:
t
arget
_eqtags
.
at
(
name
))
{
output
<<
"
\"
"
<<
it
<<
"
\"
"
;
if
(
&
it
!=
&
t
rend
_eqtags
.
at
(
name
).
back
())
if
(
&
it
!=
&
t
arget
_eqtags
.
at
(
name
).
back
())
output
<<
", "
;
}
output
<<
"]}"
;
...
...
src/SubModel.hh
View file @
eb74d483
...
...
@@ -11,7 +11,7 @@
* Dynare is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* GNU General Public License for more details.
SS
*
* You should have received a copy of the GNU General Public License
* along with Dynare. If not, see <http://www.gnu.org/licenses/>.
...
...
@@ -39,12 +39,12 @@ class TrendComponentModelTable
private:
SymbolTable
&
symbol_table
;
set
<
string
>
names
;
map
<
string
,
vector
<
string
>>
eqtags
,
t
rend
_eqtags
;
map
<
string
,
vector
<
int
>>
eqnums
,
t
rend_eqnums
,
nontrend_eqnums
,
max_lags
,
lhs
,
trend_lhs
,
nontrend
_lhs
,
orig_diff_var
;
map
<
string
,
vector
<
string
>>
eqtags
,
t
arget
_eqtags
;
map
<
string
,
vector
<
int
>>
eqnums
,
t
arget_eqnums
,
nontarget_eqnums
,
max_lags
,
lhs
,
target_lhs
,
nontarget
_lhs
,
orig_diff_var
;
map
<
string
,
vector
<
set
<
pair
<
int
,
int
>>>>
rhs
;
map
<
string
,
vector
<
bool
>>
diff
,
nonstationary
;
map
<
string
,
vector
<
expr_t
>>
lhs_expr_t
;
map
<
string
,
vector
<
int
>>
t
rend
_vars
;
map
<
string
,
vector
<
int
>>
t
arget
_vars
;
map
<
string
,
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>>
AR
;
// AR: name -> (eqn, lag, lhs_symb_id) -> expr_t
map
<
string
,
map
<
tuple
<
int
,
int
,
int
>
,
expr_t
>>
EC
;
// EC: name -> (eqn, lag, col) -> expr_t
public:
...
...
@@ -52,17 +52,17 @@ public:
//! Add a trend component model
void
addTrendComponentModel
(
string
name_arg
,
vector
<
string
>
eqtags_arg
,
vector
<
string
>
t
rend
_eqtags_arg
);
vector
<
string
>
t
arget
_eqtags_arg
);
inline
bool
isExistingTrendComponentModelName
(
const
string
&
name_arg
)
const
;
inline
bool
empty
()
const
;
map
<
string
,
vector
<
string
>>
getEqTags
()
const
;
vector
<
string
>
getEqTags
(
const
string
&
name_arg
)
const
;
map
<
string
,
vector
<
string
>>
getT
rend
EqTags
()
const
;
map
<
string
,
vector
<
string
>>
getT
arget
EqTags
()
const
;
map
<
string
,
vector
<
int
>>
getEqNums
()
const
;
map
<
string
,
vector
<
int
>>
getT
rend
EqNums
()
const
;
vector
<
int
>
getT
rend
EqNums
(
const
string
&
name_arg
)
const
;
map
<
string
,
vector
<
int
>>
getT
arget
EqNums
()
const
;
vector
<
int
>
getT
arget
EqNums
(
const
string
&
name_arg
)
const
;
vector
<
int
>
getEqNums
(
const
string
&
name_arg
)
const
;
vector
<
int
>
getMaxLags
(
const
string
&
name_arg
)
const
;
int
getMaxLag
(
const
string
&
name_arg
)
const
;
...
...
@@ -70,20 +70,20 @@ public:
vector
<
expr_t
>
getLhsExprT
(
const
string
&
name_arg
)
const
;
vector
<
bool
>
getDiff
(
const
string
&
name_arg
)
const
;
vector
<
int
>
getOrigDiffVar
(
const
string
&
name_arg
)
const
;
map
<
string
,
vector
<
int
>>
getNonT
rend
EqNums
()
const
;
vector
<
int
>
getNonT
rend
EqNums
(
const
string
&
name_arg
)
const
;
map
<
string
,
vector
<
int
>>
getNonT
arget
EqNums
()
const
;