diff --git a/modelx/core/model.py b/modelx/core/model.py index 1b15e06..4bdefc3 100644 --- a/modelx/core/model.py +++ b/modelx/core/model.py @@ -1354,6 +1354,10 @@ def del_macro(self, name): macro = self._macros[name] macro.on_delete() del self._macros[name] + + # Remove from macro namespace if it exists + if self._macro_namespace is not None and name in self._macro_namespace: + del self._macro_namespace[name] def get_macro_namespace(self): """Get the namespace for macro execution diff --git a/modelx/tests/core/model/test_macro.py b/modelx/tests/core/model/test_macro.py index 9ca5124..91bae24 100644 --- a/modelx/tests/core/model/test_macro.py +++ b/modelx/tests/core/model/test_macro.py @@ -143,9 +143,15 @@ def to_delete(): assert 'to_delete' in m.macros + # Call macro to ensure namespace is created + m.to_delete() + assert 'to_delete' in m._impl._macro_namespace + del m.to_delete assert 'to_delete' not in m.macros + # Verify macro is also removed from the namespace (bug fix) + assert 'to_delete' not in m._impl._macro_namespace with pytest.raises(AttributeError): m.to_delete()