scipy.special import issue

Question:

I have an issue with importing the scipy.special package. It isn’t harmful, just annoying/interesting.

When I import scipy using import scipy as sp and then try to access sp.special I get:

>>> import scipy as sp
>>> sp.special
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'special'
>>>

but if I then do import scipy.special I can access the special module through scipy.special and sp.special:

>>> import scipy as sp
>>> import scipy.special
>>> scipy.special
<module 'scipy.special' from 'C:Python27libsite-packagesscipyspecial__init__.pyc'>
>>> sp.special
<module 'scipy.special' from 'C:Python27libsite-packagesscipyspecial__init__.pyc'>
>>>

So I now have the special module accessible through both sp and scipy namespaces. The interesting bit is that I can access the rest of scipy through the scipy namespace.

First question: Why does the special module not import first time round?

Second question: How can I get access to the special module through the sp namespace only, without defining the scipy namespace?

Edit: using Python 2.7.2 and scipy 0.10.1

Asked By: Iain Rist

||

Answers:

By default, “import scipy” does not import any subpackage. There are too many subpackages with large Fortran extension modules that are slow to load. I do not recommend doing import scipy or the abbreviated import scipy as sp. It’s just not very useful. Use from scipy import special, from scipy import linalg, etc.

Answered By: Robert Kern
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.