diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index fb84ffcb9110c92d708e54955134929903c4a7b6..956a6c409cedbbd0d1fe0f448f246cd447a82df5 100644 --- a/src/DynamicModel.cc +++ b/src/DynamicModel.cc @@ -2199,7 +2199,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, << "end" << endl << endl; // dynamic! - output << "function dynamicResid!(T::Vector{Float64}, residual::Vector{Float64}," << endl + output << "function dynamicResid!(T::Vector{Float64}, residual::AbstractVector{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_mlv.size() + temporary_terms_derivatives[0].size() << endl @@ -2292,14 +2292,14 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, << "end" << endl << endl; // dynamic! - output << "function dynamic!(T::Vector{Float64}, residual::Vector{Float64}," << endl + output << "function dynamic!(T::Vector{Float64}, residual::AbstractVector{Float64}," << endl << " y::Vector{Float64}, x::Matrix{Float64}, " << "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int)" << endl << " dynamicResid!(T, residual, y, x, params, steady_state, it_, true)" << endl << " return nothing" << endl << "end" << endl << endl - << "function dynamic!(T::Vector{Float64}, residual::Vector{Float64}, g1::Matrix{Float64}," << endl + << "function dynamic!(T::Vector{Float64}, residual::AbstractVector{Float64}, g1::Matrix{Float64}," << endl << " y::Vector{Float64}, x::Matrix{Float64}, " << "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int)" << endl << " dynamicG1!(T, g1, y, x, params, steady_state, it_, true)" << endl @@ -2307,7 +2307,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, << " return nothing" << endl << "end" << endl << endl - << "function dynamic!(T::Vector{Float64}, residual::Vector{Float64}, g1::Matrix{Float64}, g2::Matrix{Float64}," << endl + << "function dynamic!(T::Vector{Float64}, residual::AbstractVector{Float64}, g1::Matrix{Float64}, g2::Matrix{Float64}," << endl << " y::Vector{Float64}, x::Matrix{Float64}, " << "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int)" << endl << " dynamicG2!(T, g2, y, x, params, steady_state, it_, true)" << endl @@ -2316,7 +2316,7 @@ DynamicModel::writeDynamicModel(const string &basename, ostream &DynamicOutput, << " return nothing" << endl << "end" << endl << endl - << "function dynamic!(T::Vector{Float64}, residual::Vector{Float64}, g1::Matrix{Float64}, g2::Matrix{Float64}, g3::Matrix{Float64}," << endl + << "function dynamic!(T::Vector{Float64}, residual::AbstractVector{Float64}, g1::Matrix{Float64}, g2::Matrix{Float64}, g3::Matrix{Float64}," << endl << " y::Vector{Float64}, x::Matrix{Float64}, " << "params::Vector{Float64}, steady_state::Vector{Float64}, it_::Int)" << endl << " dynamicG3!(T, g3, y, x, params, steady_state, it_, true)" << endl @@ -4712,7 +4712,7 @@ DynamicModel::writeSetAuxiliaryVariables(const string &basename, bool julia) con if (output_func_body.str().empty()) return; - string func_name = julia ? basename + "_dynamic_set_auxiliary_series!" : "dynamic_set_auxiliary_series"; + string func_name = julia ? "dynamic_set_auxiliary_series!" : "dynamic_set_auxiliary_series"; string comment = julia ? "#" : "%"; stringstream output; @@ -6284,8 +6284,16 @@ DynamicModel::writeJsonDynamicModelInfo(ostream &output) const << R"("orig_maximum_lag": )" << max_lag_orig << "," << endl << R"("orig_maximum_lead": )" << max_lead_orig << "," << endl << R"("orig_maximum_lag_with_diffs_expanded": )" << max_lag_with_diffs_expanded_orig - << endl; - output << "}"; + << "," <<endl + << R"("NNZDerivatives": [)"; + for (int i = 1; i < static_cast<int>(NNZDerivatives.size()); i++) + { + output << (i > computed_derivs_order ? -1 : NNZDerivatives[i]); + if (i < static_cast<int>(NNZDerivatives.size()) - 1) + output << ", "; + } + output << "]}" + << endl; } void diff --git a/src/StaticModel.cc b/src/StaticModel.cc index daf54426fcbe0506da8b5337641b883168a2e289..13e6bcb6445bc3b9d4928b18c45b97ca87af2ee2 100644 --- a/src/StaticModel.cc +++ b/src/StaticModel.cc @@ -2114,7 +2114,7 @@ StaticModel::writeSetAuxiliaryVariables(const string &basename, bool julia) cons if (output_func_body.str().empty()) return; - string func_name = julia ? basename + "_set_auxiliary_variables!" : "set_auxiliary_variables"; + string func_name = julia ? "set_auxiliary_variables!" : "set_auxiliary_variables"; string comment = julia ? "#" : "%"; stringstream output; diff --git a/src/SymbolTable.cc b/src/SymbolTable.cc index a6979d6fe7330e667fca07ce024eab027c578b02..0ac9344887e024592e14605de63d3c1bf2cda0d3 100644 --- a/src/SymbolTable.cc +++ b/src/SymbolTable.cc @@ -948,6 +948,63 @@ SymbolTable::writeJsonOutput(ostream &output) const } output << "]" << endl; } + // Write the auxiliary variable table + output << R"(, "orig_endo_nbr": )" << orig_endo_nbr() << endl; + if (aux_vars.size() == 0) + output << R"(, "aux_vars": [])"; + else + { + output << R"(, "aux_vars": [)" << endl; + for (int i = 0; i < static_cast<int>(aux_vars.size()); i++) + { + if (i != 0) + output << ", "; + output << R"({"endo_index": )" << getTypeSpecificID(aux_vars[i].get_symb_id())+1 + << R"(, "type": )" << aux_vars[i].get_type_id(); + switch (aux_vars[i].get_type()) + { + case AuxVarType::endoLead: + case AuxVarType::exoLead: + break; + case AuxVarType::endoLag: + case AuxVarType::exoLag: + output << R"(, "orig_index": )" << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 + << R"(, "orig_lead_lag": )" << aux_vars[i].get_orig_lead_lag(); + break; + case AuxVarType::unaryOp: + if (aux_vars[i].get_orig_symb_id() >= 0) + output << R"(, "orig_index": )" << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 + << R"(, "orig_lead_lag": )" << aux_vars[i].get_orig_lead_lag() + << R"(, "unary_op": )" << aux_vars[i].get_unary_op(); + break; + case AuxVarType::multiplier: + output << R"(, "eq_nbr": )" << aux_vars[i].get_equation_number_for_multiplier() + 1; + break; + case AuxVarType::diffForward: + output << R"(, orig_index": )" << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1; + break; + case AuxVarType::expectation: + break; + case AuxVarType::diff: + case AuxVarType::diffLag: + case AuxVarType::diffLead: + if (aux_vars[i].get_orig_symb_id() >= 0) + output << R"(, "orig_index": )" << getTypeSpecificID(aux_vars[i].get_orig_symb_id())+1 + << R"(, "orig_lead_lag": )" << aux_vars[i].get_orig_lead_lag(); + break; + } + + if (expr_t orig_expr = aux_vars[i].get_expr_node(); + orig_expr) + { + output << R"(, "orig_expr": ")"; + orig_expr->writeJsonOutput(output, {}, {}); + output << R"(")"; + } + output << '}' << endl; + } + output << "]" << endl; + } } void