#!/usr/bin/env python3

import pywt
import numpy as np

signal = [1, 2, 3, 4]
wavelet_dec_low = [0.0, 0.026748757411, -0.016864118443, -0.078223266529, 0.266864118443, 0.602949018236, 0.266864118443, -0.078223266529, -0.016864118443, 0.026748757411]
wavelet_dec_high = [0.0, 0.091271763114,  -0.057543526229, -0.591271763114, 1.11508705, -0.591271763114, -0.057543526229, 0.091271763114, 0.0, 0.0]

# ---------- with numpy ---------
signal_padded = pywt.pad(signal, len(wavelet_dec_low), 'symmetric')
print(signal_padded)

# --------- approximation (low-pass) -----------

# convolution (approximation)
approximation = np.convolve(signal_padded, wavelet_dec_low, 'valid')
print("Approximation - low-filter - convolution :", *approximation)

# downscale
approximation = approximation[::2]
print("Approximation - low-filter - downscale :", *approximation)

# cleanup
approximation = approximation[1:-1]
print("Approximation - low-filter - cleanup :", *approximation)

# ----------- detail (high-pass) ------------

# convolution (detail)
detail = np.convolve(signal_padded, wavelet_dec_high, 'valid')
print("Detail - high-pass - convolution :", *detail)

# downscale
detail = detail[::2]
print("Detail - high-pass - downscale :", *detail)

# cleanup
detail = detail[1:-1]
print("Detail - high-pass - cleanup :", *detail)

# ------------------------------------------
