[SciPy-dev] Removing globals from minpack wrapper

Yosef Meller mellerf at netvision.net.il
Wed Jun 25 12:06:27 EDT 2008


I was having my fun with optimize.fsolve() at work, when I realized that 
both the Python side and the C/FORTRAN side allocate work spaces, and 
then copy between them, which seemed wasteful. I started playing around 
with the code to try and create a version that allows the same buffer to 
move around between Python and minpack.

I couldn't do that (and I doubt now that it's possible), but on the way 
I found a method to remove the global variables that are used to store 
the data needed by the multipack functions but not passed in by the 
FORTRAN code which doesn't even know about it.

The trick was to allocate extra space on the work buffers and use it as 
a pointer to a structure that contains the information. This may seem 
just as ugly, but it has all the advantages of not using globals, 
including the prospects of someday making it thread-safe.

The attached patch implements the trick in minpack_hybrj, and the Python 
code tests that it works.

Do you think it's worth doing to the rest of the minpack functions?

-- 
http://yosefm.imagekind.com/Eclectic
-------------- next part --------------
A non-text attachment was scrubbed...
Name: nuke_globals.patch
Type: text/x-diff
Size: 6132 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20080625/6f13e577/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test_globals_nuke.py
Type: text/x-python
Size: 284 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20080625/6f13e577/attachment.py>


More information about the SciPy-Dev mailing list