I am trying to wrap functions using a C object in NumPy (this speeds up things quite a lot due to avoiding
**kwargs back and forth. The reason is that we have a dispatching mechanism, and this seemed like a decent approach. (There is another approach but it would also subtly change behavior).
Now a small beauty (or maybe real) issue is that e.g. sphinx use
inspect.isroutine() to decides that this means its a
:py:func: (rather than
:py:data: and I cannot be certain that others don’t expect similar.
A possible fix would seem to be to just subclass
MethodType in C (or even
FunctionType), but that seems rather overstepping, so I am curious if there is prior art that does similarly evil things (or a clean way to do the same).
So this code:
@c_defined_object def func(a, b, c=3): # do things
should return a C callable, but look as much like the original function as possible (and e.g. have
__wrapped__, but hopefully more).