File size: 7,202 Bytes
f3f77c0 8da03c5 4ff26a2 8da03c5 4ff26a2 8da03c5 4ff26a2 8da03c5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
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:
# 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)")
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, 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="")
# 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)")
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, 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="")
# 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)")
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, 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="")
# 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
|