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