Fix assertions that check the length of temporary terms vectors

Model local variables had been omitted in the length computations.
issue#70
Sébastien Villemot 2018-05-24 16:55:17 +02:00
parent 41d7496b46
commit a9bfd1223b
2 changed files with 18 additions and 18 deletions

View File

@ -2530,7 +2530,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
init_output << "residual = zeros(" << nrows << ", 1);";
writeDynamicModelHelper(dynamic_basename + "_resid", "residual",
dynamic_basename + "_resid_tt",
temporary_terms_res_idxs.size(),
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size(),
"", init_output, end_output,
model_output, model_tt_output);
@ -2539,7 +2539,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
init_output << "g1 = zeros(" << nrows << ", " << dynJacobianColsNbr << ");";
writeDynamicModelHelper(dynamic_basename + "_g1", "g1",
dynamic_basename + "_g1_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size(),
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size(),
dynamic_basename + "_resid_tt",
init_output, end_output,
jacobian_output, jacobian_tt_output);
@ -2556,7 +2556,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
init_output << "g2 = sparse([],[],[]," << nrows << "," << hessianColsNbr << ");";
writeDynamicModelHelper(dynamic_basename + "_g2", "g2",
dynamic_basename + "_g2_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
+ temporary_terms_g2_idxs.size(),
dynamic_basename + "_g1_tt",
init_output, end_output,
@ -2577,7 +2577,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
init_output << "g3 = sparse([],[],[]," << nrows << "," << ncols << ");";
writeDynamicModelHelper(dynamic_basename + "_g3", "g3",
dynamic_basename + "_g3_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
+ temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size(),
dynamic_basename + "_g2_tt",
init_output, end_output,
@ -2690,7 +2690,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
// Write the number of temporary terms
output << "tmp_nbr = zeros(Int,4)" << endl
<< "tmp_nbr[1] = " << temporary_terms_res_idxs.size() << "# Number of temporary terms for the residuals" << endl
<< "tmp_nbr[1] = " << temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() << "# Number of temporary terms for the residuals" << endl
<< "tmp_nbr[2] = " << temporary_terms_g1_idxs.size() << "# Number of temporary terms for g1 (jacobian)" << endl
<< "tmp_nbr[3] = " << temporary_terms_g2_idxs.size() << "# Number of temporary terms for g2 (hessian)" << endl
<< "tmp_nbr[4] = " << temporary_terms_g3_idxs.size() << "# Number of temporary terms for g3 (third order derivates)" << endl << endl;
@ -2707,7 +2707,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
output << "function dynamicResid!(T::Vector{Float64}, residual::Vector{Float64}," << endl
<< " y::Vector{Float64}, x::Matrix{Float64}, "
<< "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int, T_flag::Bool)" << endl
<< " @assert length(T) >= " << temporary_terms_res_idxs.size() << endl
<< " @assert length(T) >= " << temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() << endl
<< " @assert length(residual) == " << nrows << endl
<< " @assert length(y)+size(x, 2) == " << dynJacobianColsNbr << endl
<< " @assert length(params) == " << symbol_table.param_nbr() << endl
@ -2732,7 +2732,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
<< " y::Vector{Float64}, x::Matrix{Float64}, "
<< "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int, T_flag::Bool)" << endl
<< " @assert length(T) >= "
<< temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() << endl
<< temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() << endl
<< " @assert size(g1) == (" << nrows << ", " << dynJacobianColsNbr << ")" << endl
<< " @assert length(y)+size(x, 2) == " << dynJacobianColsNbr << endl
<< " @assert length(params) == " << symbol_table.param_nbr() << endl
@ -2757,7 +2757,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
output << "function dynamicG2!(T::Vector{Float64}, g2::Matrix{Float64}," << endl
<< " y::Vector{Float64}, x::Matrix{Float64}, "
<< "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int, T_flag::Bool)" << endl
<< " @assert length(T) >= " << temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() << endl
<< " @assert length(T) >= " << temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() << endl
<< " @assert size(g2) == (" << nrows << ", " << hessianColsNbr << ")" << endl
<< " @assert length(y)+size(x, 2) == " << dynJacobianColsNbr << endl
<< " @assert length(params) == " << symbol_table.param_nbr() << endl
@ -2784,7 +2784,7 @@ DynamicModel::writeDynamicModel(const string &dynamic_basename, ostream &Dynamic
<< " y::Vector{Float64}, x::Matrix{Float64}, "
<< "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int, T_flag::Bool)" << endl
<< " @assert length(T) >= "
<< temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size() << endl
<< temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size() << endl
<< " @assert size(g3) == (" << nrows << ", " << ncols << ")" << endl
<< " @assert length(y)+size(x, 2) == " << dynJacobianColsNbr << endl
<< " @assert length(params) == " << symbol_table.param_nbr() << endl

View File

@ -1549,7 +1549,7 @@ StaticModel::writeStaticModel(const string &basename,
<< "end";
writeStaticModelHelper(static_name + "_resid", "residual",
static_name + "_resid_tt",
temporary_terms_res_idxs.size(),
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size(),
"", init_output, end_output,
model_output, model_tt_output);
@ -1563,7 +1563,7 @@ StaticModel::writeStaticModel(const string &basename,
<< "end";
writeStaticModelHelper(static_name + "_g1", "g1",
static_name + "_g1_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size(),
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size(),
static_name + "_resid_tt",
init_output, end_output,
jacobian_output, jacobian_tt_output);
@ -1582,7 +1582,7 @@ StaticModel::writeStaticModel(const string &basename,
init_output << "g2 = sparse([],[],[]," << equations.size() << "," << g2ncols << ");";
writeStaticModelHelper(static_name + "_g2", "g2",
static_name + "_g2_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
+ temporary_terms_g2_idxs.size(),
static_name + "_g1_tt",
init_output, end_output,
@ -1603,7 +1603,7 @@ StaticModel::writeStaticModel(const string &basename,
init_output << "g3 = sparse([],[],[]," << nrows << "," << ncols << ");";
writeStaticModelHelper(static_name + "_g3", "g3",
static_name + "_g3_tt",
temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size()
+ temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size(),
static_name + "_g2_tt",
init_output, end_output,
@ -1707,7 +1707,7 @@ StaticModel::writeStaticModel(const string &basename,
// Write the number of temporary terms
output << "tmp_nbr = zeros(Int,4)" << endl
<< "tmp_nbr[1] = " << temporary_terms_res_idxs.size() << "# Number of temporary terms for the residuals" << endl
<< "tmp_nbr[1] = " << temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() << "# Number of temporary terms for the residuals" << endl
<< "tmp_nbr[2] = " << temporary_terms_g1_idxs.size() << "# Number of temporary terms for g1 (jacobian)" << endl
<< "tmp_nbr[3] = " << temporary_terms_g2_idxs.size() << "# Number of temporary terms for g2 (hessian)" << endl
<< "tmp_nbr[4] = " << temporary_terms_g3_idxs.size() << "# Number of temporary terms for g3 (third order derivates)" << endl << endl;
@ -1715,7 +1715,7 @@ StaticModel::writeStaticModel(const string &basename,
// staticResidTT!
output << "function staticResidTT!(T::Vector{Float64}," << endl
<< " y::Vector{Float64}, x::Vector{Float64}, params::Vector{Float64})" << endl
<< " @assert length(T) >= " << temporary_terms_res_idxs.size() << endl
<< " @assert length(T) >= " << temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() << endl
<< model_tt_output.str()
<< " return nothing" << endl
<< "end" << endl << endl;
@ -1751,7 +1751,7 @@ StaticModel::writeStaticModel(const string &basename,
output << "function staticG1!(T::Vector{Float64}, g1::Matrix{Float64}," << endl
<< " y::Vector{Float64}, x::Vector{Float64}, params::Vector{Float64}, T1_flag::Bool, T0_flag::Bool)" << endl
<< " @assert length(T) >= "
<< temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() << endl
<< temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() << endl
<< " @assert size(g1) == (" << equations.size() << ", " << symbol_table.endo_nbr() << ")" << endl
<< " @assert length(y) == " << symbol_table.endo_nbr() << endl
<< " @assert length(x) == " << symbol_table.exo_nbr() << endl
@ -1781,7 +1781,7 @@ StaticModel::writeStaticModel(const string &basename,
output << "function staticG2!(T::Vector{Float64}, g2::Matrix{Float64}," << endl
<< " y::Vector{Float64}, x::Vector{Float64}, params::Vector{Float64}, T2_flag::Bool, T1_flag::Bool, T0_flag::Bool)" << endl
<< " @assert length(T) >= "
<< temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() << endl
<< temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() << endl
<< " @assert size(g2) == (" << equations.size() << ", " << g2ncols << ")" << endl
<< " @assert length(y) == " << symbol_table.endo_nbr() << endl
<< " @assert length(x) == " << symbol_table.exo_nbr() << endl
@ -1809,7 +1809,7 @@ StaticModel::writeStaticModel(const string &basename,
output << "function staticG3!(T::Vector{Float64}, g3::Matrix{Float64}," << endl
<< " y::Vector{Float64}, x::Vector{Float64}, params::Vector{Float64}, T3_flag::Bool, T2_flag::Bool, T1_flag::Bool, T0_flag::Bool)" << endl
<< " @assert length(T) >= "
<< temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size() << endl
<< temporary_terms_mlv_idxs.size() + temporary_terms_res_idxs.size() + temporary_terms_g1_idxs.size() + temporary_terms_g2_idxs.size() + temporary_terms_g3_idxs.size() << endl
<< " @assert size(g3) == (" << nrows << ", " << ncols << ")" << endl
<< " @assert length(y) == " << symbol_table.endo_nbr() << endl
<< " @assert length(x) == " << symbol_table.exo_nbr() << endl