UCS2014 commited on
Commit
3d419d3
·
verified ·
1 Parent(s): 5b2a487

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -13
app.py CHANGED
@@ -196,9 +196,9 @@ def df_centered_rounded(df: pd.DataFrame, hide_index=True):
196
  numcols = out.select_dtypes(include=[np.number]).columns
197
  styler = (
198
  out.style
199
- .format({c: "{:.2f}" for c in numcols})
200
- .set_properties(**{"text-align": "center"})
201
- .set_table_styles(TABLE_CENTER_CSS)
202
  )
203
  st.dataframe(styler, use_container_width=True, hide_index=hide_index)
204
 
@@ -352,7 +352,6 @@ except AttributeError:
352
  return wrapper
353
  return deco
354
 
355
- @dialog("Preview data")
356
  def preview_modal(book: dict[str, pd.DataFrame]):
357
  if not book:
358
  st.info("No data loaded yet."); return
@@ -418,6 +417,7 @@ st.session_state.setdefault("dev_file_name","")
418
  st.session_state.setdefault("dev_file_bytes",b"")
419
  st.session_state.setdefault("dev_file_loaded",False)
420
  st.session_state.setdefault("dev_preview",False)
 
421
 
422
  # =========================
423
  # Branding in Sidebar
@@ -489,7 +489,7 @@ if st.session_state.app_step == "dev":
489
  st.sidebar.caption(f"**Data loaded:** {st.session_state.dev_file_name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
490
 
491
  if st.sidebar.button("Preview data", use_container_width=True, disabled=not st.session_state.dev_file_loaded):
492
- preview_modal(read_book_bytes(st.session_state.dev_file_bytes))
493
  st.session_state.dev_preview = True
494
 
495
  run = st.sidebar.button("Run Model", type="primary", use_container_width=True)
@@ -566,7 +566,7 @@ if st.session_state.app_step == "validate":
566
  df0 = next(iter(book.values()))
567
  st.sidebar.caption(f"**Data loaded:** {up.name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
568
  if st.sidebar.button("Preview data", use_container_width=True, disabled=(up is None)):
569
- preview_modal(read_book_bytes(up.getvalue()))
570
  go_btn = st.sidebar.button("Predict", type="primary", use_container_width=True)
571
  if st.sidebar.button("⬅ Back to Case Building", use_container_width=True): st.session_state.app_step="dev"; st.rerun()
572
  if st.sidebar.button("Proceed to Prediction ▶", use_container_width=True): st.session_state.app_step="predict"; st.rerun()
@@ -607,7 +607,7 @@ if st.session_state.app_step == "validate":
607
  with col_cross:
608
  st.pyplot(
609
  cross_plot_static(st.session_state.results["Validate"][TARGET],
610
- st.session_state.results["Validate"]["UCS_Pred"]),
611
  use_container_width=True
612
  )
613
  with col_track:
@@ -634,7 +634,7 @@ if st.session_state.app_step == "predict":
634
  df0 = next(iter(book.values()))
635
  st.sidebar.caption(f"**Data loaded:** {up.name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
636
  if st.sidebar.button("Preview data", use_container_width=True, disabled=(up is None)):
637
- preview_modal(read_book_bytes(up.getvalue()))
638
  go_btn = st.sidebar.button("Predict", type="primary", use_container_width=True)
639
  if st.sidebar.button("⬅ Back to Case Building", use_container_width=True): st.session_state.app_step="dev"; st.rerun()
640
 
@@ -668,11 +668,11 @@ if st.session_state.app_step == "predict":
668
  table = pd.DataFrame({
669
  "Metric": ["# points","Pred min","Pred max","Pred mean","Pred std","OOR %"],
670
  "Value": [sv["n"],
671
- round(sv["pred_min"],2),
672
- round(sv["pred_max"],2),
673
- round(sv["pred_mean"],2),
674
- round(sv["pred_std"],2),
675
- f'{sv["oor"]:.1f}%']
676
  })
677
  st.success("Predictions ready ✓")
678
  df_centered_rounded(table, hide_index=True)
@@ -683,6 +683,47 @@ if st.session_state.app_step == "predict":
683
  use_container_width=True, config={"displayModeBar": False, "scrollZoom": True}
684
  )
685
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
686
  # =========================
687
  # Footer
688
  # =========================
 
196
  numcols = out.select_dtypes(include=[np.number]).columns
197
  styler = (
198
  out.style
199
+ .format({c: "{:.2f}" for c in numcols})
200
+ .set_properties(**{"text-align": "center"})
201
+ .set_table_styles(TABLE_CENTER_CSS)
202
  )
203
  st.dataframe(styler, use_container_width=True, hide_index=hide_index)
204
 
 
352
  return wrapper
353
  return deco
354
 
 
355
  def preview_modal(book: dict[str, pd.DataFrame]):
356
  if not book:
357
  st.info("No data loaded yet."); return
 
417
  st.session_state.setdefault("dev_file_bytes",b"")
418
  st.session_state.setdefault("dev_file_loaded",False)
419
  st.session_state.setdefault("dev_preview",False)
420
+ st.session_state.setdefault("show_preview_modal", False) # New state variable
421
 
422
  # =========================
423
  # Branding in Sidebar
 
489
  st.sidebar.caption(f"**Data loaded:** {st.session_state.dev_file_name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
490
 
491
  if st.sidebar.button("Preview data", use_container_width=True, disabled=not st.session_state.dev_file_loaded):
492
+ st.session_state.show_preview_modal = True # Set state to show modal
493
  st.session_state.dev_preview = True
494
 
495
  run = st.sidebar.button("Run Model", type="primary", use_container_width=True)
 
566
  df0 = next(iter(book.values()))
567
  st.sidebar.caption(f"**Data loaded:** {up.name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
568
  if st.sidebar.button("Preview data", use_container_width=True, disabled=(up is None)):
569
+ st.session_state.show_preview_modal = True # Set state to show modal
570
  go_btn = st.sidebar.button("Predict", type="primary", use_container_width=True)
571
  if st.sidebar.button("⬅ Back to Case Building", use_container_width=True): st.session_state.app_step="dev"; st.rerun()
572
  if st.sidebar.button("Proceed to Prediction ▶", use_container_width=True): st.session_state.app_step="predict"; st.rerun()
 
607
  with col_cross:
608
  st.pyplot(
609
  cross_plot_static(st.session_state.results["Validate"][TARGET],
610
+ st.session_state.results["Validate"]["UCS_Pred"]),
611
  use_container_width=True
612
  )
613
  with col_track:
 
634
  df0 = next(iter(book.values()))
635
  st.sidebar.caption(f"**Data loaded:** {up.name} • {df0.shape[0]} rows × {df0.shape[1]} cols")
636
  if st.sidebar.button("Preview data", use_container_width=True, disabled=(up is None)):
637
+ st.session_state.show_preview_modal = True # Set state to show modal
638
  go_btn = st.sidebar.button("Predict", type="primary", use_container_width=True)
639
  if st.sidebar.button("⬅ Back to Case Building", use_container_width=True): st.session_state.app_step="dev"; st.rerun()
640
 
 
668
  table = pd.DataFrame({
669
  "Metric": ["# points","Pred min","Pred max","Pred mean","Pred std","OOR %"],
670
  "Value": [sv["n"],
671
+ round(sv["pred_min"],2),
672
+ round(sv["pred_max"],2),
673
+ round(sv["pred_mean"],2),
674
+ round(sv["pred_std"],2),
675
+ f'{sv["oor"]:.1f}%']
676
  })
677
  st.success("Predictions ready ✓")
678
  df_centered_rounded(table, hide_index=True)
 
683
  use_container_width=True, config={"displayModeBar": False, "scrollZoom": True}
684
  )
685
 
686
+ # =========================
687
+ # Run preview modal after all other elements
688
+ # =========================
689
+ if st.session_state.show_preview_modal:
690
+ # Get the correct book based on the current app step
691
+ book_to_preview = {}
692
+ if st.session_state.app_step == "dev":
693
+ book_to_preview = read_book_bytes(st.session_state.dev_file_bytes)
694
+ elif st.session_state.app_step in ["validate", "predict"] and up is not None:
695
+ book_to_preview = read_book_bytes(up.getvalue())
696
+
697
+ # Use a try-except block to handle cases where 'up' might be None
698
+ # and the logic tries to access its attributes.
699
+ try:
700
+ if st.session_state.app_step == "validate" and up is not None:
701
+ book_to_preview = read_book_bytes(up.getvalue())
702
+ elif st.session_state.app_step == "predict" and up is not None:
703
+ book_to_preview = read_book_bytes(up.getvalue())
704
+ except NameError:
705
+ book_to_preview = {}
706
+
707
+ with st.expander("Preview data", expanded=True):
708
+ if not book_to_preview:
709
+ st.info("No data loaded yet.")
710
+ else:
711
+ names = list(book_to_preview.keys())
712
+ tabs = st.tabs(names)
713
+ for t, name in zip(tabs, names):
714
+ with t:
715
+ df = book_to_preview[name]
716
+ t1, t2 = st.tabs(["Tracks", "Summary"])
717
+ with t1:
718
+ st.pyplot(preview_tracks(df, FEATURES), use_container_width=True)
719
+ with t2:
720
+ tbl = (df[FEATURES]
721
+ .agg(['min','max','mean','std'])
722
+ .T.rename(columns={"min":"Min","max":"Max","mean":"Mean","std":"Std"}))
723
+ df_centered_rounded(tbl.reset_index(names="Feature"))
724
+ # Reset the state variable after the modal is displayed
725
+ st.session_state.show_preview_modal = False
726
+
727
  # =========================
728
  # Footer
729
  # =========================