|
|
import gradio as gr
|
|
|
from function_generator import FunctionGenerator
|
|
|
|
|
|
def generate_function(sequence_str):
|
|
|
try:
|
|
|
sequence = [float(x.strip()) for x in sequence_str.split(',')]
|
|
|
generator = FunctionGenerator()
|
|
|
symbol_expr, general_expr, latex_expr = generator.generate(sequence)
|
|
|
|
|
|
return (
|
|
|
f"y = {str(symbol_expr)}",
|
|
|
general_expr,
|
|
|
f"$$\\Large {latex_expr}$$"
|
|
|
)
|
|
|
except Exception as err:
|
|
|
return f"错误: {str(err)}", "", ""
|
|
|
|
|
|
|
|
|
with gr.Blocks() as demo:
|
|
|
gr.Markdown("## 数学函数生成器")
|
|
|
|
|
|
with gr.Row():
|
|
|
with gr.Column():
|
|
|
|
|
|
sequence_input = gr.Textbox(
|
|
|
label="输入数列(用逗号分隔)",
|
|
|
placeholder="例如: 1, 2, 4, 8, 16",
|
|
|
lines=1
|
|
|
)
|
|
|
|
|
|
|
|
|
with gr.Row():
|
|
|
example_btn1 = gr.Button("示例1: 1, 2, 4, 8, 16")
|
|
|
example_btn2 = gr.Button("示例2: 1, 3, 5, 7, 9")
|
|
|
example_btn3 = gr.Button("示例3: 1, 4, 9, 16, 25")
|
|
|
|
|
|
|
|
|
example_btn1.click(lambda: "1,2,4,8,16", outputs=sequence_input)
|
|
|
example_btn2.click(lambda: "1,3,5,7,9", outputs=sequence_input)
|
|
|
example_btn3.click(lambda: "1,4,9,16,25", outputs=sequence_input)
|
|
|
|
|
|
with gr.Row():
|
|
|
generate_btn = gr.Button("生成函数", variant="primary")
|
|
|
|
|
|
with gr.Row():
|
|
|
with gr.Column():
|
|
|
symbol_expr_output = gr.Textbox(label="符号表达式", interactive=False)
|
|
|
general_expr_output = gr.Textbox(label="一般数学表达式", interactive=False)
|
|
|
latex_expr_output = gr.Markdown(label="渲染的数学公式")
|
|
|
|
|
|
|
|
|
sequence_input.change(
|
|
|
fn=generate_function,
|
|
|
inputs=sequence_input,
|
|
|
outputs=[symbol_expr_output, general_expr_output, latex_expr_output]
|
|
|
)
|
|
|
|
|
|
|
|
|
generate_btn.click(
|
|
|
fn=generate_function,
|
|
|
inputs=sequence_input,
|
|
|
outputs=[symbol_expr_output, general_expr_output, latex_expr_output]
|
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
demo.launch()
|
|
|
|