From 77eb2d3fdcec5c978c64e025ced2764c57c00285 Mon Sep 17 00:00:00 2001
From: shumkovnd <shumkovnd@yandex-team.com>
Date: Fri, 10 Nov 2023 14:39:34 +0300
Subject: KIKIMR-19287: add task_stats_drawing script

---
 contrib/python/matplotlib/py3/src/py_exceptions.h | 72 +++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 contrib/python/matplotlib/py3/src/py_exceptions.h

(limited to 'contrib/python/matplotlib/py3/src/py_exceptions.h')

diff --git a/contrib/python/matplotlib/py3/src/py_exceptions.h b/contrib/python/matplotlib/py3/src/py_exceptions.h
new file mode 100644
index 0000000000..c4accf2634
--- /dev/null
+++ b/contrib/python/matplotlib/py3/src/py_exceptions.h
@@ -0,0 +1,72 @@
+/* -*- mode: c++; c-basic-offset: 4 -*- */
+
+#ifndef MPL_PY_EXCEPTIONS_H
+#define MPL_PY_EXCEPTIONS_H
+
+#include <exception>
+#include <stdexcept>
+
+namespace py
+{
+class exception : public std::exception
+{
+  public:
+    const char *what() const throw()
+    {
+        return "python error has been set";
+    }
+};
+}
+
+#define CALL_CPP_FULL(name, a, cleanup, errorcode)                           \
+    try                                                                      \
+    {                                                                        \
+        a;                                                                   \
+    }                                                                        \
+    catch (const py::exception &)                                            \
+    {                                                                        \
+        {                                                                    \
+            cleanup;                                                         \
+        }                                                                    \
+        return (errorcode);                                                  \
+    }                                                                        \
+    catch (const std::bad_alloc &)                                           \
+    {                                                                        \
+        PyErr_Format(PyExc_MemoryError, "In %s: Out of memory", (name));     \
+        {                                                                    \
+            cleanup;                                                         \
+        }                                                                    \
+        return (errorcode);                                                  \
+    }                                                                        \
+    catch (const std::overflow_error &e)                                     \
+    {                                                                        \
+        PyErr_Format(PyExc_OverflowError, "In %s: %s", (name), e.what());    \
+        {                                                                    \
+            cleanup;                                                         \
+        }                                                                    \
+        return (errorcode);                                                  \
+    }                                                                        \
+    catch (const std::runtime_error &e)                                      \
+    {                                                                        \
+        PyErr_Format(PyExc_RuntimeError, "In %s: %s", (name), e.what());    \
+        {                                                                    \
+            cleanup;                                                         \
+        }                                                                    \
+        return (errorcode);                                                  \
+    }                                                                        \
+    catch (...)                                                              \
+    {                                                                        \
+        PyErr_Format(PyExc_RuntimeError, "Unknown exception in %s", (name)); \
+        {                                                                    \
+            cleanup;                                                         \
+        }                                                                    \
+        return (errorcode);                                                  \
+    }
+
+#define CALL_CPP_CLEANUP(name, a, cleanup) CALL_CPP_FULL(name, a, cleanup, 0)
+
+#define CALL_CPP(name, a) CALL_CPP_FULL(name, a, , 0)
+
+#define CALL_CPP_INIT(name, a) CALL_CPP_FULL(name, a, , -1)
+
+#endif
-- 
cgit v1.2.3