[Numpy-discussion] Dealing with types in extension modules

Travis E. Oliphant oliphant at enthought.com
Wed Sep 10 23:50:53 EDT 2008


Lane Brooks wrote:
> Travis E. Oliphant wrote:
>> Lane Brooks wrote:
>>   
>>> When writing an numpy extension module, what is the preferred way to 
>>> deal with the all the possible types an ndarray can have?
>>>
>>> I have some data processing functions I need to implement and they need 
>>> to be generic and work for all the possible numerical dtypes.  I do not 
>>> want to have to re-implement the same C-code for all the possible types, 
>>> so the way I approached it was to use a C++ template function to 
>>> implement the processing.  Then I have a dispatching function that 
>>> checks the type of the input ndarray and calls the correct template.  Is 
>>> there a better way?
>>>   
>>>     
>> You could store the functions in an array of function pointers and 
>> look-up the correct one using the typenum:
>>
>> resize_funcs[PyArray_Type(buf1)](PyArray_DATA(bufi))
>>
>> with resize_funcs filled appropriately.
>>
>> -Travis
> Would this require implementing a unique function for each of the 
> possible types, though?  That is mostly what I want to avoid.  I do 
> not want to have to implement 10 to 15 different functions that all do 
> the same exact thing but to different types of data.  I guess with 
> your proposal I can still use templates to have a single function 
> definition.
You could have a default function which does type coercion or uses 
type-indifferent code.  It really depends on what you are doing.

But generally if you want to support multiple types you have to repeat 
the code for that type, I don't know of anyway around that.

Also, you don't have to fill in all the functions (some could be NULL 
and you could use coercion to another type or some other default 
implementation as needed).

-Travis




More information about the NumPy-Discussion mailing list