C++11: convert NodeTreeReference to a class enum
parent
4ad0e500d4
commit
edddc9d8ca
|
@ -254,17 +254,17 @@ enum PriorDistributions
|
||||||
eWeibull = 8
|
eWeibull = 8
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NodeTreeReference
|
enum class NodeTreeReference
|
||||||
{
|
{
|
||||||
eResiduals = 0,
|
residuals,
|
||||||
eFirstDeriv = 1,
|
firstDeriv,
|
||||||
eSecondDeriv = 2,
|
secondDeriv,
|
||||||
eThirdDeriv = 3,
|
thirdDeriv,
|
||||||
eResidualsParamsDeriv = 4,
|
residualsParamsDeriv,
|
||||||
eJacobianParamsDeriv = 5,
|
jacobianParamsDeriv,
|
||||||
eResidualsParamsSecondDeriv = 6,
|
residualsParamsSecondDeriv,
|
||||||
eJacobianParamsSecondDeriv = 7,
|
jacobianParamsSecondDeriv,
|
||||||
eHessianParamsDeriv = 8
|
hessianParamsDeriv
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! Lists elements of the NodeTreeReference enum that come “before” the argument.
|
/*! Lists elements of the NodeTreeReference enum that come “before” the argument.
|
||||||
|
@ -275,7 +275,7 @@ nodeTreeReferencesBefore(NodeTreeReference tr)
|
||||||
vector<NodeTreeReference> v;
|
vector<NodeTreeReference> v;
|
||||||
|
|
||||||
// Should be same order as the one appearing in ModelTree::computeTemporaryTerms()
|
// Should be same order as the one appearing in ModelTree::computeTemporaryTerms()
|
||||||
for (auto tr2 : { eResiduals, eFirstDeriv, eSecondDeriv, eThirdDeriv })
|
for (auto tr2 : { NodeTreeReference::residuals, NodeTreeReference::firstDeriv, NodeTreeReference::secondDeriv, NodeTreeReference::thirdDeriv })
|
||||||
if (tr == tr2)
|
if (tr == tr2)
|
||||||
return v;
|
return v;
|
||||||
else
|
else
|
||||||
|
@ -283,8 +283,8 @@ nodeTreeReferencesBefore(NodeTreeReference tr)
|
||||||
v.clear();
|
v.clear();
|
||||||
|
|
||||||
// Should be same order as the one appearing in ModelTree::computeParamsDerivativesTemporaryTerms()
|
// Should be same order as the one appearing in ModelTree::computeParamsDerivativesTemporaryTerms()
|
||||||
for (auto tr2 : { eResidualsParamsDeriv, eJacobianParamsDeriv, eResidualsParamsSecondDeriv,
|
for (auto tr2 : { NodeTreeReference::residualsParamsDeriv, NodeTreeReference::jacobianParamsDeriv, NodeTreeReference::residualsParamsSecondDeriv,
|
||||||
eJacobianParamsSecondDeriv, eHessianParamsDeriv})
|
NodeTreeReference::jacobianParamsSecondDeriv, NodeTreeReference::hessianParamsDeriv})
|
||||||
if (tr == tr2)
|
if (tr == tr2)
|
||||||
return v;
|
return v;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1126,43 +1126,43 @@ ModelTree::computeTemporaryTerms(bool is_matlab)
|
||||||
{
|
{
|
||||||
VariableNode *v = AddVariable(used_local_var);
|
VariableNode *v = AddVariable(used_local_var);
|
||||||
temporary_terms_mlv[v] = local_variables_table.find(used_local_var)->second;
|
temporary_terms_mlv[v] = local_variables_table.find(used_local_var)->second;
|
||||||
reference_count[v] = { ExprNode::min_cost(is_matlab)+1, eResiduals };
|
reference_count[v] = { ExprNode::min_cost(is_matlab)+1, NodeTreeReference::residuals };
|
||||||
}
|
}
|
||||||
|
|
||||||
map<NodeTreeReference, temporary_terms_t> temp_terms_map;
|
map<NodeTreeReference, temporary_terms_t> temp_terms_map;
|
||||||
temp_terms_map[eResiduals] = temporary_terms_res;
|
temp_terms_map[NodeTreeReference::residuals] = temporary_terms_res;
|
||||||
temp_terms_map[eFirstDeriv] = temporary_terms_g1;
|
temp_terms_map[NodeTreeReference::firstDeriv] = temporary_terms_g1;
|
||||||
temp_terms_map[eSecondDeriv] = temporary_terms_g2;
|
temp_terms_map[NodeTreeReference::secondDeriv] = temporary_terms_g2;
|
||||||
temp_terms_map[eThirdDeriv] = temporary_terms_g3;
|
temp_terms_map[NodeTreeReference::thirdDeriv] = temporary_terms_g3;
|
||||||
|
|
||||||
for (auto & equation : equations)
|
for (auto & equation : equations)
|
||||||
equation->computeTemporaryTerms(reference_count,
|
equation->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
is_matlab, eResiduals);
|
is_matlab, NodeTreeReference::residuals);
|
||||||
|
|
||||||
for (auto & first_derivative : first_derivatives)
|
for (auto & first_derivative : first_derivatives)
|
||||||
first_derivative.second->computeTemporaryTerms(reference_count,
|
first_derivative.second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
is_matlab, eFirstDeriv);
|
is_matlab, NodeTreeReference::firstDeriv);
|
||||||
|
|
||||||
for (auto & second_derivative : second_derivatives)
|
for (auto & second_derivative : second_derivatives)
|
||||||
second_derivative.second->computeTemporaryTerms(reference_count,
|
second_derivative.second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
is_matlab, eSecondDeriv);
|
is_matlab, NodeTreeReference::secondDeriv);
|
||||||
|
|
||||||
for (auto & third_derivative : third_derivatives)
|
for (auto & third_derivative : third_derivatives)
|
||||||
third_derivative.second->computeTemporaryTerms(reference_count,
|
third_derivative.second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
is_matlab, eThirdDeriv);
|
is_matlab, NodeTreeReference::thirdDeriv);
|
||||||
|
|
||||||
for (map<NodeTreeReference, temporary_terms_t>::const_iterator it = temp_terms_map.begin();
|
for (map<NodeTreeReference, temporary_terms_t>::const_iterator it = temp_terms_map.begin();
|
||||||
it != temp_terms_map.end(); it++)
|
it != temp_terms_map.end(); it++)
|
||||||
temporary_terms.insert(it->second.begin(), it->second.end());
|
temporary_terms.insert(it->second.begin(), it->second.end());
|
||||||
|
|
||||||
temporary_terms_res = temp_terms_map[eResiduals];
|
temporary_terms_res = temp_terms_map[NodeTreeReference::residuals];
|
||||||
temporary_terms_g1 = temp_terms_map[eFirstDeriv];
|
temporary_terms_g1 = temp_terms_map[NodeTreeReference::firstDeriv];
|
||||||
temporary_terms_g2 = temp_terms_map[eSecondDeriv];
|
temporary_terms_g2 = temp_terms_map[NodeTreeReference::secondDeriv];
|
||||||
temporary_terms_g3 = temp_terms_map[eThirdDeriv];
|
temporary_terms_g3 = temp_terms_map[NodeTreeReference::thirdDeriv];
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
for (map<expr_t, expr_t, ExprNodeLess>::const_iterator it = temporary_terms_mlv.begin();
|
for (map<expr_t, expr_t, ExprNodeLess>::const_iterator it = temporary_terms_mlv.begin();
|
||||||
|
@ -1897,49 +1897,49 @@ ModelTree::computeParamsDerivativesTemporaryTerms()
|
||||||
map<expr_t, pair<int, NodeTreeReference >> reference_count;
|
map<expr_t, pair<int, NodeTreeReference >> reference_count;
|
||||||
params_derivs_temporary_terms.clear();
|
params_derivs_temporary_terms.clear();
|
||||||
map<NodeTreeReference, temporary_terms_t> temp_terms_map;
|
map<NodeTreeReference, temporary_terms_t> temp_terms_map;
|
||||||
temp_terms_map[eResidualsParamsDeriv] = params_derivs_temporary_terms_res;
|
temp_terms_map[NodeTreeReference::residualsParamsDeriv] = params_derivs_temporary_terms_res;
|
||||||
temp_terms_map[eJacobianParamsDeriv] = params_derivs_temporary_terms_g1;
|
temp_terms_map[NodeTreeReference::jacobianParamsDeriv] = params_derivs_temporary_terms_g1;
|
||||||
temp_terms_map[eResidualsParamsSecondDeriv] = params_derivs_temporary_terms_res2;
|
temp_terms_map[NodeTreeReference::residualsParamsSecondDeriv] = params_derivs_temporary_terms_res2;
|
||||||
temp_terms_map[eJacobianParamsSecondDeriv] = params_derivs_temporary_terms_g12;
|
temp_terms_map[NodeTreeReference::jacobianParamsSecondDeriv] = params_derivs_temporary_terms_g12;
|
||||||
temp_terms_map[eHessianParamsDeriv] = params_derivs_temporary_terms_g2;
|
temp_terms_map[NodeTreeReference::hessianParamsDeriv] = params_derivs_temporary_terms_g2;
|
||||||
|
|
||||||
for (auto & residuals_params_derivative : residuals_params_derivatives)
|
for (auto & residuals_params_derivative : residuals_params_derivatives)
|
||||||
residuals_params_derivative.second->computeTemporaryTerms(reference_count,
|
residuals_params_derivative.second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
true, eResidualsParamsDeriv);
|
true, NodeTreeReference::residualsParamsDeriv);
|
||||||
|
|
||||||
for (auto & jacobian_params_derivative : jacobian_params_derivatives)
|
for (auto & jacobian_params_derivative : jacobian_params_derivatives)
|
||||||
jacobian_params_derivative.second->computeTemporaryTerms(reference_count,
|
jacobian_params_derivative.second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
true, eJacobianParamsDeriv);
|
true, NodeTreeReference::jacobianParamsDeriv);
|
||||||
|
|
||||||
for (second_derivatives_t::const_iterator it = residuals_params_second_derivatives.begin();
|
for (second_derivatives_t::const_iterator it = residuals_params_second_derivatives.begin();
|
||||||
it != residuals_params_second_derivatives.end(); ++it)
|
it != residuals_params_second_derivatives.end(); ++it)
|
||||||
it->second->computeTemporaryTerms(reference_count,
|
it->second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
true, eResidualsParamsSecondDeriv);
|
true, NodeTreeReference::residualsParamsSecondDeriv);
|
||||||
|
|
||||||
for (third_derivatives_t::const_iterator it = jacobian_params_second_derivatives.begin();
|
for (third_derivatives_t::const_iterator it = jacobian_params_second_derivatives.begin();
|
||||||
it != jacobian_params_second_derivatives.end(); ++it)
|
it != jacobian_params_second_derivatives.end(); ++it)
|
||||||
it->second->computeTemporaryTerms(reference_count,
|
it->second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
true, eJacobianParamsSecondDeriv);
|
true, NodeTreeReference::jacobianParamsSecondDeriv);
|
||||||
|
|
||||||
for (third_derivatives_t::const_iterator it = hessian_params_derivatives.begin();
|
for (third_derivatives_t::const_iterator it = hessian_params_derivatives.begin();
|
||||||
it != hessian_params_derivatives.end(); ++it)
|
it != hessian_params_derivatives.end(); ++it)
|
||||||
it->second->computeTemporaryTerms(reference_count,
|
it->second->computeTemporaryTerms(reference_count,
|
||||||
temp_terms_map,
|
temp_terms_map,
|
||||||
true, eHessianParamsDeriv);
|
true, NodeTreeReference::hessianParamsDeriv);
|
||||||
|
|
||||||
for (map<NodeTreeReference, temporary_terms_t>::const_iterator it = temp_terms_map.begin();
|
for (map<NodeTreeReference, temporary_terms_t>::const_iterator it = temp_terms_map.begin();
|
||||||
it != temp_terms_map.end(); it++)
|
it != temp_terms_map.end(); it++)
|
||||||
params_derivs_temporary_terms.insert(it->second.begin(), it->second.end());
|
params_derivs_temporary_terms.insert(it->second.begin(), it->second.end());
|
||||||
|
|
||||||
params_derivs_temporary_terms_res = temp_terms_map[eResidualsParamsDeriv];
|
params_derivs_temporary_terms_res = temp_terms_map[NodeTreeReference::residualsParamsDeriv];
|
||||||
params_derivs_temporary_terms_g1 = temp_terms_map[eJacobianParamsDeriv];
|
params_derivs_temporary_terms_g1 = temp_terms_map[NodeTreeReference::jacobianParamsDeriv];
|
||||||
params_derivs_temporary_terms_res2 = temp_terms_map[eResidualsParamsSecondDeriv];
|
params_derivs_temporary_terms_res2 = temp_terms_map[NodeTreeReference::residualsParamsSecondDeriv];
|
||||||
params_derivs_temporary_terms_g12 = temp_terms_map[eJacobianParamsSecondDeriv];
|
params_derivs_temporary_terms_g12 = temp_terms_map[NodeTreeReference::jacobianParamsSecondDeriv];
|
||||||
params_derivs_temporary_terms_g2 = temp_terms_map[eHessianParamsDeriv];
|
params_derivs_temporary_terms_g2 = temp_terms_map[NodeTreeReference::hessianParamsDeriv];
|
||||||
|
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
for (auto tt : params_derivs_temporary_terms_res)
|
for (auto tt : params_derivs_temporary_terms_res)
|
||||||
|
|
Loading…
Reference in New Issue