|
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(). |
|
""" |
|
|
|
def parse_bounds(bounds_str, num_params): |
|
try: |
|
bounds = eval(f"[{bounds_str}]") |
|
if len(bounds) != num_params: |
|
raise ValueError |
|
lower_bounds = [b[0] for b in bounds] |
|
upper_bounds = [b[1] for b in bounds] |
|
return lower_bounds, upper_bounds |
|
except: |
|
lower_bounds = [-float('inf')] * num_params |
|
upper_bounds = [float('inf')] * num_params |
|
return lower_bounds, upper_bounds |
|
|
|
with gr.Blocks() as demo: |
|
|
|
gr.Markdown("# Modelado de Bioprocesos con Ajuste de Datos") |
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
|
|
file_input = gr.File(label="Subir archivo Excel", file_types=[".xlsx"]) |
|
|
|
|
|
biomass_eq1 = gr.Textbox(label="Ecuación de Biomasa 1", value="xo * 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="") |
|
|
|
|
|
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="") |
|
|
|
|
|
biomass_bound1 = gr.Textbox(label="Límites de Parámetros de Biomasa 1 (formato: (low, high) para cada parámetro)", value="(0, np.inf), (0, np.inf), (0, np.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="") |
|
|
|
|
|
biomass_eq_count = gr.Number(label="Número de ecuaciones de Biomasa", value=1, precision=0) |
|
|
|
with gr.Column(): |
|
|
|
substrate_eq1 = gr.Textbox(label="Ecuación de Sustrato 1", value="so - p * X(t)") |
|
substrate_eq2 = gr.Textbox(label="Ecuación de Sustrato 2", value="") |
|
substrate_eq3 = gr.Textbox(label="Ecuación de Sustrato 3", value="") |
|
|
|
|
|
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="") |
|
|
|
|
|
substrate_bound1 = gr.Textbox(label="Límites de Parámetros de Sustrato 1 (formato: (low, high) para cada parámetro)", value="(0, np.inf), (0, np.inf), (0, np.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="") |
|
|
|
|
|
substrate_eq_count = gr.Number(label="Número de ecuaciones de Sustrato", value=1, precision=0) |
|
|
|
with gr.Column(): |
|
|
|
product_eq1 = gr.Textbox(label="Ecuación de Producto 1", value="po + alpha * X(t)") |
|
product_eq2 = gr.Textbox(label="Ecuación de Producto 2", value="") |
|
product_eq3 = gr.Textbox(label="Ecuación de Producto 3", value="") |
|
|
|
|
|
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="") |
|
|
|
|
|
product_bound1 = gr.Textbox(label="Límites de Parámetros de Producto 1 (formato: (low, high) para cada parámetro)", value="(0, np.inf), (0, np.inf), (0, np.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="") |
|
|
|
|
|
product_eq_count = gr.Number(label="Número de ecuaciones de Producto", value=1, precision=0) |
|
|
|
|
|
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') |
|
|
|
|
|
submit_button = gr.Button("Procesar y graficar") |
|
|
|
|
|
image_output = gr.Image(label="Gráfico generado") |
|
analysis_output = gr.Textbox(label="Análisis del Modelo", lines=10) |
|
|
|
|
|
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 |
|
|
|
|