import numpy as np

def pos_kernel (w, l):
    L = np.floor(l/2)
    t = np.arange(-L,L+1,1)
    A = np.power(np.sum(np.exp(- np.power(t/w, 2))), -1)
    return A*np.exp(- np.power((t/w), 2))

def vel_kernel (w, l):
    L = np.floor(l/2)
    t = np.arange(-L,L+1,1)
    A = - np.power(np.sum(np.power(t, 2) * np.exp(- np.power(t/w, 2))), -1)
    return A*t*np.exp(- np.power((t/w), 2))

def acc_kernel (w, l):
    L = np.floor(l/2)
    t = np.arange(-L,L+1,1)
    Tau2 = np.sum(np.power(t, 2) * (2*np.power(t/w,2)-1) * np.exp(-np.power(t/w,2)))
    TNull = sum((2*np.power((t/w),2)-1)*np.exp(-np.power((t/w),2)))
    B=2/(L*(L+1)*(2*L+1)/3 -(2*L+1)*Tau2/TNull);
    A=-(2*L+1)*B/TNull;
    return A*(2*np.power((t/w),2)-1)*np.exp(-np.power((t/w),2))+B
