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