@@ -122,10 +122,11 @@ def _umap(X):
122122
123123
124124def run_mapper (df , ** kwargs ):
125+ logger .info ("Mapper computation started..." )
125126 if df is None or df .empty :
126- logger .error ("No data found. Please upload a file first." )
127+ error = "Mapper computation failed: no data found, please load data first."
128+ logger .error (error )
127129 return
128- logger .info ("Computing Mapper." )
129130
130131 mapper_config = MapperConfig (** kwargs )
131132
@@ -197,10 +198,12 @@ def run_mapper(df, **kwargs):
197198 if clustering_scale_data :
198199 X = StandardScaler ().fit_transform (X )
199200 mapper_graph = mapper .fit_transform (X , y )
201+ logger .info ("Mapper computation completed." )
200202 return mapper_graph , df_y
201203
202204
203205def create_mapper_figure (df_X , df_y , df_target , mapper_graph , ** kwargs ):
206+ logger .info ("Mapper rendering started..." )
204207 df_colors = pd .concat ([df_target , df_y , df_X ], axis = 1 )
205208 mapper_config = MapperConfig (** kwargs )
206209 plot_dimensions = mapper_config .plot_dimensions
@@ -231,7 +234,7 @@ def create_mapper_figure(df_X, df_y, df_target, mapper_graph, **kwargs):
231234 xaxis = dict (scaleanchor = "y" ),
232235 uirevision = "constant" ,
233236 )
234- logger .info ("Mapper run completed successfully ." )
237+ logger .info ("Mapper rendering completed." )
235238 return mapper_fig
236239
237240
@@ -259,7 +262,7 @@ def __init__(self, storage):
259262
260263 ui .button (
261264 "⬆️ Load Data" ,
262- on_click = self .load_file ,
265+ on_click = self .load_data ,
263266 color = "themelight" ,
264267 ).classes ("w-full text-themedark" )
265268
@@ -619,39 +622,48 @@ def upload_file(self, file):
619622 df = pd .read_csv (file .content )
620623 self .storage ["df" ] = fix_data (df )
621624 self .storage ["labels" ] = pd .DataFrame ()
622- logger .info ("File uploaded successfully." )
623- ui .notify ("File uploaded successfully." , type = "info" )
625+ message = "File upload completed."
626+ logger .info (message )
627+ ui .notify (message , type = "info" )
624628 else :
625- logger .info ("No file uploaded." )
629+ error = "File upload failed: no file provided."
630+ logger .info (error )
631+ ui .notify (error , type = "warning" )
626632
627- def load_file (self ):
633+ def load_data (self ):
628634 if self .load_type .value == LOAD_EXAMPLE :
629635 if self .load_example .value == LOAD_EXAMPLE_DIGITS :
630636 df , labels = load_digits (as_frame = True , return_X_y = True )
631637 elif self .load_example .value == LOAD_EXAMPLE_IRIS :
632638 df , labels = load_iris (as_frame = True , return_X_y = True )
633639 else :
634- logger .error ("Unknown example dataset selected." )
640+ error = "Load data failed: unknown example dataset selected."
641+ logger .error (error )
642+ ui .notify (error , type = "warning" )
635643 return
636644 self .storage ["df" ] = fix_data (df )
637645 self .storage ["labels" ] = fix_data (labels )
638646 elif self .load_type .value == LOAD_CSV :
639647 df = self .storage .get ("df" , pd .DataFrame ())
640648 if df is None or df .empty :
641- logger .warning ("No data found. Please upload a file first." )
642- ui .notify ("No data found. Please upload a file first." , type = "warning" )
649+ error = "Load data failed: no data found, please upload a file first."
650+ logger .warning (error )
651+ ui .notify (error , type = "warning" )
643652 return
644653 else :
645- logger .error ("Unknown load type selected." )
654+ error = "Load data failed: unknown load type selected."
655+ logger .error (error )
656+ ui .notify (error , type = "warning" )
646657 return
647658
648659 df = self .storage .get ("df" , pd .DataFrame ())
649660 if df is not None or not df .empty :
650- logger .info ("Data loaded successfully ." )
651- ui .notify ("File loaded successfully ." , type = "positive" )
661+ logger .info ("Load data completed ." )
662+ ui .notify ("Load data completed ." , type = "positive" )
652663 else :
653- logger .warning ("No data found. Please upload a file first." )
654- ui .notify ("No data found. Please upload a file first." , type = "warning" )
664+ error = "Load data failed: no data found, please upload a file first."
665+ logger .warning (error )
666+ ui .notify (error , type = "warning" )
655667
656668 def notification_running_start (self , message ):
657669 notification = ui .notification (timeout = None , type = "ongoing" )
@@ -670,27 +682,24 @@ async def async_run_mapper(self):
670682 notification = self .notification_running_start ("Running Mapper..." )
671683 df_X = self .storage .get ("df" , pd .DataFrame ())
672684 if df_X is None or df_X .empty :
673- logger .warning ("No data found. Please load data first." )
674- self .notification_running_stop (
675- notification ,
676- "Running Mapper failed: No data found, please load data first." ,
677- type = "warning" ,
678- )
685+ error = "Run Mapper failed: no data found, please load data first."
686+ logger .warning (error )
687+ self .notification_running_stop (notification , error , type = "warning" )
679688 return
680689 mapper_config = self .get_mapper_config ()
681690 result = await run .cpu_bound (run_mapper , df_X , ** asdict (mapper_config ))
682691 if result is None :
683- self . notification_running_stop (
684- notification , "Running Mapper failed." , type = " error"
685- )
692+ error = "Run Mapper failed: something went wrong."
693+ logger . error ( error )
694+ self . notification_running_stop ( notification , error , type = "error" )
686695 return
687696 mapper_graph , df_y = result
688697 if mapper_graph is not None :
689698 self .storage ["mapper_graph" ] = mapper_graph
690699 if df_y is not None :
691700 self .storage ["df_y" ] = df_y
692701 self .notification_running_stop (
693- notification , "Running Mapper completed." , type = "positive"
702+ notification , "Run Mapper completed." , type = "positive"
694703 )
695704 await self .async_draw_mapper ()
696705
@@ -705,11 +714,12 @@ async def async_draw_mapper(self):
705714 mapper_graph = self .storage .get ("mapper_graph" , None )
706715
707716 if df_X .empty or mapper_graph is None :
708- logger .warning ("No data or Mapper graph found. Please run Mapper first." )
717+ error = (
718+ "Draw Mapper failed: no Mapper graph found, please run Mapper first."
719+ )
720+ logger .warning (error )
709721 self .notification_running_stop (
710- notification = notification ,
711- message = "Drawing Mapper failed: no data or graph found." ,
712- type = "warning" ,
722+ notification = notification , message = error , type = "warning"
713723 )
714724 return
715725
@@ -722,9 +732,8 @@ async def async_draw_mapper(self):
722732 ** asdict (mapper_config ),
723733 )
724734 if mapper_fig is None :
725- self .notification_running_stop (
726- notification , "Drawing Mapper failed." , type = "error"
727- )
735+ error = "Draw Mapper failed: something went wrong."
736+ self .notification_running_stop (notification , error , type = "error" )
728737 return
729738
730739 logger .info ("Displaying Mapper plot." )
@@ -734,7 +743,7 @@ async def async_draw_mapper(self):
734743 with self .plot_container :
735744 self .draw_area = ui .plotly (mapper_fig ).classes ("w-full h-full" )
736745 self .notification_running_stop (
737- notification , "Drawing Mapper completed" , type = "positive"
746+ notification , "Draw Mapper completed. " , type = "positive"
738747 )
739748
740749
0 commit comments