I love nanobind, use it all the time and highly recommend it. It makes it very easy to pass numpy, PyTorch, cupy or tensorflow arrays to your C++ extension, to specify what array shape and flags are expected, and to wrap either C++ or Cuda code. When paired with scikit-build, it makes building Python packages with C++ extensions a breeze. I would give it more than one star on github if I could.