The problem with SWIG bindings I’ve used is that they don’t have any type hints. They also don’t offer context managers to handle resources, so it’s a pain to use safely in Python.
From the user POV, the best bindings I’ve seen were wrappers with a Python API that calls C++ using Cython.
From the user POV, the best bindings I’ve seen were wrappers with a Python API that calls C++ using Cython.