There are no native wavelet packages in sage. But there is a great module in python that contains, among other things, forward and inverse discrete wavelet transforms (for one and two dimensions). It comes bundled with seventy-six wavelet filters, and allows support to build your own! The name is PyWavelets, written by Tariq Rashid, and can be retrieved from pypi.python.org/pypi/PyWavelets. In order to install it in sage, take the following steps:

Download the latest version, and unpack it.

% tar xvfz PyWavelets-0.2.0.tar.bz2

Navigate to the top-level directory of the newly created PyWavelets folder, and install the package in sage.

% /Applications/sage/sage -python setup.py install

This should be enough! Open a sage session, and import the pywt module:

>>> import pywt
>>> dir(pywt)
['BaseNode', 'MODES', 'Node', 'Node2D', 'Wavelet', 'WaveletPacket', 'Wavelet
Packet2D', '__all__', '__author__', '__builtins__', '__doc__', '__file__',
'__license__', '__name__', '__package__', '__path__', '__version__', '_pywt'
, 'centfrq', 'downcoef', 'dwt', 'dwt2', 'dwt_coeff_len', 'dwt_max_level', 'd
wtn', 'families', 'functions', 'idwt', 'idwt2', 'intwave', 'numerix', 'orthf
ilt', 'qmf', 'release_details', 'scal2frq', 'swt', 'swt2', 'swt_max_level',
'thresholding', 'upcoef', 'wavedec', 'wavedec2', 'wavelist', 'waverec', 'wav
erec2']

It might happen that the installation is not very clean:

>>> import pywt
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)

/Users/blanco/Documents/Research/PyWavelets-0.2.0/ in ()

/Users/blanco/Documents/Research/PyWavelets-0.2.0/pywt/__init__.py in ()
11 """
12
---> 13 from _pywt import *
14 from multilevel import *
15 from multidim import *

ImportError: No module named _pywt

In that event, simply find where the _pywt.so library is in your PyWavelet package, and place a link in your sage libraries:

% sudo ln -sv ./PyWavelets-0.2.0/build/lib.macosx-10.6-i386-2.6/pywt/_pywt.so /Applications/sage/local/lib/.

Once installed, you can get a flavor of what it means to work with this module by exploring a little. For example, to find out how many different families of wavelets are implemented, or the names of each of the filters present in the package, simply issue

>>> pywt.families()
['haar', 'db', 'sym', 'coif', 'bior', 'rbio', 'dmey']

>>> pywt.wavelist()
['bior1.1', 'bior1.3', 'bior1.5', 'bior2.2', 'bior2.4', 'bior2.6', 'bior2.8', '
bior3.1', 'bior3.3', 'bior3.5', 'bior3.7', 'bior3.9', 'bior4.4', 'bior5.5', 'bi
or6.8', 'coif1', 'coif2', 'coif3', 'coif4', 'coif5', 'db1', 'db2', 'db3', 'db4'
, 'db5', 'db6', 'db7', 'db8', 'db9', 'db10', 'db11', 'db12', 'db13', 'db14', 'd
b15', 'db16', 'db17', 'db18', 'db19', 'db20', 'dmey', 'haar', 'rbio1.1', 'rbio1
.3', 'rbio1.5', 'rbio2.2', 'rbio2.4', 'rbio2.6', 'rbio2.8', 'rbio3.1', 'rbio3.3
', 'rbio3.5', 'rbio3.7', 'rbio3.9', 'rbio4.4', 'rbio5.5', 'rbio6.8', 'sym2', 's
ym3', 'sym4', 'sym5', 'sym6', 'sym7', 'sym8', 'sym9', 'sym10', 'sym11', 'sym12'
, 'sym13', 'sym14', 'sym15', 'sym16', 'sym17', 'sym18', 'sym19', 'sym20']

To compute one level of the Haar-wavelet coefficients of a given image (the top level alone), we proceed as follows:

1
2
3
4
5
6
7
from numpy import *
import scipy

image=scipy.misc.lena().astype(float32)

Aprox, Details = pywt.dwt2( image, pywt.Wavelet('haar') )
HorizDetail, VertDetail, DiagDetail = Details
Approximation Horizontal Detail
Vertical Detail Diagonal Detail