import gradio as gr import rpy2.robjects as robj from rpy2.robjects import default_converter from rpy2.robjects.conversion import localconverter # define R functions globally robj.r(""" add <- function(x,y) { return(x + y) } multiply <- function(x,y) { return(x * y) } sub <- function(x,y) { return(x - y) } div <- function(x,y) { return(x / y) } """) def arithmetic(num1, num2, operation): """ Perform arithmetic operations on two numbers. Args: num1 (int or float): The first number. num2 (int or float): The second number. operation (str): The operation to perform. Can be "Add", "Multiply", "Subtract", or "Divide". Returns: int or float: The result of the arithmetic operation. """ with localconverter(default_converter): if operation == "Add": res = robj.r(f"add({num1}, {num2})") elif operation == "Multiply": res = robj.r(f"multiply({num1}, {num2})") elif operation == "Subtract": res = robj.r(f"sub({num1}, {num2})") elif operation == "Divide": res = robj.r(f"div({num1}, {num2})") return res[0] with gr.Blocks( title="R-Powered Calculator", theme=gr.themes.Glass(text_size='lg'), # css="footer {display: none !important;}" ) as app: gr.HTML( "

R-Powered Calculator

" ) with gr.Row(): num1 = gr.Number(label="Number 1") num2 = gr.Number(label="Number 2") with gr.Column(): operation = gr.Radio( choices=["Add", "Multiply", "Subtract", "Divide"], value="Add", label="Choose Arithmetic Operation", min_width=100, scale=0.3 ) with gr.Row(): submit = gr.Button("Run Operation") with gr.Column(): gr.HTML("

Arithmetic Operation Result

") result = gr.Number() submit.click(arithmetic, inputs=[num1, num2, operation], outputs=[result]) app.launch(server_name="0.0.0.0", server_port=7860, mcp_server = True)