diff --git a/callbacks.py b/callbacks.py index ce52350fe5475f497af33119ee1716e809b126b5..8618810ef4eb103bc2ef64c6a4c1386e6b4de656 100644 --- a/callbacks.py +++ b/callbacks.py @@ -1,6 +1,5 @@ import dash from dash.dependencies import Input, Output, State -from dash.exceptions import PreventUpdate import dash_bootstrap_components as dbc from dash import Input, Output, State, html @@ -13,10 +12,16 @@ sys.modules['xrf'] = xrf ####### Creates alerts when callback fails ######### -alert_selection_model = html.Div([dbc.Alert("You didn't choose a king of Machine Learning model first..", +warning_selection_model = html.Div([dbc.Alert("You didn't choose a king of Machine Learning model first.", is_open=True, color='warning', duration=10000, ), ]) + +warning_selection_pretrained_model = html.Div([dbc.Alert("You uploaded the data, now upload the pretrained model.", + is_open=True, + color='warning', + duration=10000, ), ]) + alert_network = html.Div([dbc.Alert("There was a problem while computing the graph, read the documentation. \ You might have forgotten to upload the data for Random Forest or you tried to upload an unknown format.", is_open=True, @@ -120,89 +125,90 @@ def register_callbacks(page_home, page_course, page_application, app): model_application.update_ml_model(value_ml_model) return None, None + # Choice of information for the model - data, feature mapping ... + elif ihm_id == 'model_info_choice': + try : + model_info = parse_contents_data(model_info, model_info_filename) + model_application.model_info = model_info + if model_application.ml_model is None: + return warning_selection_model, None + model_application.update_pretrained_model_layout_with_info(model_info, model_info_filename) + return model_application.component.network, None + except: + return warning_selection_pretrained_model, None + # Choice of pkl pretrained model elif ihm_id == 'ml_pretrained_model_choice': - if model_application.ml_model is None: - return alert_selection_model, None - else: - try: - graph = parse_contents_graph(pretrained_model_contents, pretrained_model_filename) - model_application.update_pretrained_model(graph) - if not model_application.add_info: - model_application.update_pretrained_model_layout() - return model_application.component.network, None - else: - if model_application.model_info is None: - return alert_network, None - else: - model_application.update_pretrained_model_layout_with_info(model_application.model_info, - model_info_filename) - return model_application.component.network, None - except: - return alert_network, None - - # Choice of information for the model - elif ihm_id == 'model_info_choice': - model_info = parse_contents_data(model_info, model_info_filename) - model_application.model_info = model_info - if model_application.ml_model is None or model_application.pretrained_model is None: - raise PreventUpdate - model_application.update_pretrained_model_layout_with_info(model_info, model_info_filename) - return model_application.component.network, None + try: + graph = parse_contents_graph(pretrained_model_contents, pretrained_model_filename) + model_application.update_pretrained_model(graph) + if not model_application.add_info: + model_application.update_pretrained_model_layout() + return model_application.component.network, None + else: + model_application.update_pretrained_model_layout_with_info(model_application.model_info, + model_info_filename) + return model_application.component.network, None + except: + return alert_network, None # Choice of instance to explain elif ihm_id == 'ml_instance_choice': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.enum <= 0 or model_application.xtype is None: - raise PreventUpdate try: instance = parse_contents_instance(instance_contents, instance_filename) model_application.update_instance(instance) return model_application.component.network, model_application.component.explanation except: - return alert_network, alert_explanation + return model_application.component.network, alert_explanation # Choice of number of expls elif ihm_id == 'number_explanations': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.instance is None or model_application.solver is None or model_application.xtype is None: - raise PreventUpdate - model_application.update_enum(enum) - return model_application.component.network, model_application.component.explanation + try: + model_application.update_enum(enum) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation # Choice of AxP or CxP elif ihm_id == 'explanation_type': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.instance is None or model_application.enum <= 0 or model_application.solver is None: - raise PreventUpdate - model_application.update_xtype(xtype) - return model_application.component.network, model_application.component.explanation + try: + model_application.update_xtype(xtype) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation # Choice of solver elif ihm_id == 'solver_sat': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.instance is None or model_application.enum <= 0 or model_application.xtype is None: - raise PreventUpdate - model_application.update_solver(solver) - return model_application.component.network, model_application.component.explanation + try: + model_application.update_solver(solver) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation # Choice of AxP to draw elif ihm_id == 'expl_choice': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.instance is None or model_application.enum <= 0 or model_application.xtype is None: - raise PreventUpdate - model_application.update_expl(expl_choice) - return model_application.component.network, model_application.component.explanation + try : + model_application.update_expl(expl_choice) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation # Choice of CxP to draw elif ihm_id == 'cont_expl_choice': - if model_application.ml_model is None or model_application.pretrained_model is None or model_application.instance is None or model_application.enum <= 0 or model_application.xtype is None: - raise PreventUpdate - model_application.update_cont_expl(cont_expl_choice) - return model_application.component.network, model_application.component.explanation + try: + model_application.update_cont_expl(cont_expl_choice) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation # In the case of RandomForest, id of tree to choose to draw tree elif ihm_id == 'choice_tree': - if model_application.ml_model is None or model_application.pretrained_model is None: - raise PreventUpdate - model_application.update_tree_to_plot(id_tree) - return model_application.component.network, model_application.component.explanation + try : + model_application.update_tree_to_plot(id_tree) + return model_application.component.network, model_application.component.explanation + except: + return model_application.component.network, alert_explanation @app.callback( Output('explanation', 'hidden'),