"""This is a compatibility module, allowing python to work
with either numpy, Numeric, or numarray.
It tries to import them, in that order, only reporting
an error if none are available.
Note that this does not pretend to solve all compatibility
problems; it just tries importing all three, so you can only
count on the lowest common denominator.
"""
# Written by Greg Kochanski 2005-2006, placed into the public domain.
class _delayed_import(object):
"""This class does a lazy import, and adds aliases
to some names to allow backwards compatibility."""
def __init__(self, name, aliases = []):
self.name = name
self.mod = None
self.aliases = aliases
def __getattribute__(self, aname):
mod = object.__getattribute__(self, 'mod')
if mod is None:
mname = object.__getattribute__(self, 'name')
mod = __import__(mname)
a = mname.split('.')
for dot in a[1:]:
mod = getattr(mod, dot)
self.mod = mod
for (nn, on) in object.__getattribute__(self, 'aliases'):
setattr(mod, nn, getattr(mod, on))
return getattr(mod, aname)
array = None
try:
from numpy import *
LA = _delayed_import('numpy.linalg',
[
('linear_least_squares', 'lstsq'),
('singular_value_decomposition', 'svd')
]
)
RA = _delayed_import('numpy.random')
FFT = _delayed_import('numpy.fft',
[
('inverse_fft', 'ifft'), ('real_fft', 'rfft'),
('inverse_real_fft', 'irfft')
]
)
Float = double
Int = int0
Int32 = int32
Int16 = int16
Int8 = int8
Complex = complex_
arrayrange = arange
matrixmultiply = dot
outerproduct = outer
NewAxis = newaxis
except ImportError:
pass
if array is None:
try:
from Numeric import * # This normally imports array
RA = _delayed_import('RandomArray')
LA = _delayed_import('LinearAlgebra')
FFT = _delayed_import('FFT')
except ImportError:
pass
assert FFT
assert array
assert LA
assert RA
if array is None:
try:
from numarray import *
except ImportError:
raise ImportError, "No module named either numpy, Numeric or numarray"