From a210a8fd59a052abf2c67d264f0889ba2213043d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Tue, 23 Nov 2021 12:35:43 +0100
Subject: [PATCH] Add several types of auxiliary variables to M_.mapping

In practice, only those auxiliary variables which do not have an orig_symb_id
will be listed (in addition to unary ops, due to an implementation bug).
---
 src/DynamicModel.cc | 12 +++++-------
 src/DynamicModel.hh |  2 +-
 src/ModFile.cc      |  4 +---
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 9dfec6b1..192e436b 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -4546,19 +4546,17 @@ DynamicModel::ParamUsedWithLeadLag() const
 }
 
 void
-DynamicModel::createVariableMapping(int orig_eq_nbr)
+DynamicModel::createVariableMapping()
 {
-  for (int ii = 0; ii < orig_eq_nbr; ii++)
+  for (size_t ii = 0; ii < equations.size(); ii++)
     {
       set<int> eqvars;
       equations[ii]->collectVariables(SymbolType::endogenous, eqvars);
       equations[ii]->collectVariables(SymbolType::exogenous, eqvars);
       for (auto eqvar : eqvars)
-        {
-          eqvar = symbol_table.getUltimateOrigSymbID(eqvar);
-          if (eqvar >= 0 && !symbol_table.isAuxiliaryVariable(eqvar))
-            variableMapping[eqvar].emplace(ii);
-        }
+        if (int orig_symb_id = symbol_table.getUltimateOrigSymbID(eqvar);
+            orig_symb_id >= 0)
+        variableMapping[orig_symb_id].emplace(ii);
     }
 }
 
diff --git a/src/DynamicModel.hh b/src/DynamicModel.hh
index 7f004475..8f7e2dac 100644
--- a/src/DynamicModel.hh
+++ b/src/DynamicModel.hh
@@ -396,7 +396,7 @@ public:
   void writeDynamicJacobianNonZeroElts(const string &basename) const;
 
   //! Creates mapping for variables and equations they are present in
-  void createVariableMapping(int orig_eq_nbr);
+  void createVariableMapping();
 
   //! Expands equation tags with default equation names (available "name" tag or LHS variable or equation ID)
   void expandEqTags();
diff --git a/src/ModFile.cc b/src/ModFile.cc
index 8c4f43b8..902f0563 100644
--- a/src/ModFile.cc
+++ b/src/ModFile.cc
@@ -559,9 +559,7 @@ ModFile::transformPass(bool nostrict, bool stochastic, bool compute_xrefs, bool
     }
   // And finally perform the substitutions
   dynamic_model.substituteVarExpectation(var_expectation_subst_table);
-  dynamic_model.createVariableMapping(mod_file_struct.orig_eq_nbr +
-                                      (mod_file_struct.ramsey_model_present ?
-                                       mod_file_struct.ramsey_eq_nbr : 0));
+  dynamic_model.createVariableMapping();
 
   /* Create auxiliary vars for leads and lags greater than 2, on both endos and
      exos. The transformation is not exactly the same on stochastic and
-- 
GitLab