# UI.py import gradio as gr from interface import process_and_plot def create_interface(): """ Esta función crea la interfaz de usuario y la devuelve para que pueda ser lanzada desde app.py utilizando demo.launch(). """ with gr.Blocks() as demo: # Título de la interfaz gr.Markdown("# Modelado de Bioprocesos con Ajuste de Datos") with gr.Row(): with gr.Column(): # Subir archivo Excel file_input = gr.File(label="Subir archivo Excel", file_types=[".xlsx"]) # Entradas de ecuaciones de Biomasa biomass_eq1 = gr.Textbox( label="Ecuación de Biomasa 1", value="(xo * exp(um * t)) / (1 - (xo / xm) * (1 - exp(um * t)))" ) biomass_eq2 = gr.Textbox(label="Ecuación de Biomasa 2", value="") biomass_eq3 = gr.Textbox(label="Ecuación de Biomasa 3", value="") # Parámetros de Biomasa biomass_param1 = gr.Textbox( label="Parámetros de Biomasa 1 (separados por coma)", value="xo, xm, um" ) biomass_param2 = gr.Textbox(label="Parámetros de Biomasa 2 (separados por coma)", value="") biomass_param3 = gr.Textbox(label="Parámetros de Biomasa 3 (separados por coma)", value="") # Límites de los parámetros para Biomasa biomass_bound1 = gr.Textbox( label="Límites de Parámetros de Biomasa 1 (formato: (low, high) para cada parámetro)", value="(0, inf), (0, inf), (0, inf)" ) biomass_bound2 = gr.Textbox( label="Límites de Parámetros de Biomasa 2 (formato: (low, high) para cada parámetro)", value="" ) biomass_bound3 = gr.Textbox( label="Límites de Parámetros de Biomasa 3 (formato: (low, high) para cada parámetro)", value="" ) # Número de ecuaciones de Biomasa biomass_eq_count = gr.Number( label="Número de ecuaciones de Biomasa", value=1, precision=0 ) with gr.Column(): # Entradas de ecuaciones de Sustrato substrate_eq1 = gr.Textbox( label="Ecuación de Sustrato 1", value="so - p * X(t) - q * log(1 - (xo / xm) * (1 - exp(um * t)))" ) substrate_eq2 = gr.Textbox(label="Ecuación de Sustrato 2", value="") substrate_eq3 = gr.Textbox(label="Ecuación de Sustrato 3", value="") # Parámetros de Sustrato substrate_param1 = gr.Textbox( label="Parámetros de Sustrato 1 (separados por coma)", value="so, p, q" ) substrate_param2 = gr.Textbox(label="Parámetros de Sustrato 2 (separados por coma)", value="") substrate_param3 = gr.Textbox(label="Parámetros de Sustrato 3 (separados por coma)", value="") # Límites de los parámetros para Sustrato substrate_bound1 = gr.Textbox( label="Límites de Parámetros de Sustrato 1 (formato: (low, high) para cada parámetro)", value="(0, inf), (0, inf), (0, inf)" ) substrate_bound2 = gr.Textbox( label="Límites de Parámetros de Sustrato 2 (formato: (low, high) para cada parámetro)", value="" ) substrate_bound3 = gr.Textbox( label="Límites de Parámetros de Sustrato 3 (formato: (low, high) para cada parámetro)", value="" ) # Número de ecuaciones de Sustrato substrate_eq_count = gr.Number( label="Número de ecuaciones de Sustrato", value=1, precision=0 ) with gr.Column(): # Entradas de ecuaciones de Producto product_eq1 = gr.Textbox( label="Ecuación de Producto 1", value="po + alpha * X(t) + beta * log(1 - (xo / xm) * (1 - exp(um * t)))" ) product_eq2 = gr.Textbox(label="Ecuación de Producto 2", value="") product_eq3 = gr.Textbox(label="Ecuación de Producto 3", value="") # Parámetros de Producto product_param1 = gr.Textbox( label="Parámetros de Producto 1 (separados por coma)", value="po, alpha, beta" ) product_param2 = gr.Textbox(label="Parámetros de Producto 2 (separados por coma)", value="") product_param3 = gr.Textbox(label="Parámetros de Producto 3 (separados por coma)", value="") # Límites de los parámetros para Producto product_bound1 = gr.Textbox( label="Límites de Parámetros de Producto 1 (formato: (low, high) para cada parámetro)", value="(0, inf), (0, inf), (0, inf)" ) product_bound2 = gr.Textbox( label="Límites de Parámetros de Producto 2 (formato: (low, high) para cada parámetro)", value="" ) product_bound3 = gr.Textbox( label="Límites de Parámetros de Producto 3 (formato: (low, high) para cada parámetro)", value="" ) # Número de ecuaciones de Producto product_eq_count = gr.Number( label="Número de ecuaciones de Producto", value=1, precision=0 ) # Opciones de visualización show_legend = gr.Checkbox(label="Mostrar leyenda", value=True) show_params = gr.Checkbox(label="Mostrar parámetros ajustados", value=True) legend_position = gr.Dropdown( label="Posición de la leyenda", choices=['best', 'upper right', 'upper left', 'lower right', 'lower left'], value='best' ) # Botón para procesar y graficar submit_button = gr.Button("Procesar y graficar") # Salidas: imagen del gráfico y análisis image_output = gr.Image(label="Gráfico generado") analysis_output = gr.Textbox(label="Análisis del Modelo", lines=10) # Conexión entre el botón y la función process_and_plot submit_button.click( fn=process_and_plot, inputs=[ file_input, biomass_eq1, biomass_eq2, biomass_eq3, biomass_param1, biomass_param2, biomass_param3, biomass_bound1, biomass_bound2, biomass_bound3, substrate_eq1, substrate_eq2, substrate_eq3, substrate_param1, substrate_param2, substrate_param3, substrate_bound1, substrate_bound2, substrate_bound3, product_eq1, product_eq2, product_eq3, product_param1, product_param2, product_param3, product_bound1, product_bound2, product_bound3, legend_position, show_legend, show_params, biomass_eq_count, substrate_eq_count, product_eq_count ], outputs=[image_output, analysis_output] ) return demo