//===- PybindUtils.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 // //===----------------------------------------------------------------------===// #ifndef NPCOMP_PYTHON_NATIVE_PYBIND_UTILS_H #define NPCOMP_PYTHON_NATIVE_PYBIND_UTILS_H #include #include #include #include #include "llvm/ADT/Optional.h" namespace py = pybind11; namespace pybind11 { namespace detail { template struct type_caster> : optional_caster> {}; } // namespace detail } // namespace pybind11 namespace pybind11 { /// Raises a python exception with the given message. /// Correct usage: // throw RaiseValueError(PyExc_ValueError, "Foobar'd"); pybind11::error_already_set raisePyError(PyObject *exc_class, const char *message); /// 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_NATIVE_PYBIND_UTILS_H