I have made the first PR of my GSoC project which is the Porting of the function find_objects, in measurement submodule of ndimage. This is one of the most basic function of ndimage module which finds any object from a labelled image. It returns a slice object which we can be used on the image to find objects in image. In porting this function we had several problems to deal with. Firstly I had to make it run on all range of devices running whether solaris or Ubuntu 14.10 and for both big endian and little endian machines. So the first challenge was to manage byteswapped pointers. For this we had used two api’s in numpy. First one PyArray_ISBYTESWAPPED() is used to check whether the given pointer is byteswapped or not. And the second one copyswap(), is used to convert a byteswapped pointer into a normal one which we can dereference normally. Initially we had used this function but it was making the whole function look like a proper C function. So we decided to use another high level api of numpy itself which was costlier than the original implementation (as it makes copy of the whole array) but it made the implementation more cythonish and easy to maintainable. We have yet to do the bench-marking of this version and if results come good, we are sticking to this new version.
Then there was another conflict regarding functions using fused data type of input arrays. If variables are declared in the same file then using fused data type in file itself then it becomes very easy to use fused data type. But writing a function with fused type coming from user is a very tedious task. We finally found a way of implementing it, but its very much complex and uses function pointers which makes it horrible to maintain. We are trying to find any alternative to it yet. I will in my next blog explain how I have used function pointers for fused data type where the type depends upon the input data given by the user.
Link of the PR is http://www.github.com/scipy/scipy/pull/5006