Chris@87: """ Chris@87: Aliases for functions which may be accelerated by Scipy. Chris@87: Chris@87: Scipy_ can be built to use accelerated or otherwise improved libraries Chris@87: for FFTs, linear algebra, and special functions. This module allows Chris@87: developers to transparently support these accelerated functions when Chris@87: scipy is available but still support users who have only installed Chris@87: Numpy. Chris@87: Chris@87: .. _Scipy : http://www.scipy.org Chris@87: Chris@87: """ Chris@87: from __future__ import division, absolute_import, print_function Chris@87: Chris@87: # This module should be used for functions both in numpy and scipy if Chris@87: # you want to use the numpy version if available but the scipy version Chris@87: # otherwise. Chris@87: # Usage --- from numpy.dual import fft, inv Chris@87: Chris@87: __all__ = ['fft', 'ifft', 'fftn', 'ifftn', 'fft2', 'ifft2', Chris@87: 'norm', 'inv', 'svd', 'solve', 'det', 'eig', 'eigvals', Chris@87: 'eigh', 'eigvalsh', 'lstsq', 'pinv', 'cholesky', 'i0'] Chris@87: Chris@87: import numpy.linalg as linpkg Chris@87: import numpy.fft as fftpkg Chris@87: from numpy.lib import i0 Chris@87: import sys Chris@87: Chris@87: Chris@87: fft = fftpkg.fft Chris@87: ifft = fftpkg.ifft Chris@87: fftn = fftpkg.fftn Chris@87: ifftn = fftpkg.ifftn Chris@87: fft2 = fftpkg.fft2 Chris@87: ifft2 = fftpkg.ifft2 Chris@87: Chris@87: norm = linpkg.norm Chris@87: inv = linpkg.inv Chris@87: svd = linpkg.svd Chris@87: solve = linpkg.solve Chris@87: det = linpkg.det Chris@87: eig = linpkg.eig Chris@87: eigvals = linpkg.eigvals Chris@87: eigh = linpkg.eigh Chris@87: eigvalsh = linpkg.eigvalsh Chris@87: lstsq = linpkg.lstsq Chris@87: pinv = linpkg.pinv Chris@87: cholesky = linpkg.cholesky Chris@87: Chris@87: _restore_dict = {} Chris@87: Chris@87: def register_func(name, func): Chris@87: if name not in __all__: Chris@87: raise ValueError("%s not a dual function." % name) Chris@87: f = sys._getframe(0).f_globals Chris@87: _restore_dict[name] = f[name] Chris@87: f[name] = func Chris@87: Chris@87: def restore_func(name): Chris@87: if name not in __all__: Chris@87: raise ValueError("%s not a dual function." % name) Chris@87: try: Chris@87: val = _restore_dict[name] Chris@87: except KeyError: Chris@87: return Chris@87: else: Chris@87: sys._getframe(0).f_globals[name] = val Chris@87: Chris@87: def restore_all(): Chris@87: for name in _restore_dict.keys(): Chris@87: restore_func(name)