On Fri, Aug 15, 2008 at 10:41 AM, Andrew Dalke <dalke@dalkescientific.com>wrote:
On Aug 15, 2008, at 4:38 PM, Pauli Virtanen wrote:
I think you can still do something evil, like this:
import os if os.environ.get('NUMPY_VIA_API', '0') != '0': from numpy.lib.fromnumeric import * ...
But I'm not sure how many milliseconds must be gained to justify this...
I don't think it's enough. I don't like environmental variable tricks like that. My tests suggest: current SVN: 0.12 seconds my patch: 0.10 seconds removing some top-level imports: 0.09 seconds my patch and removing some additional top-level imports: 0.08 seconds (this is a guess)
First, I reverted my patch, so my import times went from 0.10 second to 0.12 seconds.
Second, I commented out the pure module imports from numpy/__init__.py
import linalg import fft import random import ctypeslib import ma import doc
The import time went to 0.089. Note that my patch also gets rid of "import doc" and "import ctypeslib", which take up a good chunk of time. The fft, linalg, and random libraries take 0.002 seconds each, and ma takes 0.007.
Not doing these imports makes code about 0.01 second faster than my patches, which shaved off 0.02 seconds. That 0.01 second comes from not importing the fft, linalg, and ma modules.
My patch does improve things in a few other places, so perhaps those other places adds another 0.01 seconds of performance.
Why can't things be better? Take a look at the slowest imports. (Note, times are inclusive of the children)
== Slowest (including children) == 0.089 numpy (None) 0.085 add_newdocs (numpy) 0.079 lib (add_newdocs) 0.041 type_check (lib) 0.040 numpy.core.numeric (type_check) 0.015 _internal (numpy.core.numeric) 0.014 numpy.testing (lib) 0.014 re (_internal) 0.010 unittest (numpy.testing) 0.010 numeric (numpy.core.numeric) 0.009 io (lib)
Most of the time is spent importing 'lib'.
Can that be made quicker? Not easily. "lib" is first imported in "add_newdocs". Personally, I want to get rid of add_newdocs and move the docstrings into the correct locations.
And those would be? I hope you aren't thinking of moving them into the C code. Chuck