I am trying to use a C library function from Python using numpy and ctypes. Assume the function has the signature
void foo(int* bar)
so it usually takes an integer array as a parameter. In python, I define
and can then call the function foo(x), where x is an appropriate ndarray. This works very well.
The problem is that I need to be able to call the function foo with a NULL pointer as an argument. Ideally, I would like to be able to use foo(None), but that doesn't work because the argument conversion throws a TypeError. Therefore my questions:
1. Is there a ndarray that is converted to NULL by ndpointer? I was hoping that maybe ndarray(None) or an array of size 0 would work, but they don't.
2. Is there a way to tell ndpointer that None is an acceptable parameter, which should be converted to NULL?
3. I could also change the argument specification in python to foo.argtypes=[POINTER(c_int)], but then I would lose the type checking features of ndpointer. Can I invoke the ndpointer conversion manually? For example, does a ndpointer object have a method that takes a ndarray as an argument and returns a POINTER(c_int) if appropriate?
Any suggestions would be much appreciated.