from sympy import *
from spb import *
import panel as pn
x, y, f1, f2, d, n = symbols("x, y, f_1, f_2, d, n")
params = {
    (f1, f2): pn.widgets.RangeSlider(
        value=(1, 2), start=0, end=10, step=0.1),     # frequencies
    d: (0.25, 0, 1),   # damping
    n: (2, 0, 4)       # multiple of pi
}
graphics(
    line(cos(f1 * x) * exp(-d * x), prange(x, 0, n * pi),
        label="oscillator 1", params=params),
    line(cos(f2 * x) * exp(-d * x), prange(x, 0, n * pi),
        label="oscillator 2", params=params),
    line(exp(-d * x), prange(x, 0, n * pi), label="upper limit",
        rendering_kw={"linestyle": ":"}, params=params),
    line(-exp(-d * x), prange(x, 0, n * pi), label="lower limit",
        rendering_kw={"linestyle": ":"}, params=params),
    ylim=(-1.25, 1.25),
    title=("$f_1$ = {:.2f} Hz", f1)
)