from sympy import *
from spb import *
import panel as pn
x, y, a, b = symbols("x y a b")
x_min, x_max, y_min, y_max = symbols("x_min x_max y_min y_max")
expr = (cos(x) + a * sin(x) * sin(y) - b * sin(x) * cos(y))**2
plot_contour(
    expr, prange(x, x_min*pi, x_max*pi), prange(y, y_min*pi, y_max*pi),
    params={
        a: (1, 0, 2),
        b: (1, 0, 2),
        (x_min, x_max): pn.widgets.RangeSlider(
            value=(-1, 1), start=-3, end=3, step=0.1),
        (y_min, y_max): pn.widgets.RangeSlider(
            value=(-1, 1), start=-3, end=3, step=0.1),
    },
    grid=False)