Remove duplicate storage of temp terms for params derivs in ModelTree
parent
e9b5f239df
commit
b524e19cde
|
@ -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_terms_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;
|
||||
|
|
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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_terms_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;
|
||||
|
|
Loading…
Reference in New Issue