Update app.py
Browse files
app.py
CHANGED
@@ -315,7 +315,7 @@ def actualizar_analisis(df, n_replicas, unidad_medida, absorbancia_blanco, *repl
|
|
315 |
|
316 |
return estado, fig, informe, df
|
317 |
|
318 |
-
def actualizar_graficos(df, n_replicas, unidad_medida,
|
319 |
palette_puntos, estilo_puntos,
|
320 |
palette_linea_ajuste, estilo_linea_ajuste,
|
321 |
palette_linea_ideal, estilo_linea_ideal,
|
@@ -324,12 +324,6 @@ def actualizar_graficos(df, n_replicas, unidad_medida, absorbancia_blanco,
|
|
324 |
if df is None or df.empty:
|
325 |
return None
|
326 |
|
327 |
-
# Ajustar valores de absorbancia reales por el valor del blanco
|
328 |
-
for i in range(1, n_replicas + 1):
|
329 |
-
col_real = f"Concentraci贸n Real {i} ({unidad_medida})"
|
330 |
-
df[col_real] = pd.to_numeric(df[col_real], errors='coerce')
|
331 |
-
df[col_real] = df[col_real] - absorbancia_blanco
|
332 |
-
|
333 |
# Asegurarse de que los c谩lculos est茅n actualizados
|
334 |
df = calcular_promedio_desviacion(df, n_replicas, unidad_medida)
|
335 |
|
@@ -484,6 +478,26 @@ def exportar_latex(df, informe_md):
|
|
484 |
|
485 |
return filename # Retornamos el nombre del archivo
|
486 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
487 |
# Funciones de ejemplo
|
488 |
def cargar_ejemplo_ufc(n_replicas):
|
489 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
@@ -505,18 +519,6 @@ def cargar_ejemplo_od(n_replicas):
|
|
505 |
df[f"Concentraci贸n Real {i} (OD)"] = valores_reales
|
506 |
return 1.0, "OD", 7, df
|
507 |
|
508 |
-
def limpiar_datos(n_replicas):
|
509 |
-
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
510 |
-
return (
|
511 |
-
2000000, # Concentraci贸n Inicial
|
512 |
-
"UFC", # Unidad de Medida
|
513 |
-
7, # N煤mero de filas
|
514 |
-
df, # Tabla Output
|
515 |
-
"", # Estado Output
|
516 |
-
None, # Gr谩ficos Output
|
517 |
-
"" # Informe Output
|
518 |
-
)
|
519 |
-
|
520 |
def generar_datos_sinteticos_evento(df, n_replicas, unidad_medida, absorbancia_blanco):
|
521 |
df = df.copy()
|
522 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
@@ -561,14 +563,14 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
561 |
with gr.Tab("馃摑 Datos de Calibraci贸n"):
|
562 |
with gr.Row():
|
563 |
concentracion_input = gr.Number(
|
564 |
-
value=
|
565 |
label="Concentraci贸n Inicial",
|
566 |
-
precision=
|
567 |
)
|
568 |
unidad_input = gr.Textbox(
|
569 |
-
value="
|
570 |
label="Unidad de Medida",
|
571 |
-
placeholder="
|
572 |
)
|
573 |
filas_slider = gr.Slider(
|
574 |
minimum=1,
|
@@ -601,6 +603,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
601 |
calcular_btn = gr.Button("馃攧 Calcular", variant="primary")
|
602 |
limpiar_btn = gr.Button("馃棏 Limpiar Datos", variant="secondary")
|
603 |
ajustar_decimales_btn = gr.Button("馃洜 Ajustar Decimales", variant="secondary")
|
|
|
604 |
|
605 |
with gr.Row():
|
606 |
ejemplo_ufc_btn = gr.Button("馃搵 Cargar Ejemplo UFC", variant="secondary")
|
@@ -695,7 +698,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
695 |
graficar_btn.click(
|
696 |
fn=actualizar_graficos,
|
697 |
inputs=[
|
698 |
-
tabla_output, replicas_slider, unidad_input,
|
699 |
palette_puntos_dropdown, estilo_puntos_dropdown,
|
700 |
palette_linea_ajuste_dropdown, estilo_linea_ajuste_dropdown,
|
701 |
palette_linea_ideal_dropdown, estilo_linea_ideal_dropdown,
|
@@ -712,6 +715,13 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
712 |
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output]
|
713 |
)
|
714 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
715 |
# Eventos de los botones de ejemplo
|
716 |
ejemplo_ufc_btn.click(
|
717 |
fn=cargar_ejemplo_ufc,
|
@@ -804,13 +814,13 @@ with gr.Blocks(theme=gr.themes.Soft()) as interfaz:
|
|
804 |
# Inicializar la interfaz con el ejemplo base
|
805 |
def iniciar_con_ejemplo():
|
806 |
n_replicas = 1
|
807 |
-
df = generar_tabla(7,
|
808 |
# Valores reales de ejemplo
|
809 |
-
df[f"Concentraci贸n Real 1 (
|
810 |
-
estado, fig, informe, df = actualizar_analisis(df, n_replicas, "
|
811 |
return (
|
812 |
-
|
813 |
-
"
|
814 |
7,
|
815 |
df,
|
816 |
estado,
|
|
|
315 |
|
316 |
return estado, fig, informe, df
|
317 |
|
318 |
+
def actualizar_graficos(df, n_replicas, unidad_medida,
|
319 |
palette_puntos, estilo_puntos,
|
320 |
palette_linea_ajuste, estilo_linea_ajuste,
|
321 |
palette_linea_ideal, estilo_linea_ideal,
|
|
|
324 |
if df is None or df.empty:
|
325 |
return None
|
326 |
|
|
|
|
|
|
|
|
|
|
|
|
|
327 |
# Asegurarse de que los c谩lculos est茅n actualizados
|
328 |
df = calcular_promedio_desviacion(df, n_replicas, unidad_medida)
|
329 |
|
|
|
478 |
|
479 |
return filename # Retornamos el nombre del archivo
|
480 |
|
481 |
+
def limpiar_datos(n_replicas):
|
482 |
+
df = generar_tabla(7, 1.0, "OD", n_replicas)
|
483 |
+
return (
|
484 |
+
1.0, # Concentraci贸n Inicial
|
485 |
+
"OD", # Unidad de Medida
|
486 |
+
7, # N煤mero de filas
|
487 |
+
df, # Tabla Output
|
488 |
+
"", # Estado Output
|
489 |
+
None, # Gr谩ficos Output
|
490 |
+
"" # Informe Output
|
491 |
+
)
|
492 |
+
|
493 |
+
def subir_datos_replica(df, n_replicas, unidad_medida, datos_replica):
|
494 |
+
df = df.copy()
|
495 |
+
for i, dato in enumerate(datos_replica):
|
496 |
+
if dato is not None:
|
497 |
+
col_real = f"Concentraci贸n Real {i + 1} ({unidad_medida})"
|
498 |
+
df.at[0, col_real] = dato
|
499 |
+
return df
|
500 |
+
|
501 |
# Funciones de ejemplo
|
502 |
def cargar_ejemplo_ufc(n_replicas):
|
503 |
df = generar_tabla(7, 2000000, "UFC", n_replicas)
|
|
|
519 |
df[f"Concentraci贸n Real {i} (OD)"] = valores_reales
|
520 |
return 1.0, "OD", 7, df
|
521 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
522 |
def generar_datos_sinteticos_evento(df, n_replicas, unidad_medida, absorbancia_blanco):
|
523 |
df = df.copy()
|
524 |
col_predicha_num = "Concentraci贸n Predicha Num茅rica"
|
|
|
563 |
with gr.Tab("馃摑 Datos de Calibraci贸n"):
|
564 |
with gr.Row():
|
565 |
concentracion_input = gr.Number(
|
566 |
+
value=1.0,
|
567 |
label="Concentraci贸n Inicial",
|
568 |
+
precision=2
|
569 |
)
|
570 |
unidad_input = gr.Textbox(
|
571 |
+
value="OD",
|
572 |
label="Unidad de Medida",
|
573 |
+
placeholder="OD, UFC, etc..."
|
574 |
)
|
575 |
filas_slider = gr.Slider(
|
576 |
minimum=1,
|
|
|
603 |
calcular_btn = gr.Button("馃攧 Calcular", variant="primary")
|
604 |
limpiar_btn = gr.Button("馃棏 Limpiar Datos", variant="secondary")
|
605 |
ajustar_decimales_btn = gr.Button("馃洜 Ajustar Decimales", variant="secondary")
|
606 |
+
subir_datos_btn = gr.Button("馃摛 Subir Datos de R茅plica", variant="secondary")
|
607 |
|
608 |
with gr.Row():
|
609 |
ejemplo_ufc_btn = gr.Button("馃搵 Cargar Ejemplo UFC", variant="secondary")
|
|
|
698 |
graficar_btn.click(
|
699 |
fn=actualizar_graficos,
|
700 |
inputs=[
|
701 |
+
tabla_output, replicas_slider, unidad_input,
|
702 |
palette_puntos_dropdown, estilo_puntos_dropdown,
|
703 |
palette_linea_ajuste_dropdown, estilo_linea_ajuste_dropdown,
|
704 |
palette_linea_ideal_dropdown, estilo_linea_ideal_dropdown,
|
|
|
715 |
outputs=[concentracion_input, unidad_input, filas_slider, tabla_output, estado_output, graficos_output, informe_output]
|
716 |
)
|
717 |
|
718 |
+
# Evento para subir datos de r茅plica
|
719 |
+
subir_datos_btn.click(
|
720 |
+
fn=subir_datos_replica,
|
721 |
+
inputs=[tabla_output, replicas_slider, unidad_input, *replica_inputs],
|
722 |
+
outputs=tabla_output
|
723 |
+
)
|
724 |
+
|
725 |
# Eventos de los botones de ejemplo
|
726 |
ejemplo_ufc_btn.click(
|
727 |
fn=cargar_ejemplo_ufc,
|
|
|
814 |
# Inicializar la interfaz con el ejemplo base
|
815 |
def iniciar_con_ejemplo():
|
816 |
n_replicas = 1
|
817 |
+
df = generar_tabla(7, 1.0, "OD", n_replicas)
|
818 |
# Valores reales de ejemplo
|
819 |
+
df[f"Concentraci贸n Real 1 (OD)"] = [1.00, 0.80, 0.60, 0.40, 0.20, 0.10, 0.05]
|
820 |
+
estado, fig, informe, df = actualizar_analisis(df, n_replicas, "OD", 0.0)
|
821 |
return (
|
822 |
+
1.0,
|
823 |
+
"OD",
|
824 |
7,
|
825 |
df,
|
826 |
estado,
|