Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dynare
preprocessor
Commits
b524e19c
Verified
Commit
b524e19c
authored
Nov 16, 2018
by
Sébastien Villemot
Browse files
Remove duplicate storage of temp terms for params derivs in ModelTree
parent
e9b5f239
Pipeline
#359
passed with stage
in 1 minute and 21 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
src/DynamicModel.cc
View file @
b524e19c
...
...
@@ -5388,7 +5388,8 @@ DynamicModel::writeParamsDerivativesFile(const string &basename, bool julia) con
deriv_node_temp_terms_t
tef_terms
;
writeModelLocalVariableTemporaryTerms
(
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
writeTemporaryTerms
(
params_derivs_temporary_terms
,
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
for
(
auto
it
:
{
make_pair
(
0
,
1
),
make_pair
(
1
,
1
),
make_pair
(
0
,
2
),
make_pair
(
1
,
2
),
make_pair
(
2
,
1
)
})
writeTemporaryTerms
(
params_derivs_temporary_terms
.
find
(
it
)
->
second
,
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
for
(
const
auto
&
residuals_params_derivative
:
params_derivatives
.
find
({
0
,
1
})
->
second
)
{
...
...
@@ -6541,9 +6542,11 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
deriv_node_temp_terms_t
tef_terms
;
writeJsonModelLocalVariables
(
model_local_vars_output
,
tef_terms
);
temporary_terms_t
temp_term
s_empty
;
temporary_terms_t
temp_term
_union
;
string
concat
=
"all"
;
writeJsonTemporaryTerms
(
params_derivs_temporary_terms
,
temp_terms_empty
,
model_output
,
tef_terms
,
concat
);
for
(
auto
it
:
{
make_pair
(
0
,
1
),
make_pair
(
1
,
1
),
make_pair
(
0
,
2
),
make_pair
(
1
,
2
),
make_pair
(
2
,
1
)
})
writeJsonTemporaryTerms
(
params_derivs_temporary_terms
.
find
(
it
)
->
second
,
temp_term_union
,
model_output
,
tef_terms
,
concat
);
jacobian_output
<<
"
\"
deriv_wrt_params
\"
: {"
<<
"
\"
neqs
\"
: "
<<
equations
.
size
()
<<
",
\"
nparamcols
\"
: "
<<
symbol_table
.
param_nbr
()
...
...
@@ -6571,7 +6574,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
jacobian_output
<<
",
\"
param
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param
))
<<
"
\"
"
;
jacobian_output
<<
",
\"
val
\"
:
\"
"
;
d1
->
writeJsonOutput
(
jacobian_output
,
params_derivs_temporary_terms
,
tef_terms
);
d1
->
writeJsonOutput
(
jacobian_output
,
temp_term_union
,
tef_terms
);
jacobian_output
<<
"
\"
}"
<<
endl
;
}
jacobian_output
<<
"]}"
;
...
...
@@ -6608,7 +6611,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param
))
<<
"
\"
"
;
hessian_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
hessian_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
hessian_output
,
temp_term_union
,
tef_terms
);
hessian_output
<<
"
\"
}"
<<
endl
;
}
hessian_output
<<
"]}"
;
...
...
@@ -6643,7 +6646,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param2
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param2
))
<<
"
\"
"
;
hessian1_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
hessian1_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
hessian1_output
,
temp_term_union
,
tef_terms
);
hessian1_output
<<
"
\"
}"
<<
endl
;
}
hessian1_output
<<
"]}"
;
...
...
@@ -6684,7 +6687,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param2
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param2
))
<<
"
\"
"
;
third_derivs_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
third_derivs_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
third_derivs_output
,
temp_term_union
,
tef_terms
);
third_derivs_output
<<
"
\"
}"
<<
endl
;
}
third_derivs_output
<<
"]}"
<<
endl
;
...
...
@@ -6726,7 +6729,7 @@ DynamicModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param
))
<<
"
\"
"
;
third_derivs1_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
third_derivs1_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
third_derivs1_output
,
temp_term_union
,
tef_terms
);
third_derivs1_output
<<
"
\"
}"
<<
endl
;
}
third_derivs1_output
<<
"]}"
<<
endl
;
...
...
src/ModelTree.cc
View file @
b524e19c
...
...
@@ -75,9 +75,7 @@ ModelTree::copyHelper(const ModelTree &m)
for
(
const
auto
&
it
:
m
.
temporary_terms_idxs
)
temporary_terms_idxs
[
f
(
it
.
first
)]
=
it
.
second
;
for
(
const
auto
&
it
:
m
.
params_derivs_temporary_terms
)
params_derivs_temporary_terms
.
insert
(
f
(
it
));
for
(
const
auto
&
it
:
m
.
params_derivs_temporary_terms_split
)
params_derivs_temporary_terms_split
[
it
.
first
]
=
convert_temporary_terms_t
(
it
.
second
);
params_derivs_temporary_terms
[
it
.
first
]
=
convert_temporary_terms_t
(
it
.
second
);
for
(
const
auto
&
it
:
m
.
params_derivs_temporary_terms_idxs
)
params_derivs_temporary_terms_idxs
[
f
(
it
.
first
)]
=
it
.
second
;
...
...
@@ -126,7 +124,6 @@ ModelTree::operator=(const ModelTree &m)
temporary_terms_mlv
.
clear
();
temporary_terms_derivatives
.
clear
();
params_derivs_temporary_terms
.
clear
();
params_derivs_temporary_terms_split
.
clear
();
params_derivs_temporary_terms_idxs
.
clear
();
trend_symbols_map
.
clear
();
...
...
@@ -2141,13 +2138,15 @@ void
ModelTree
::
computeParamsDerivativesTemporaryTerms
()
{
map
<
expr_t
,
pair
<
int
,
NodeTreeReference
>>
reference_count
;
params_derivs_temporary_terms
.
clear
();
map
<
NodeTreeReference
,
temporary_terms_t
>
temp_terms_map
;
temp_terms_map
[
NodeTreeReference
::
residualsParamsDeriv
]
=
params_derivs_temporary_terms_split
[{
0
,
1
}];
temp_terms_map
[
NodeTreeReference
::
jacobianParamsDeriv
]
=
params_derivs_temporary_terms_split
[{
1
,
1
}];
temp_terms_map
[
NodeTreeReference
::
residualsParamsSecondDeriv
]
=
params_derivs_temporary_terms_split
[{
0
,
2
}];
temp_terms_map
[
NodeTreeReference
::
jacobianParamsSecondDeriv
]
=
params_derivs_temporary_terms_split
[{
1
,
2
}];
temp_terms_map
[
NodeTreeReference
::
hessianParamsDeriv
]
=
params_derivs_temporary_terms_split
[{
2
,
1
}];
temp_terms_map
[
NodeTreeReference
::
residualsParamsDeriv
]
=
params_derivs_temporary_terms
[{
0
,
1
}];
temp_terms_map
[
NodeTreeReference
::
jacobianParamsDeriv
]
=
params_derivs_temporary_terms
[{
1
,
1
}];
temp_terms_map
[
NodeTreeReference
::
residualsParamsSecondDeriv
]
=
params_derivs_temporary_terms
[{
0
,
2
}];
temp_terms_map
[
NodeTreeReference
::
jacobianParamsSecondDeriv
]
=
params_derivs_temporary_terms
[{
1
,
2
}];
temp_terms_map
[
NodeTreeReference
::
hessianParamsDeriv
]
=
params_derivs_temporary_terms
[{
2
,
1
}];
/* The temp terms should be constructed in the same order as the for loops in
{Static,Dynamic}Model::write{Json,}ParamsDerivativesFile() */
for
(
const
auto
&
residuals_params_derivative
:
params_derivatives
[{
0
,
1
}])
residuals_params_derivative
.
second
->
computeTemporaryTerms
(
reference_count
,
...
...
@@ -2174,33 +2173,29 @@ ModelTree::computeParamsDerivativesTemporaryTerms()
temp_terms_map
,
true
,
NodeTreeReference
::
hessianParamsDeriv
);
for
(
map
<
NodeTreeReference
,
temporary_terms_t
>::
const_iterator
it
=
temp_terms_map
.
begin
();
it
!=
temp_terms_map
.
end
();
it
++
)
params_derivs_temporary_terms
.
insert
(
it
->
second
.
begin
(),
it
->
second
.
end
());
params_derivs_temporary_terms_split
[{
0
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
residualsParamsDeriv
];
params_derivs_temporary_terms_split
[{
1
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
jacobianParamsDeriv
];
params_derivs_temporary_terms_split
[{
0
,
2
}]
=
temp_terms_map
[
NodeTreeReference
::
residualsParamsSecondDeriv
];
params_derivs_temporary_terms_split
[{
1
,
2
}]
=
temp_terms_map
[
NodeTreeReference
::
jacobianParamsSecondDeriv
];
params_derivs_temporary_terms_split
[{
2
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
hessianParamsDeriv
];
params_derivs_temporary_terms
[{
0
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
residualsParamsDeriv
];
params_derivs_temporary_terms
[{
1
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
jacobianParamsDeriv
];
params_derivs_temporary_terms
[{
0
,
2
}]
=
temp_terms_map
[
NodeTreeReference
::
residualsParamsSecondDeriv
];
params_derivs_temporary_terms
[{
1
,
2
}]
=
temp_terms_map
[
NodeTreeReference
::
jacobianParamsSecondDeriv
];
params_derivs_temporary_terms
[{
2
,
1
}]
=
temp_terms_map
[
NodeTreeReference
::
hessianParamsDeriv
];
int
idx
=
0
;
for
(
auto
&
it
:
temporary_terms_mlv
)
params_derivs_temporary_terms_idxs
[
it
.
first
]
=
idx
++
;
for
(
auto
tt
:
params_derivs_temporary_terms
_split
[{
0
,
1
}])
for
(
auto
tt
:
params_derivs_temporary_terms
[{
0
,
1
}])
params_derivs_temporary_terms_idxs
[
tt
]
=
idx
++
;
for
(
auto
tt
:
params_derivs_temporary_terms
_split
[{
1
,
1
}])
for
(
auto
tt
:
params_derivs_temporary_terms
[{
1
,
1
}])
params_derivs_temporary_terms_idxs
[
tt
]
=
idx
++
;
for
(
auto
tt
:
params_derivs_temporary_terms
_split
[{
0
,
2
}])
for
(
auto
tt
:
params_derivs_temporary_terms
[{
0
,
2
}])
params_derivs_temporary_terms_idxs
[
tt
]
=
idx
++
;
for
(
auto
tt
:
params_derivs_temporary_terms
_split
[{
1
,
2
}])
for
(
auto
tt
:
params_derivs_temporary_terms
[{
1
,
2
}])
params_derivs_temporary_terms_idxs
[
tt
]
=
idx
++
;
for
(
auto
tt
:
params_derivs_temporary_terms
_split
[{
2
,
1
}])
for
(
auto
tt
:
params_derivs_temporary_terms
[{
2
,
1
}])
params_derivs_temporary_terms_idxs
[
tt
]
=
idx
++
;
}
...
...
src/ModelTree.hh
View file @
b524e19c
...
...
@@ -120,15 +120,9 @@ protected:
temporary_terms_idxs_t
temporary_terms_idxs
;
//! Temporary terms for the file containing parameters derivatives
/*! However does not contain the TT related to model local variables.
TODO: this variable should probably be removed, it is essentially the
same information as in params_derivs_temporary_terms_split */
temporary_terms_t
params_derivs_temporary_terms
;
//! Temporary terms for parameter derivatives, under a disaggregated form
/*! The pair of integers is to be interpreted as in param_derivatives */
map
<
pair
<
int
,
int
>
,
temporary_terms_t
>
params_derivs_temporary_terms
_split
;
map
<
pair
<
int
,
int
>
,
temporary_terms_t
>
params_derivs_temporary_terms
;
temporary_terms_idxs_t
params_derivs_temporary_terms_idxs
;
...
...
src/StaticModel.cc
View file @
b524e19c
...
...
@@ -2653,7 +2653,8 @@ StaticModel::writeParamsDerivativesFile(const string &basename, bool julia) cons
deriv_node_temp_terms_t
tef_terms
;
writeModelLocalVariableTemporaryTerms
(
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
writeTemporaryTerms
(
params_derivs_temporary_terms
,
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
for
(
auto
it
:
{
make_pair
(
0
,
1
),
make_pair
(
1
,
1
),
make_pair
(
0
,
2
),
make_pair
(
1
,
2
),
make_pair
(
2
,
1
)
})
writeTemporaryTerms
(
params_derivs_temporary_terms
.
find
(
it
)
->
second
,
temp_term_union
,
params_derivs_temporary_terms_idxs
,
tt_output
,
output_type
,
tef_terms
);
for
(
const
auto
&
residuals_params_derivative
:
params_derivatives
.
find
({
0
,
1
})
->
second
)
{
...
...
@@ -3065,9 +3066,11 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
deriv_node_temp_terms_t
tef_terms
;
writeJsonModelLocalVariables
(
model_local_vars_output
,
tef_terms
);
temporary_terms_t
temp_term
s_empty
;
temporary_terms_t
temp_term
_union
;
string
concat
=
"all"
;
writeJsonTemporaryTerms
(
params_derivs_temporary_terms
,
temp_terms_empty
,
model_output
,
tef_terms
,
concat
);
for
(
auto
it
:
{
make_pair
(
0
,
1
),
make_pair
(
1
,
1
),
make_pair
(
0
,
2
),
make_pair
(
1
,
2
),
make_pair
(
2
,
1
)
})
writeJsonTemporaryTerms
(
params_derivs_temporary_terms
.
find
(
it
)
->
second
,
temp_term_union
,
model_output
,
tef_terms
,
concat
);
jacobian_output
<<
"
\"
deriv_wrt_params
\"
: {"
<<
"
\"
neqs
\"
: "
<<
equations
.
size
()
<<
",
\"
nparamcols
\"
: "
<<
symbol_table
.
param_nbr
()
...
...
@@ -3095,7 +3098,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
jacobian_output
<<
",
\"
param
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param
))
<<
"
\"
"
;
jacobian_output
<<
",
\"
val
\"
:
\"
"
;
d1
->
writeJsonOutput
(
jacobian_output
,
params_derivs_temporary_terms
,
tef_terms
);
d1
->
writeJsonOutput
(
jacobian_output
,
temp_term_union
,
tef_terms
);
jacobian_output
<<
"
\"
}"
<<
endl
;
}
jacobian_output
<<
"]}"
;
...
...
@@ -3130,7 +3133,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
hessian_output
<<
",
\"
var_col
\"
: "
<<
var_col
<<
",
\"
param_col
\"
: "
<<
param_col
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
hessian_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
hessian_output
,
temp_term_union
,
tef_terms
);
hessian_output
<<
"
\"
}"
<<
endl
;
}
hessian_output
<<
"]}"
;
...
...
@@ -3166,7 +3169,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param2
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param2
))
<<
"
\"
"
;
hessian1_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
hessian1_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
hessian1_output
,
temp_term_union
,
tef_terms
);
hessian1_output
<<
"
\"
}"
<<
endl
;
}
hessian1_output
<<
"]}"
;
...
...
@@ -3205,7 +3208,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param2
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param2
))
<<
"
\"
"
;
third_derivs_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
third_derivs_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
third_derivs_output
,
temp_term_union
,
tef_terms
);
third_derivs_output
<<
"
\"
}"
<<
endl
;
}
third_derivs_output
<<
"]}"
<<
endl
;
...
...
@@ -3245,7 +3248,7 @@ StaticModel::writeJsonParamsDerivativesFile(ostream &output, bool writeDetails)
<<
",
\"
param1
\"
:
\"
"
<<
symbol_table
.
getName
(
getSymbIDByDerivID
(
param
))
<<
"
\"
"
;
third_derivs1_output
<<
",
\"
val
\"
:
\"
"
;
d2
->
writeJsonOutput
(
third_derivs1_output
,
params_derivs_temporary_terms
,
tef_terms
);
d2
->
writeJsonOutput
(
third_derivs1_output
,
temp_term_union
,
tef_terms
);
third_derivs1_output
<<
"
\"
}"
<<
endl
;
}
third_derivs1_output
<<
"]}"
<<
endl
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment