diff --git a/ExprNode.cc b/ExprNode.cc index fd467154..6af8caf5 100644 --- a/ExprNode.cc +++ b/ExprNode.cc @@ -7273,19 +7273,24 @@ PacExpectationNode::writeOutput(ostream &output, ExprNodeOutputType output_type, if (IS_LATEX(output_type)) { output << "PAC_EXPECTATION" << LEFT_PAR(output_type) << model_name << ", " - << var_model_name << ", " << discount_symb_id << ", " << growth_symb_id; + << var_model_name << ", " << discount_symb_id; + if (growth_symb_id >= 0) + output << ", " << growth_symb_id; output << RIGHT_PAR(output_type); return; } output <<"M_.pac_expectation." << model_name << ".var_model_name = '" << var_model_name << "';" << endl << "M_.pac_expectation." << model_name << ".discount_param_index = " - << datatree.symbol_table.getTypeSpecificID(discount_symb_id) + 1 << ";" << endl - << "M_.pac_expectation." << model_name << ".growth_name = '" - << datatree.symbol_table.getName(growth_symb_id) << "';" << endl - << "M_.pac_expectation." << model_name << ".growth_neutrality_param_index = " - << datatree.symbol_table.getTypeSpecificID(growth_param_index) + 1 << ";" << endl - << "M_.pac_expectation." << model_name << ".h0_param_indices = ["; + << datatree.symbol_table.getTypeSpecificID(discount_symb_id) + 1 << ";" << endl; + + if (growth_symb_id >= 0) + output << "M_.pac_expectation." << model_name << ".growth_name = '" + << datatree.symbol_table.getName(growth_symb_id) << "';" << endl + << "M_.pac_expectation." << model_name << ".growth_neutrality_param_index = " + << datatree.symbol_table.getTypeSpecificID(growth_param_index) + 1 << ";" << endl; + + output << "M_.pac_expectation." << model_name << ".h0_param_indices = ["; for (vector::const_iterator it = h0_indices.begin(); it != h0_indices.end(); it++) { @@ -7547,9 +7552,10 @@ PacExpectationNode::writeJsonOutput(ostream &output, { output << "pac_expectation(" << ", model_name = " << model_name - << ", " << discount_symb_id - << ", " << growth_symb_id - << ")"; + << ", " << discount_symb_id; + if (growth_symb_id >= 0) + output << ", " << growth_symb_id; + output << ")"; } void @@ -7614,12 +7620,15 @@ PacExpectationNode::substitutePacExpectation(map= 0) + { + growth_param_index = datatree.symbol_table.addSymbol(model_name + + "_pac_growth_neutrality_correction", + eParameter); + subExpr = datatree.AddPlus(subExpr, + datatree.AddTimes(datatree.AddVariable(growth_param_index), + datatree.AddVariable(growth_symb_id))); + } subst_table[const_cast(this)] = dynamic_cast(subExpr); diff --git a/ParsingDriver.cc b/ParsingDriver.cc index bb12cada..b9d7131c 100644 --- a/ParsingDriver.cc +++ b/ParsingDriver.cc @@ -2684,14 +2684,12 @@ ParsingDriver::add_pac_expectation() if (pac_expectation_discount.empty()) error("pac_expectation: you must pass the discount option"); - if (pac_expectation_growth.empty()) - error("pac_expectation: you must pass the growth option"); - int pac_expectation_discount_id = mod_file->symbol_table.getID(pac_expectation_discount); - int pac_expectation_growth_id = - mod_file->symbol_table.getID(pac_expectation_growth); + int pac_expectation_growth_id = -1; + if (!pac_expectation_growth.empty()) + pac_expectation_growth_id = mod_file->symbol_table.getID(pac_expectation_growth); expr_t pac_exp_node = data_tree->AddPacExpectation(pac_expectation_model_name, pac_expectation_var_model_name,