#!/usr/bin/env python3

wavelet_dec_low  = [0.0, 0.026748757411, -0.016864118443, -0.078223266529, 0.266864118443,  0.602949018236,  0.266864118443, -0.078223266529, -0.016864118443, 0.026748757411]
#                   -k5       -k4              -k3              -k2             -k1               k0               k1               k2              k3              k4

wavelet_dec_high = [0.0, 0.091271763114, -0.057543526229, -0.591271763114, 1.11508705,     -0.591271763114, -0.057543526229,  0.091271763114,  0.0,            0.0]
#                   -k4      -k3               -k2              -k1           0                 k1                 k2              k3          k4 

# signal is                                  [ 1 2 3 4 ]
#                               symmetric     /| | | |\    symmetric
# with padding, signal is [2 1 1 2 3 4 4 3 2 1 1 2 3 4 4 3 2 1 1 2 3 4 4 3]

def compute(signal):
	a = signal[0] * wavelet_dec_low[0]
	b = signal[1] * wavelet_dec_low[1]
	c = signal[2] * wavelet_dec_low[2]
	d = signal[3] * wavelet_dec_low[3]
	e = signal[4] * wavelet_dec_low[4]
	f = signal[5] * wavelet_dec_low[5]
	g = signal[6] * wavelet_dec_low[6]
	h = signal[7] * wavelet_dec_low[7]
	i = signal[8] * wavelet_dec_low[8]
	j = signal[9] * wavelet_dec_low[9]
	return (a, b, c, d, e, f, g, h, i, j)   # return 10 values

# method used : we slide signal to the left or to the right


signal_slided = [3, 2, 1, 1, 2, 3, 4, 4, 3, 2]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 1. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 2. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [1, 1, 2, 3, 4, 4, 3, 2, 1, 1]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 3. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [1, 2, 3, 4, 4, 3, 2, 1, 1, 2]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 4. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [2, 3, 4, 4, 3, 2, 1, 1, 2, 3]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 5. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [3, 4, 4, 3, 2, 1, 1, 2, 3, 4]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 6. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [4, 4, 3, 2, 1, 1, 2, 3, 4, 4]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 7. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [4, 3, 2, 1, 1, 2, 3, 4, 4, 3]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 8. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [3, 2, 1, 1, 2, 3, 4, 4, 3, 2]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print(" 9. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [2, 1, 1, 2, 3, 4, 4, 3, 2, 1]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("10. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [1, 1, 2, 3, 4, 4, 3, 2, 1, 1]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("11. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [1, 2, 3, 4, 4, 3, 2, 1, 1, 2]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("12. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [2, 3, 4, 4, 3, 2, 1, 1, 2, 3]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("13. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [3, 4, 4, 3, 2, 1, 1, 2, 3, 4]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("14. Approximation :", (a+b+c+d+e+f+g+h+i+j))
signal_slided = [4, 4, 3, 2, 1, 1, 2, 3, 4, 4]
(a, b, c, d, e, f, g, h, i, j) = compute(signal_slided)
print("15. Approximation :", (a+b+c+d+e+f+g+h+i+j))
