User Defined Functions

I wish to create a custom calculator where the user defines two parameters and a function using a GUI and when they click on calculate it executes their user defined function passing the two parameters.

argument1 = IntSlider( … )
argument2 = IntSlider( … )
userDefinedFunction = TextArea( … )
calculateButton = Button ( … )
calculateButton.on_click(userDefinedFunction)

So that let’s say somebody defines :

  1. argument1 = 3
  2. argument2 = 4
  3. userDefinedFunction = def udf(arg1,arg2): return arg1**2 + arg2**2

Would return 25 as 3*3 + 4*4 = 25.

UPDATE : Found a way to get it working but only with lambda functions. I am working towards full fledged functions that can accept xarray.DataSet as arguments and return the resulting xarray.DataSet.

import panel as pn
import panel.widgets as pnw

pn.extension()

number1 = pnw.IntSlider(name='Number 1', start=0, end=10, step=1, value=3)
number2 = pnw.IntSlider(name='Number 2', start=0, end=10, step=1, value=4)
user_defined_function = pnw.input.TextAreaInput(name='Text Area Input', value='arg1**2 + arg2**2')

def udf_output(arg1,arg2,udf):
    result_calculated = eval(f"lambda arg1, arg2: {udf}")
    return result_calculated(arg1,arg2)

result = pn.bind(udf_output, arg1=number1,arg2=number2,udf=user_defined_function)

pn.Row(pn.WidgetBox(number1,number2,user_defined_function),result)