Spaces:
Sleeping
Sleeping
| 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( | |
| "<h1 style='text-align:center;'><strong>R-Powered Calculator</strong></h1>" | |
| ) | |
| 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("<h2 style='text-align:center;'><strong>Arithmetic Operation Result</strong></h2>") | |
| 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) | |