| import gradio as gr |
| import matplotlib.pyplot as plt |
| import sys |
| import io |
| import numpy as np |
| from PIL import Image |
|
|
| def run_code(code): |
| try: |
| old_stdout = sys.stdout |
| sys.stdout = io.StringIO() |
|
|
| local_env = {'plt': plt, 'np': np} |
| exec(code, {}, local_env) |
|
|
| output = sys.stdout.getvalue() |
| sys.stdout = old_stdout |
| |
| if 'plt' in code: |
| buf = io.BytesIO() |
| plt.draw() |
| plt.savefig(buf, format='png') |
| buf.seek(0) |
| img = Image.open(buf) |
| img_array = np.array(img) |
| plt.close() |
|
|
| if img_array.sum() > 0: |
| return img_array |
| else: |
| return create_image("Empty plot") |
|
|
| return create_image("No valid matplotlib plot found") |
|
|
| except Exception as e: |
| return create_image(f"Error: {str(e)}") |
|
|
| def create_image(message): |
| fig, ax = plt.subplots() |
| ax.text(0.5, 0.5, message, fontsize=20, ha='center', va='center') |
| ax.axis('off') |
| buf = io.BytesIO() |
| plt.savefig(buf, format='png') |
| buf.seek(0) |
| img = Image.open(buf) |
| plt.close() |
| return np.array(img) |
|
|
| interface = gr.Interface( |
| fn=run_code, |
| inputs=gr.Code(language="python", label="Enter Python Code"), |
| outputs=gr.Image(type="numpy", label="Output"), |
| title="Matplotlib Plot Generator", |
| description="Enter Python code that uses matplotlib to generate plots." |
| ) |
|
|
| interface.launch() |