From 3d606ea28c95bd958aa37917e966b037873d5e3d Mon Sep 17 00:00:00 2001
From: NAUD Maxence <maxence.naud@cea.fr>
Date: Wed, 26 Feb 2025 13:38:31 +0000
Subject: [PATCH] update deprecation with pybind override

---
 include/aidge/utils/Deprecated.hpp | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

diff --git a/include/aidge/utils/Deprecated.hpp b/include/aidge/utils/Deprecated.hpp
index 92cd190c7..5e73849a2 100644
--- a/include/aidge/utils/Deprecated.hpp
+++ b/include/aidge/utils/Deprecated.hpp
@@ -43,19 +43,36 @@ static std::string camelToSnakeCase(const std::string &camelCase) {
 #define DEPRECATED_PYBIND(oldName, newName)                                    \
     /* Under PYBIND, if Python is initialized, convert names to snake_case */  \
     if (Py_IsInitialized()) {                                                  \
-        deprecatedFuncNameStr = toSnakeCase(deprecatedFuncNameStr);            \
-        newFuncNameStr  = toSnakeCase(newFuncNameStr);                         \
+        deprecatedFuncNameStr = camelToSnakeCase(oldName);                     \
+        newFuncNameStr = camelToSnakeCase(newName);                            \
     }
 #else
-#define DEPRECATED_PYBIND(oldName, newName) {}
-#endif
+#define DEPRECATED_PYBIND(oldName, newName) do {} while (0)
+#endif  // PYBIND
 
+// For the C++ interface without Python overrides.
 #define DEPRECATED(newFuncName)                                                \
   do {                                                                         \
     std::string deprecatedFuncNameStr(__func__);                               \
     std::string newFuncNameStr(newFuncName);                                   \
-    DEPRECATED_PYBIND(oldName, newName);                                       \
-    Aidge::Log::warn("'{}()' is deprecated, please use '{}()' instead", deprecatedFuncNameStr, newFuncNameStr); \
+    DEPRECATED_PYBIND(deprecatedFuncNameStr, newFuncName);                     \
+    Aidge::Log::warn("'{}()' is deprecated, please use '{}()' instead",        \
+                     deprecatedFuncNameStr, newFuncNameStr);                   \
+  } while (0)
+
+// For the case when you want to provide Python-specific override names.
+// If PYBIND is detected (and Python is initialized), then the names will be
+// replaced as follows:
+//   deprecatedFuncNameStr = camelToSnakeCase(pybindNewOverridedName)
+//   newFuncNameStr      = camelToSnakeCase(pybindOldOverridedName)
+#define DEPRECATED_WITH_PYBIND_OVERRIDES(newFuncName, pybindNewOverridedName, pybindOldOverridedName) \
+  do {                                                                        \
+    std::string deprecatedFuncNameStr(__func__);                              \
+    std::string newFuncNameStr(newFuncName);                                  \
+    /* Swap the order of the override names here */                           \
+    DEPRECATED_PYBIND(pybindNewOverridedName, pybindOldOverridedName);        \
+    Aidge::Log::warn("'{}()' is deprecated, please use '{}()' instead",       \
+                     deprecatedFuncNameStr, newFuncNameStr);                  \
   } while (0)
 
   #endif // AIDGE_UTILS_DEPRECATED_H_
\ No newline at end of file
-- 
GitLab