//===- NpcompPybindUtils.h - Utilities for interop with python ------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // TODO: Most of this lives upstream now and should be taken from there. #ifndef NPCOMP_PYTHON_NPCOMP_PYBIND_UTILS_H #define NPCOMP_PYTHON_NPCOMP_PYBIND_UTILS_H #include #include #include #include #include "mlir-c/Bindings/Python/Interop.h" #include "mlir-c/IR.h" #include "mlir-c/Pass.h" #include "mlir/Bindings/Python/PybindAdaptors.h" #include "llvm/ADT/Optional.h" namespace py = pybind11; namespace pybind11 { /// Raises a python exception with the given message. /// Correct usage: // throw RaiseValueError(PyExc_ValueError, "Foobar'd"); inline pybind11::error_already_set raisePyError(PyObject *exc_class, const char *message) { PyErr_SetString(exc_class, message); return pybind11::error_already_set(); } /// Raises a value error with the given message. /// Correct usage: /// throw RaiseValueError("Foobar'd"); inline pybind11::error_already_set raiseValueError(const char *message) { return raisePyError(PyExc_ValueError, message); } /// Raises a value error with the given message. /// Correct usage: /// throw RaiseValueError(message); inline pybind11::error_already_set raiseValueError(const std::string &message) { return raisePyError(PyExc_ValueError, message.c_str()); } } // namespace pybind11 #endif // NPCOMP_PYTHON_NPCOMP_PYBIND_UTILS_H