|
|
import gradio as gr |
|
|
import pandas as pd |
|
|
import numpy as np |
|
|
|
|
|
|
|
|
def simple_greet(name): |
|
|
return f"Hello {name}!" |
|
|
|
|
|
def simple_calculator(x, y, operation): |
|
|
if operation == "add": |
|
|
return x + y |
|
|
elif operation == "subtract": |
|
|
return x - y |
|
|
elif operation == "multiply": |
|
|
return x * y |
|
|
elif operation == "divide": |
|
|
return x / y if y != 0 else "Cannot divide by zero" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def analyze_data(csv_file, chart_type): |
|
|
"""Analyze uploaded CSV and return info""" |
|
|
if csv_file is None: |
|
|
return "Please upload a CSV file" |
|
|
|
|
|
try: |
|
|
|
|
|
df = pd.read_csv(csv_file.name) |
|
|
|
|
|
|
|
|
info = f"""📊 Dataset Analysis: |
|
|
|
|
|
🔢 Shape: {df.shape[0]} rows × {df.shape[1]} columns |
|
|
📝 Columns: {', '.join(df.columns.tolist())} |
|
|
❌ Missing values: {df.isnull().sum().sum()} |
|
|
|
|
|
📈 Numeric columns: {len(df.select_dtypes(include=['number']).columns)} |
|
|
📋 Text columns: {len(df.select_dtypes(include=['object']).columns)} |
|
|
|
|
|
💡 Chart type selected: {chart_type} |
|
|
|
|
|
📋 First 5 rows preview: |
|
|
{df.head().to_string()} |
|
|
|
|
|
📊 Summary statistics: |
|
|
{df.describe().to_string() if len(df.select_dtypes(include=['number']).columns) > 0 else 'No numeric data for statistics'} |
|
|
""" |
|
|
return info |
|
|
|
|
|
except Exception as e: |
|
|
return f"Error reading file: {str(e)}" |
|
|
|
|
|
def greet(name, enthusiasm): |
|
|
"""Simple greeting function""" |
|
|
excitement = "!" * int(enthusiasm) |
|
|
return f"Hello {name}{excitement}" |
|
|
|
|
|
def calculator(num1, operation, num2): |
|
|
"""Simple calculator""" |
|
|
if operation == "Add": |
|
|
return num1 + num2 |
|
|
elif operation == "Subtract": |
|
|
return num1 - num2 |
|
|
elif operation == "Multiply": |
|
|
return num1 * num2 |
|
|
elif operation == "Divide": |
|
|
return num1 / num2 if num2 != 0 else "Cannot divide by zero!" |
|
|
|
|
|
|
|
|
with gr.Blocks(title="Gradio Demo App") as demo: |
|
|
gr.Markdown("# 🚀 Gradio Demo Application") |
|
|
gr.Markdown("This demo showcases various Gradio components and functionalities.") |
|
|
|
|
|
with gr.Tab("📊 Data Analysis"): |
|
|
gr.Markdown("## Upload CSV and Create Visualizations") |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(): |
|
|
csv_input = gr.File(label="Upload CSV File", file_types=[".csv"]) |
|
|
chart_dropdown = gr.Dropdown( |
|
|
choices=["Histogram", "Scatter Plot"], |
|
|
label="Chart Type", |
|
|
value="Histogram" |
|
|
) |
|
|
analyze_btn = gr.Button("Analyze Data", variant="primary") |
|
|
|
|
|
with gr.Column(): |
|
|
info_output = gr.Textbox(label="Dataset Info", lines=15, max_lines=20) |
|
|
|
|
|
analyze_btn.click( |
|
|
fn=analyze_data, |
|
|
inputs=[csv_input, chart_dropdown], |
|
|
outputs=info_output |
|
|
) |
|
|
|
|
|
with gr.Tab("👋 Greeting"): |
|
|
gr.Markdown("## Personal Greeting Generator") |
|
|
|
|
|
with gr.Row(): |
|
|
name_input = gr.Textbox(label="Your Name", placeholder="Enter your name") |
|
|
enthusiasm_slider = gr.Slider(1, 10, value=3, label="Enthusiasm Level") |
|
|
|
|
|
greet_output = gr.Textbox(label="Greeting") |
|
|
greet_btn = gr.Button("Generate Greeting") |
|
|
|
|
|
greet_btn.click( |
|
|
fn=greet, |
|
|
inputs=[name_input, enthusiasm_slider], |
|
|
outputs=greet_output |
|
|
) |
|
|
|
|
|
with gr.Tab("🧮 Calculator"): |
|
|
gr.Markdown("## Simple Calculator") |
|
|
|
|
|
with gr.Row(): |
|
|
num1_input = gr.Number(label="First Number", value=0) |
|
|
operation_radio = gr.Radio( |
|
|
choices=["Add", "Subtract", "Multiply", "Divide"], |
|
|
label="Operation", |
|
|
value="Add" |
|
|
) |
|
|
num2_input = gr.Number(label="Second Number", value=0) |
|
|
|
|
|
calc_output = gr.Number(label="Result") |
|
|
calc_btn = gr.Button("Calculate", variant="secondary") |
|
|
|
|
|
calc_btn.click( |
|
|
fn=calculator, |
|
|
inputs=[num1_input, operation_radio, num2_input], |
|
|
outputs=calc_output |
|
|
) |
|
|
|
|
|
with gr.Tab("🎨 Interactive Demo"): |
|
|
gr.Markdown("## Real-time Updates") |
|
|
|
|
|
with gr.Row(): |
|
|
slider_input = gr.Slider(0, 100, value=50, label="Value") |
|
|
checkbox_input = gr.Checkbox(label="Enable Processing", value=True) |
|
|
|
|
|
with gr.Row(): |
|
|
text_output = gr.Textbox(label="Live Output") |
|
|
number_output = gr.Number(label="Processed Value") |
|
|
|
|
|
def process_inputs(value, enabled): |
|
|
if enabled: |
|
|
processed = value * 1.5 |
|
|
message = f"Processing enabled: {value} → {processed}" |
|
|
return message, processed |
|
|
else: |
|
|
return "Processing disabled", value |
|
|
|
|
|
|
|
|
slider_input.change( |
|
|
fn=process_inputs, |
|
|
inputs=[slider_input, checkbox_input], |
|
|
outputs=[text_output, number_output] |
|
|
) |
|
|
checkbox_input.change( |
|
|
fn=process_inputs, |
|
|
inputs=[slider_input, checkbox_input], |
|
|
outputs=[text_output, number_output] |
|
|
) |
|
|
|
|
|
with gr.Tab("📝 Basic Examples"): |
|
|
gr.Markdown("## Simple Gradio Code Examples") |
|
|
|
|
|
gr.Markdown(""" |
|
|
### Example 1: Simple Greeter |
|
|
```python |
|
|
def greet(name): |
|
|
return f"Hello {name}!" |
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=greet, |
|
|
inputs="text", |
|
|
outputs="text" |
|
|
) |
|
|
``` |
|
|
""") |
|
|
|
|
|
with gr.Row(): |
|
|
simple_name = gr.Textbox(label="Your Name", placeholder="Enter name") |
|
|
simple_greet_output = gr.Textbox(label="Greeting") |
|
|
|
|
|
simple_greet_btn = gr.Button("Greet Me!") |
|
|
simple_greet_btn.click( |
|
|
fn=simple_greet, |
|
|
inputs=simple_name, |
|
|
outputs=simple_greet_output |
|
|
) |
|
|
|
|
|
gr.Markdown(""" |
|
|
### Example 2: Calculator with Interface |
|
|
```python |
|
|
def calculator(x, y, operation): |
|
|
if operation == "add": |
|
|
return x + y |
|
|
# ... other operations |
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=calculator, |
|
|
inputs=[ |
|
|
gr.Number(label="First Number"), |
|
|
gr.Number(label="Second Number"), |
|
|
gr.Radio(["add", "subtract", "multiply", "divide"]) |
|
|
], |
|
|
outputs="text" |
|
|
) |
|
|
``` |
|
|
""") |
|
|
|
|
|
with gr.Row(): |
|
|
calc_x = gr.Number(label="X", value=0) |
|
|
calc_y = gr.Number(label="Y", value=0) |
|
|
calc_op = gr.Radio(["add", "subtract", "multiply", "divide"], |
|
|
label="Operation", value="add") |
|
|
|
|
|
calc_result = gr.Textbox(label="Result") |
|
|
calc_btn = gr.Button("Calculate") |
|
|
|
|
|
calc_btn.click( |
|
|
fn=simple_calculator, |
|
|
inputs=[calc_x, calc_y, calc_op], |
|
|
outputs=calc_result |
|
|
) |
|
|
|
|
|
gr.Markdown(""" |
|
|
### Example 3: Custom Layout with Blocks |
|
|
```python |
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("# My App") |
|
|
|
|
|
with gr.Row(): |
|
|
input1 = gr.Textbox() |
|
|
input2 = gr.Slider() |
|
|
|
|
|
output = gr.Textbox() |
|
|
btn = gr.Button("Process") |
|
|
|
|
|
btn.click(fn=my_function, inputs=[input1, input2], outputs=output) |
|
|
|
|
|
demo.launch() |
|
|
``` |
|
|
""") |
|
|
|
|
|
gr.Markdown("**Key Components:**") |
|
|
gr.Markdown("- `gr.Interface()` - Simple wrapper") |
|
|
gr.Markdown("- `gr.Blocks()` - Custom layouts") |
|
|
gr.Markdown("- `gr.Row()`, `gr.Column()` - Layout containers") |
|
|
gr.Markdown("- `gr.Textbox()`, `gr.Number()`, `gr.Slider()` - Input components") |
|
|
gr.Markdown("- `demo.launch()` - Start the server") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch( |
|
|
server_name="0.0.0.0", |
|
|
server_port=7861, |
|
|
share=False, |
|
|
debug=True |
|
|
) |