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
graphics(
    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
)