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()